《視頻文件格式和視頻編碼方式區(qū)別》由會(huì)員分享,可在線閱讀,更多相關(guān)《視頻文件格式和視頻編碼方式區(qū)別(3頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、目前網(wǎng)上的各種視頻格式可以說(shuō)是泛濫成災(zāi),加上各個(gè)PMP(PortableMediaPlayer,
便攜式媒體播放器)生產(chǎn)廠家的對(duì)自己產(chǎn)品在功能方面的炒作,使得很多人對(duì)視頻格式的名
稱都是一頭的霧水。
經(jīng)常有些童鞋問(wèn)我類似下面的問(wèn)題。
A問(wèn)我說(shuō):“我的MP4分明寫著能播放AVI嗎?為什么這一個(gè)AVI文件就播放不了?”
B問(wèn):“我的MP4^IMpeg-4啊,為什么Mp4文件不能播放呢?”
好的,下面我從最基本的概念給大家解釋一下,順便回答這兩個(gè)問(wèn)題
首先大家要清楚兩個(gè)概念,視頻文件格式和視頻編碼方式。
視頻文件格式一般情況下從視頻文件的后綴名就能看出來(lái),比如AVI,Mp4,3gp,
2、mov,
rmvb等等。這些格式又叫做容器格式(containerformat),顧名思義就是用來(lái)裝東西的,
你可以把它想象成為一個(gè)便當(dāng)盒,或者野餐籃(兄弟,你沒(méi)吃早飯吧)。
通常我們從網(wǎng)上下載的電影都是有聲音的(廢話,難道你只看默片!眾人扔香蕉皮),
所以容器格式中一般至少包含有兩個(gè)數(shù)據(jù)流(stream),一個(gè)視頻流,一個(gè)音頻流,就好比
是一個(gè)便當(dāng)盒里裝著的配菜和米飯。
視頻編碼方式則是指容器格式中視頻流數(shù)據(jù)的壓縮編碼方式,例如Mpeg-4,,,等等。
而視頻數(shù)據(jù)采用了何種編碼方式是無(wú)法單單從文件格式的后綴上看出來(lái)的。就是說(shuō)你無(wú)法從
一個(gè)蓋著蓋子的便當(dāng)盒外面看出里面裝了什么配
3、菜。
如果你想播放一個(gè)視頻文件,第一步你的播放器(不論是軟件的還是硬件的)要能夠解
析相應(yīng)的容器格式,這一步也叫做解復(fù)用(demux),第二步你的播放器要能夠解碼其中所
包含視頻流和音頻流。這樣影片才能播放出來(lái)。
打個(gè)不太恰當(dāng)?shù)谋确剑シ牌骱帽饶愎陀玫囊粋€(gè)試菜員,由他來(lái)品嘗便當(dāng)(視頻文件),
然后告訴你便當(dāng)里裝了什么東西。(沒(méi)天理阿!我想自己吃,好的當(dāng)然可以,0x000001B6
05FF361A50,俄~)
所以試菜員首先要懂得如何打開便當(dāng)盒,還要知道吃的出來(lái)便當(dāng)盒里裝了什么配菜,這
樣你才能獲得你想要的信息。
回過(guò)頭來(lái)看前面的兩個(gè)問(wèn)題,用以上的比喻翻譯一下。
問(wèn)題A,我
4、的試菜員能打開AVI這種便當(dāng)?shù)?,為什么我不能知道里面裝了什么?
回答很簡(jiǎn)單,雖然他能夠打開便當(dāng),但是吃不出里面的東西是什么。理論上沒(méi)有一個(gè)播
放器能夠播放所有的AVI格式的電影,因?yàn)槟悴恢牢視?huì)往里面放什么配菜。
問(wèn)題B,我的試菜員吃過(guò)Mpeg-4這種牛排阿,為什么不能打開Mp4這種便當(dāng)盒呢?
這個(gè)問(wèn)題通過(guò)翻譯之后看起來(lái)已經(jīng)不是問(wèn)題了,Mpeg-4是視頻編碼方式,而Mp4是容
器格式,兩者本來(lái)就不是一個(gè)范疇里的東西。
好了下面簡(jiǎn)單介紹一下流行的視頻格式。
AVI是音頻視頻交錯(cuò)(AudioVideoInterleaved)的英文縮寫,它是Microsoft公
司開發(fā)的一種數(shù)字音頻
5、與視頻文件格式,允許視頻和音頻交錯(cuò)在一起同步播放。
AVI文件的格式是公開并且免費(fèi)的,大量的視頻愛(ài)好者在使用這種文件格式。很多PMP
唯一能支持的格式就是AVI格式,一般的PMPIB帶有可以轉(zhuǎn)換其他格式視頻成為AVI格式的
軟件。
AVI文件采用的是RIFF(ResourceInterchangeFileFormat,資源互換文件格式)文件結(jié)構(gòu),RIFF是Microsoft公司定義的一種用于管理windows環(huán)境中多媒體數(shù)據(jù)的文件格
式。AVI格式包括2種:AVI和Open-DMLAVI。AVI為傳統(tǒng)的AVI格式,Open-DMLAVI是
AVI的擴(kuò)展。
ASF(Advanced
6、SystemsFormat)是一個(gè)開放格式,它能依靠多種協(xié)議在多種網(wǎng)絡(luò)環(huán)境下
支持?jǐn)?shù)據(jù)的傳送。ASF是專為在IP網(wǎng)上傳送有同步關(guān)系的多媒體數(shù)據(jù)而設(shè)計(jì)的文件格式,所以ASF格式的信息特別適合在IP網(wǎng)上傳輸。ASF支持任意的壓縮/解壓縮編碼方式的流媒體,并可以使用任何一種底層網(wǎng)絡(luò)傳輸協(xié)議,具有很大的靈活性。目前網(wǎng)上以wmv為后綴的
文件絕大多數(shù)采用的是ASF格式,WM是微軟公司視頻編碼方式而不是文件格式。
,3gp,mov
MP嫡式是ISO-IECMpeg-4協(xié)議Part14中定義的容器格式。MP嫡式實(shí)際上是對(duì)Apple公司開發(fā)的MO\M式(也稱Quicktime格式)的一種改進(jìn),兩種格式
7、差別很小。
MO%式廣泛應(yīng)用于MacOS操作系統(tǒng),在Windows操作系統(tǒng)上也可兼容,但是遠(yuǎn)比
不上AVI格式流行。
而應(yīng)用于3G手機(jī)上的音視頻文件格式一一3GP其實(shí)是MP4格式的一種簡(jiǎn)化版本,3GP格式是一種由3GPPia織制定的多媒體容器格式(containerformat),3GP呦織形成的通訊
協(xié)議是目前全世界手機(jī)廠商使用最廣的,而3GP格式當(dāng)然也是手機(jī)視頻格式的絕對(duì)主流。
MP4MOV3G咪式可以說(shuō)具有相同的文件結(jié)構(gòu)。
另外還有flv,mkv,mpg等等許多其他格式。
介紹完了格式之后,我再給大家說(shuō)明一下解復(fù)用的問(wèn)題。前面講到了容器格式中包含
視頻和音頻數(shù)據(jù),怎樣將這
8、些數(shù)據(jù)分離,并送到相應(yīng)的解碼器,而且還要保證音視頻的同步
性,這是下面要討論的話題。
各種格式的解服用并不相同。首先介紹AVI格式。
(一)AVI格式的結(jié)構(gòu)和解復(fù)用
AVI文件采用的是RIFF(ResourceInterchangeFileFormat,資源互換文件格式)文
件結(jié)構(gòu),RIFF是Microsoft公司定義的一種用于管理windows環(huán)境中多媒體數(shù)據(jù)的文件格
式。AVI格式包括2種:AVI和Open-DMLAVI。AVI為傳統(tǒng)的AVI格式,Open-DMLAVI是
AVI的擴(kuò)展。
構(gòu)造AVI文件的基本單元有2種:列表(LIST)和數(shù)據(jù)塊(Chunk),其基本結(jié)構(gòu)如圖
9、
所示。數(shù)據(jù)塊的前4個(gè)字節(jié)為數(shù)據(jù)塊的ID,接著的4個(gè)字節(jié)表示數(shù)據(jù)塊的長(zhǎng)度。列表的前4
個(gè)字節(jié)為“RIFF”或者"LIST'。列表可以嵌套子列表和數(shù)據(jù)塊。需要注意的是所給出的數(shù)
據(jù)塊和列表的長(zhǎng)度是不包含其前8個(gè)字節(jié)的。
AVI格式的文件結(jié)構(gòu)見圖。對(duì)于AVI格式,整個(gè)文件由一個(gè)開頭4字節(jié)為RIFF,ID為
AVI的列表(簡(jiǎn)稱RIFFAVI列表)組成。對(duì)于Open-DMLAVI格式,若尺寸不超過(guò)1G則文件只包含一個(gè)RIFFAVI列表;若尺寸超過(guò)1G則包含一個(gè)RIFFAVI列表和幾個(gè)RIFFAVIX列表。Open-DMLAVI所獨(dú)有的數(shù)據(jù)塊和列表在圖中作了標(biāo)注。
RIFF-AVI列表包含3
10、個(gè)子列表和一個(gè)數(shù)據(jù)塊,其ID分別為hdrl,INFO,movi和idx1,
其中INFO列表和ID為idx1數(shù)據(jù)塊是可選的。而RIFFAVIX只包含一個(gè)movi列表以存儲(chǔ)數(shù)據(jù),頭信息全都存儲(chǔ)在RIFFAVI中。
下面對(duì)RIFF-AVI列表的幾個(gè)組成部分作詳細(xì)介紹。(本文檔中有關(guān)AVI格式的結(jié)構(gòu)體
定義見,想要源代碼的留下郵箱)
(1)hdrl列表
hdrl列表包含一個(gè)ID為avih的數(shù)據(jù)塊,一個(gè)ID為odml的列表(僅Open-DMLAVI格
式具備)及幾個(gè)ID為strl的列表。strl列表的個(gè)數(shù)和文件中所包含流(stream)的個(gè)數(shù)
相等。
avih數(shù)據(jù)塊的包含最大數(shù)據(jù)率、總
11、幀數(shù)、每幀圖像的顯示時(shí)間等數(shù)據(jù)格式信息。其具
體格式見結(jié)構(gòu)體AVIMAINHEADE。R
strl列表至少包含一個(gè)ID為strh的數(shù)據(jù)塊和一個(gè)ID為strf的數(shù)據(jù)塊,而ID為strd
的數(shù)據(jù)塊(保存編解碼器需要的一些配置信息,沒(méi)有固定結(jié)構(gòu))和ID為strn的數(shù)據(jù)塊(保
存流的名字)是可選的。
strh數(shù)據(jù)塊包含數(shù)據(jù)流類型、流的編解碼方式和每秒采樣數(shù)等有關(guān)流媒體的信息。其
格式見Z^構(gòu)體AVISTREAMHEADER
strf數(shù)據(jù)塊緊跟在strh數(shù)據(jù)塊之后,其結(jié)構(gòu)視流媒體類型而定,如果strh塊對(duì)應(yīng)的
是視頻數(shù)據(jù)流,則strf的格式可見結(jié)構(gòu)體VIDEOSTREAMHEADER果s
12、trh塊對(duì)應(yīng)的是音
頻數(shù)據(jù)流,則strf的格式可見結(jié)構(gòu)體AUDIOSTREAMHEAD。ER
odml列表中包含文件總幀數(shù)等信息,具體格式見結(jié)構(gòu)體AVIEXTHEADE。R
indx數(shù)據(jù)塊包含文件的索引數(shù)據(jù),用于播放過(guò)程中進(jìn)度條的拖動(dòng)。其結(jié)構(gòu)可能為結(jié)構(gòu)
體AVISUPERINDEXAVIFIELDINDEX,AVISTDINDEk者中的一種。
值得注意的是avih數(shù)據(jù)塊中提供的總幀數(shù)為所在的RIFFAVI列表包含的數(shù)據(jù)。而odml
列表給出的總幀數(shù)則是所有的RIFFAVI列表和RIFFAVIX列表包含數(shù)據(jù)幀數(shù)之和。若文件
不含RIFFAVIX列表,則兩個(gè)值相等。
(2)movi
13、列表
movi列表可包含音頻,視頻,字幕或索引數(shù)據(jù)塊。
音頻數(shù)據(jù)塊的ID為“##wb”,未壓縮的視頻數(shù)據(jù)塊的ID為“##db”,經(jīng)過(guò)壓縮編碼的
視頻數(shù)據(jù)塊的ID為“##dc”,字幕數(shù)據(jù)塊的ID為“##tx”,索引數(shù)據(jù)塊(僅Open-DMLAVI
格式具備)的ID為ix##或#的*。索引數(shù)據(jù)塊可能為結(jié)構(gòu)體AVIFIELDINDEX或AVISTDINDEX
("##"為各個(gè)流的通道號(hào),可為“00”,“01”等,例如“00dc”表示視頻塊,“01wb’
表示音頻塊)
movi列表有2種結(jié)構(gòu),第一種如圖所示,各種數(shù)據(jù)塊直接存放在列表中。
另一種結(jié)構(gòu)如圖所示,movi列表由數(shù)個(gè)rec列表
14、組成,數(shù)據(jù)塊存放于rec列表中。
(3)idx1數(shù)據(jù)塊
idx1索引數(shù)據(jù)塊位于movi數(shù)據(jù)塊之后,包含定義movi數(shù)據(jù)塊的索引數(shù)據(jù),是可選塊,
用于播放過(guò)程中進(jìn)度條的拖動(dòng)。結(jié)構(gòu)可見結(jié)構(gòu)體AVIINDEX。
前面提到了3種索引數(shù)據(jù)塊的結(jié)構(gòu):AVISUPERINDE,XAVIFIELDINDEX,和AVISTDINDEX。
其中AVISUPERINDE湄向其他的索引數(shù)據(jù)塊;AVISTDINDEX旨向movi列表中存放數(shù)據(jù)塊;
AVIFIELDINDEX指向數(shù)據(jù)塊中的某一場(chǎng)(field)數(shù)據(jù)。這3種索引塊在目前較為少見,一般的AVI文件都是采用idx1索引塊來(lái)實(shí)現(xiàn)播放過(guò)程中進(jìn)度條的拖動(dòng)功能的。