MP4文件結(jié)構(gòu)刨析_第1頁
MP4文件結(jié)構(gòu)刨析_第2頁
MP4文件結(jié)構(gòu)刨析_第3頁
MP4文件結(jié)構(gòu)刨析_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、OverviewandIntroductionCoreConceptsMP4 文件格式中,所有的內(nèi)容存在一個(gè)稱為 movie 的容器中。一個(gè) movie 可以由多個(gè) tracks組成。每個(gè) track 就是一個(gè)隨時(shí)間變化的媒體序列,例如,視頻幀序列。track 里的每個(gè)時(shí)間單位是一個(gè) sample,它可以是一幀視頻,或者音頻。sample 按照時(shí)間順序排列。注意,一幀音頻可以分解成多個(gè)音頻 sample,所以音頻一般用 sample 作為單位,而不用幀。MP4 文件格式的定義里面,用 sample 這個(gè)單詞表示一個(gè)時(shí)間幀或者數(shù)據(jù)單元。每個(gè) track 會(huì)有一個(gè)或者多個(gè)sampledescrip

2、tions。track 里面的每個(gè) sample 通過弓 I 用關(guān)聯(lián)至1J個(gè) sampledescription。這個(gè)sampledescriptions 定義了怎樣解碼這個(gè) sample,例如使用的壓縮算法。與其他的多媒體文件格式不同的是,MP4 文件格式經(jīng)常使用幾個(gè)不同的概念,理解其不同是理解這個(gè)文件格式的關(guān)鍵。這個(gè)文件的物理格式?jīng)]有限定媒體本身的格式。例如,許多文件格式將媒體數(shù)據(jù)分成幀,頭部或者其他數(shù)據(jù)緊緊跟隨每一幀視頻,!TODO(例如 MPEG2)。而 MP4 文件格式不是如此。文件的物理格式和媒體數(shù)據(jù)的排列都不受媒體的時(shí)間順序的限制。視頻幀不需要在文件按時(shí)間順序排列。這就意味著如果

3、文件中真的存在這樣的一些幀,那么就有一些文件結(jié)構(gòu)來描述媒體的排列和對應(yīng)的時(shí)間信息。MP4 文件中所有的數(shù)據(jù)都封裝在一些 box 中(以前叫 atom)。所有的 metadata(媒體描述元數(shù)據(jù)),包括定義媒體的排列和時(shí)間信息的數(shù)據(jù)都包含在這樣的一些結(jié)構(gòu) box 中。MP4 文件格式定義了這些 box 的格式。Metadata 對媒體數(shù)據(jù)(例如,視頻幀)引用說明。媒體數(shù)據(jù)可以包含在同一個(gè)的一個(gè)或多個(gè) box 里,也可以在其他文件中,metadata 允許使用 URLs 來引用其他的文件,而媒體數(shù)據(jù)在這些引用文件中的排列關(guān)系全部在第一個(gè)主文件中的 metadata 描述。其他的文件不一定是 MP4

4、 文件格式,例如,可能就沒有一個(gè) box。有很多種類的 track,其中有三個(gè)最重要,videotrack 包含了視頻 sample;audiotrack 包含了 audiosample;hinttrack 稍有不同,它描述了一個(gè)流媒體服務(wù)器如何把文件中的媒體數(shù)據(jù)組成符合流媒體協(xié)議的數(shù)據(jù)包。如果文件只是本地播放,可以忽略 hinttrack,他們只與流媒體有關(guān)系。PhysicalstructureofthemediaBox 定義了如何在 sampletable 中找到媒體數(shù)據(jù)的排列。這包括 datareference(數(shù)據(jù)引用),thesamplesizetable,thesampletoch

5、unktable,andthechunkoffsettable.這些表就可以找到 track 中每個(gè)sample 在文件中的位置和大小。datareference 允許在第二個(gè)媒體文件中找到媒體的位置。 這樣, 一部電影就可以由一個(gè)媒體數(shù)據(jù)庫中的多個(gè)不同文件組成,而且不用把它們?nèi)靠截惖搅硪粋€(gè)新文件中。例如,對視頻編輯就很有幫助。為了節(jié)約空間,這些表都很緊湊。另外,interleave 不是 samplebysample,而是把單個(gè) track 的幾個(gè) samples組合到一起,然后另外幾個(gè) sample 又進(jìn)行新的組合,等等。一個(gè) track 的連續(xù)幾個(gè) sample 組成的單元就被稱為 c

6、hunk。每個(gè) chunk 在文件中有一個(gè)偏移量,這個(gè)偏移量是從文件開頭算起的,在這個(gè) chunk 內(nèi),sample 是連續(xù)存儲(chǔ)的。這樣,如果一個(gè) chunk 包含兩個(gè) sample,第二個(gè) sample 的位置就是 chunk 的偏移量加上第一個(gè) sample 的大小。chunkoffsettable 說明了每個(gè) chunk 的偏移量,sampletochunktable 說明了 sample 序號和 chunk 序號的映射關(guān)系。注意 chunk 之間可能會(huì)有死區(qū),沒有任何媒體數(shù)據(jù)引用到這部分區(qū)域,但是 chunk 內(nèi)部不會(huì)有這樣的死區(qū)。這樣,如果在節(jié)目編輯的時(shí)候,不需要一些媒體數(shù)據(jù),就可以

7、簡單的留在那里,而不用引用,這樣就不用刪除它們了。類似的,如果媒體存放在第二個(gè)文件中,但是格式不同于 MP4 文件格式,這個(gè)陌生文件的頭部或者其他文件格式都可以簡單忽略掉。Temporalstructureofthemedia文件中的時(shí)間可以理解為一些結(jié)構(gòu)。電影以及每個(gè) track 都有一個(gè) timescale。它定義了一個(gè)時(shí)間軸來說明每秒鐘有多少個(gè) tickso 合理的選擇這個(gè)數(shù)目,就可以實(shí)現(xiàn)準(zhǔn)確的計(jì)時(shí)。一般來說,對于 audiotrack,就是 audio 的 samplingrate。對于 videotrack,情況稍微復(fù)雜,需要合理選擇。例如,如果一個(gè) mediaTimeScale 是

8、 30000,mediasampledurations 是 1001,就準(zhǔn)確的定義了 NTSCvideo 的時(shí)間格式(雖然不準(zhǔn)確,但一般就是 29.97),andprovide19.9hoursoftimein32bits.Track 的時(shí)間結(jié)構(gòu)受一個(gè) editlist 影響,有兩個(gè)用途:全部電影中的一個(gè) track 的一部分時(shí)間片斷變化(有可能是重用);空白時(shí)間的插入,也就是空的 edits。特別注意的是如果一個(gè) track不是從節(jié)目開頭部分開始,editlist 的第一個(gè) edit 就一定是空的 edit。每個(gè) track 的全部 duration 定義在文件頭部,這就是對 track 的

9、總結(jié),每個(gè) sample 有一個(gè)規(guī)定的 duration。一個(gè) sample 的準(zhǔn)確描述時(shí)間,也就是他的時(shí)間戳(time-stamp)就是以前的 sample 的 duration 之和。Interleave文件的時(shí)間和物理結(jié)構(gòu)可以是對齊的,這表明媒體數(shù)據(jù)在容器中的物理順序就是時(shí)間順序。另外,如果多個(gè) track 的媒體數(shù)據(jù)包含在同一個(gè)文件中,這個(gè)媒體數(shù)據(jù)可以是 interleaved。一般來說,為了方便讀取一個(gè) track 的媒體數(shù)據(jù),同時(shí)保證每個(gè)表緊湊,以一個(gè)合適的時(shí)間間隔(例如 1 秒)做一次 interleave,而不是 samplebysample。這樣就可以減少 chunk 的數(shù)據(jù)

10、,減小 chunkoffsettable 的大小。Composition如果多個(gè) audiotrack 包含在同一個(gè)文件中,他們有可能被混合在一起進(jìn)行播放,并且由一個(gè)總 trackvolume 和左/右 balance 控制。類似的,videotrack 也可以根據(jù)各自的層次序列號(從后向前)和合成模式進(jìn)行混合。另外,每個(gè) track 可以用一個(gè) matrix 進(jìn)行變換,也可以全部電影用一個(gè) matrix 進(jìn)行變換。這樣既可以進(jìn)行簡單操作(例如放大圖像,校正 90o 旋轉(zhuǎn)),也可以做更復(fù)雜的操作(例如 shearing,arbitraryrotation)。(例如 MPEG-4BIFS)Ran

11、domaccess這一章說明如何 seek。Seeking 主要是利用 sampletablebox 里面包含的子 box 來實(shí)現(xiàn)的,還需要考慮 editlist的影響??梢园凑找韵虏襟E seek 某一個(gè) track 到某個(gè)時(shí)間 T,注意這個(gè) T 是以 movieheaderbox 里定義的 timescale 為單位的:1.如果 track 有一個(gè) editlist,遍歷所有的 edit,找到 T 落在哪個(gè) edit 里面。將 Edit 的開始時(shí)間變換為以movietimescale 為單位,得到 EST,T 減去 EST,得到 T,就是在這個(gè) edit 里面的 duration,注意此時(shí)

12、T是以 movie 的 timescale 為單位的。然后將 T轉(zhuǎn)化成 track 媒體的 timescale,得到 T。T與 Edit 的開始時(shí)間相加得到以 track 媒體的 timescale 為單位的時(shí)間點(diǎn) T。2.這個(gè) track 的 time-to-sample 表說明了該 track 中每個(gè) sample 對應(yīng)的時(shí)間信息,利用這個(gè)表就可以得到 T對應(yīng)的 sampleNT。3 .sampleNT可 能 不 是 一 個(gè) randomaccesspoint, 這 樣 就 需 要 其 他 表 的 幫 助 來 找 到 最 近 的randomaccesspoint。個(gè)表是 syncsampl

13、e 表,定義哪些 sample 是 randomaccesspoint。使用這個(gè)表就可以找到指定時(shí)間點(diǎn)最近的 syncsample。如果沒有這個(gè)表,就說明所有的 sample 都是 synchronizationpoints,問題就變得更容易了。另一個(gè)mp4文件格式獲取mp4文件信息7-查找關(guān)鍵幀wqyuwss 發(fā)表于 2007-5-14:48:00查找過程與查找 sample 的過程非常類似,只是需要利用 syncsampleatom 來確定 keyframe 的sample 序號1.確定給定時(shí)間的 sample 序號2.檢查 syncsampleatom 來發(fā)現(xiàn)這個(gè) sample 序號之后

14、的 keyframe3.檢查 sample-to-chunkatom 來發(fā)現(xiàn)對應(yīng)該 sample 的 chunk4.從 chunkoffsetatom 中提取該 trunk 的偏移量5.利用 samplesizeatom 找至 Usample 在 trunk 內(nèi)的偏移量和 sample 的大小mp4文件格式獲取mp4文件信息6-查找samplewqyuwss 發(fā)表于 2007-5-14:47:00當(dāng)播放一部電影或者一個(gè) track 的時(shí)候,對應(yīng)的 mediahandler 必須能夠正確的解析數(shù)據(jù)流,對一定的時(shí)間獲取對應(yīng)的媒體數(shù)據(jù)。如果是視頻媒體,mediahandler 可能會(huì)解析多個(gè) ato

15、m,才能找到給定時(shí)間的 sample 的大小和位置。具體步驟如下:1 .確定時(shí)間,相對于媒體時(shí)間坐標(biāo)系統(tǒng)2 .檢查 time-to-sampleatom 來確定給定時(shí)間的 sample 序號。3 .檢查 sample-to-chunkatom 來發(fā)現(xiàn)對應(yīng)該 sample 的 chunk。這個(gè)混合方法只是非常簡單,是一個(gè)缺省的方法,MPEG4 的另一份文檔會(huì)定義更強(qiáng)有力的方法4 .從 chunkoffsetatom 中提取該 trunk 的偏移量。5 .利用 samplesizeatom 找到 sample 在 trunk 內(nèi)的偏移量和 sample 的大小。例如,如果要找第 1 秒的視頻數(shù)據(jù),

16、過程如下:1 .第 1 秒的視頻數(shù)據(jù)相對于此電影的時(shí)間為 6002 .檢查 time-to-sampleatom,得出每個(gè) sample 的 duration 是 40,從而得出需要尋找第 600/40=15+1=16 個(gè) sample3 .檢查 sample-to-chunkatom,得至1J 該 sample 屬于第 5 個(gè) chunk 的第個(gè) sample,該 chunk 共有 4 個(gè) sample4 .檢查 chunkoffsetatom 找到第 5 個(gè) trunk 的偏移量是 204725 .由于第 16 個(gè) sample 是第 5 個(gè) trunk 的第一個(gè) sample,所以不用檢查 samplesizeatom,trunk 的偏移量即是該 sample 的偏移量 20472。如果是這個(gè) trunk 的第二個(gè) sample,則從 samplesizeatom 中找到該 trunk 的前一個(gè) sample 的大小,然后加上偏移量即可得到實(shí)際位置。6 .得到位置后,即可取出相應(yīng)數(shù)據(jù)進(jìn)行解碼,播放mp4文件格式獲取mp4文件信息5-計(jì)算電影的比特率wqyuwss 發(fā)表于 2007-5-14:46:00整部電影的尺寸除以長度,即是比特率,此電影的比特率為 846623/70=12094bpsmp4文件格式獲取mp4文件信息4-計(jì)算視頻幀率wqyuwss 發(fā)表于

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論