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

下載本文檔

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

文檔簡介

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

2、多個 sample description s 。 track 里面的每個 sample 通過引用關(guān)聯(lián)到一個 sample description 。 這個 sample description s 定義了怎樣解碼這個 sample ,例如使用的壓縮算法。 與其他的多媒體文件格式不同的是, MP4 文件格式經(jīng)常使用幾個不同的概念,理解其不同是理 解這個文件格式的關(guān)鍵。這個文件的物理格式?jīng)]有限定媒體本身的格式。 例如, 許多文件格式將媒體數(shù)據(jù)分成幀, 頭部或 者其他數(shù)據(jù)緊緊跟隨每一幀視頻,! TODO (例如 MPEG2 )。而 MP4 文件格式不是如此。 文件的物理格式和媒體數(shù)據(jù)的排列都不受媒

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

4、中的排列關(guān)系全部在第一個主文件中的metadata 描述。其他的文件不一定是 MP4 文件格式,例如,可能就沒有一個 box。有很多種類的 track ,其中有三個最重要, video track 包含了視頻 sample ;audio track 包含 了 audio sample ;hint track 稍有不同,它描述了一個流媒體服務(wù)器如何把文件中的媒體數(shù)據(jù) 組成符合流媒體協(xié)議的數(shù)據(jù)包。 如果文件只是本地播放,可以忽略 hint track ,他們只與流媒 體有關(guān)系。Physical structure of the mediaBox 定義了如何在 sample table 中找到媒體數(shù)

5、據(jù)的排列。這包括 data reference( 數(shù)據(jù)引用 ), t he sample size table, the sample to chunk table, and the chunk offset table. 這些表就 可以找到 track 中每個 sample 在文件中的位置和大小。data reference 允許在第二個媒體文件中找到媒體的位置。這樣,一部電影就可以由一個媒體 數(shù)據(jù)庫中的多個不同文件組成, 而且不用把它們?nèi)靠截惖搅硪粋€新文件中。例如,對視頻編輯 就很有幫助。為了節(jié)約空間,這些表都很緊湊。另外, interleave 不是 sample by sample

6、,而是把單個 track 的幾個 samples 組合到一起,然后另外幾個 sample 又進行新的組合,等等。一個 track 的連續(xù) 幾個 sample 組成的單元就被稱為 chunk 。每個 chunk 在文件中有一個偏移量,這個偏移量是 從文件開頭算起的,在這個 chunk 內(nèi), sample 是連續(xù)存儲的。這樣,如果一個 chunk 包含兩個 sample ,第二個 sample 的位置就是 chunk 的偏移量加上第一 個 sample 的大小。 chunk offset table 說明了每個 chunk 的偏移量, sample to chunk table 說明了 sampl

7、e 序號和 chunk 序號的映射關(guān)系。注意 chunk 之間可能會有死區(qū),沒有任何媒體數(shù)據(jù)引用到這部分區(qū)域,但是 chunk 內(nèi)部不會有 這樣的死區(qū)。這樣,如果在節(jié)目編輯的時候,不需要一些媒體數(shù)據(jù),就可以簡單的留在那里,而 不用引用, 這樣就不用刪除它們了。 類似的,如果媒體存放在第二個文件中,但是格式不同于 M P4 文件格式,這個陌生文件的頭部或者其他文件格式都可以簡單忽略掉。Temporal structure of the media文件中的時間可以理解為一些結(jié)構(gòu)。電影以及每個 track 都有一個 time scale 。它定義了一個時 間軸來說明每秒鐘有多少個 ticks 。合理

8、的選擇這個數(shù)目,就可以實現(xiàn)準確的計時。一般來說, 對于 audio track ,就是 audio 的 sampling rate 。對于 video track ,情況稍微復(fù)雜,需要合理 選擇。例如,如果一個 media TimeScale 是 30000 , media sample durations 是 1001 ,就準 確的定義了 NTSC video 的時間格式(雖然不準確,但一般就是 29.97 ), and provide 19.9 hours of time in 32 bits.Track 的時間結(jié)構(gòu)受一個 edit list 影響,有兩個用途:全部電影中的一個 track

9、 的一部分時間片 斷變化(有可能是重用);空白時間的插入,也就是空的 edits 。特別注意的是如果一個 track 不是從節(jié)目開頭部分開始, edit list 的第一個 edit 就一定是空的 edit 。每個 track 的全部 duration 定義在文件頭部,這就是對 track 的總結(jié),每個 sample 有一個規(guī)定 的 duration 。一個 sample 的準確描述時間,也就是他的時間戳 (time-stamp) 就是以前的 sampl e 的 duration 之和。Interleave文件的時間和物理結(jié)構(gòu)可以是對齊的, 這表明媒體數(shù)據(jù)在容器中的物理順序就是時間順序。 另外

10、, 如果多個 track 的媒體數(shù)據(jù)包含在同一個文件中,這個媒體數(shù)據(jù)可以是 interleaved 。一般來說, 為了方便讀取一個 track 的媒體數(shù)據(jù), 同時保證每個表緊湊, 以一個合適的時間間隔 (例如 1 秒) 做一次 interleave ,而不是 sample by sample 。這樣就可以減少 chunk 的數(shù)據(jù),減小 chunk of fset table 的大小。Composition如果多個 audio track 包含在同一個文件中,他們有可能被混合在一起進行播放,并且由一個總 track volume 和左 /右 balance 控制。類似的, video track

11、 也可以根據(jù)各自的層次序列號(從后向前)和合成模式進行混合。另外, 每個 track 可以用一個 matrix 進行變換,也可以全部電影用一個 matrix 進行變換。這樣既可以 進行簡單操作(例如放大圖像,校正 90o 旋轉(zhuǎn)),也可以做更復(fù)雜的操作(例如 shearing, arb itrary rotation )。這個混合方法只是非常簡單,是一個缺省的方法,MPEG4的另一份文檔會定義更強有力的方法(例如 MPEG-4 BIFS)Random access這一章說明如何 seek。Seeking主要是利用sample table box里面包含的子 box來實現(xiàn)的,還 需要考慮edit

12、list的影響。可以按照以下步驟 seek某一個track到某個時間 T,注意這個 T是以movie header box里定 義的time scale為單位的:1. 如果track有一個edit list,遍歷所有的edit,找到T落在哪個edit里面。將Edit的開始時間變換為以 movie time scale為單位,得到 EST,T減去EST,得到T',就是在 這個edit里面的duration,注意此時 T'是以movie的time scale為單位的。然后將 T' 轉(zhuǎn)化成track媒體的time scale,得到T''。T''

13、與Edit的開始時間相加得到以track媒體的time scale為單位的時間點 T'''。2. 這個track的time-to-sample 表說明了該track中每個sample對應(yīng)的時間信息, 利用這 個表就可以得到 T'"對應(yīng)的sample Nt。3. sample NT可能不是一個 random access point,這樣就需要其他表的幫助來找到最近的 random access point。一個表是 sync sample 表,定義哪些 sample 是 random ac cess point。使用這個表就可以找到指定時間點最近的sy

14、nc sample。如果沒有這個表,就說明所有的sample都是synchronizationpoints,問題就變得更容易了。另一個mp4文件格式獲取mp4文件信息7 -查找關(guān)鍵幀wqyuwss 發(fā)表于 2007-5-1 4:48:00查找過程與查找 sample的過程非常類似,只是需要利用sync sample atom來確定key frame的sample序號1. 確定給定時間的 sample序號2. 檢查sync sample atom 來發(fā)現(xiàn)這個 sample序號之后的 key frame3. 檢查 sample-to-chunk atom 來發(fā)現(xiàn)對應(yīng)該 sample 的 chunk

15、4. 從chunk offset atom中提取該trunk的偏移量5. 利用 sample size atom 找至U sample在trunk內(nèi)的偏移量和 sample的大小mp4文件格式獲取mp4文件信息6 -查找samplewqyuwss 發(fā)表于 2007-5-1 4:47:00當播放一部電影或者一個track的時候,對應(yīng)的media handler必須能夠正確的解析數(shù)據(jù)流,對一定的時間獲取對應(yīng)的媒體數(shù)據(jù)。如果是視頻媒體,media handler可能會解析多個 atom,才能找到給定時間的 sample的大小和位置。具體步驟如下:1 確定時間,相對于媒體時間坐標系統(tǒng)2. 檢查time

16、-to-sample atom來確定給定時間的sample序號。3. 檢查 sample-to-chunk atom 來發(fā)現(xiàn)對應(yīng)該 sample 的 chunk。4. 從chunk offset atom中提取該trunk的偏移量。5. 利用 sample size atom 找至U sample 在trunk 內(nèi)的偏移量和 sample的大小。例如,如果要找第1秒的視頻數(shù)據(jù),過程如下:1. 第1秒的視頻數(shù)據(jù)相對于此電影的時間為6002. 檢查time-to-sample atom,得岀每個 sample的duration是40,從而得岀需要尋找第600/40 = 15 + 1 = 16 個

17、sample3. 檢查 sample-to-chunk atom,得到該 sample 屬于第 5 個 chunk 的第一個 sample,該 ch unk 共有 4 個 sample4. 檢查chunk offset atom找到第 5個trunk的偏移量是 204725. 由于第16個sample是第5個trunk的第一個sample,所以不用檢查 sample size atom, trunk的偏移量即是該 sample的偏移量20472。如果是這個 trunk的第二個sample,貝U 從sample size atom中找到該trunk的前一個sample的大小,然后加上偏移量即可得到 實際位置。6. 得到位置后,即可取岀相應(yīng)數(shù)據(jù)進行解碼,播放mp4文件格式獲取mp4文件信息5 -計算電影的比特率wqyuwss 發(fā)表于 2007-5-1 4:46:00846623/70 = 12094 bps整部電影的尺寸除以長度,即是比特率,此電影的比特率為mp4文件格式獲取mp4文件信息4 -計算視頻幀率wqyuwss 發(fā)

溫馨提示

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

評論

0/150

提交評論