MP4文件結構刨析_第1頁
MP4文件結構刨析_第2頁
MP4文件結構刨析_第3頁
MP4文件結構刨析_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、unktable,andthechunkoffsettable.這些表就可以找到 track 中每個sample 在文件中的位置和大小。datareference 允許在第二個媒體文件中找到媒體的位置。 這樣, 一部電影就可以由一個媒體數據庫中的多個不同文件組成,而且不用把它們全部拷貝到另一個新文件中。例如,對視頻編輯就很有幫助。為了節約空間,這些表都很緊湊。另外,interleave 不是 samplebysample,而是把單個 track 的幾個 samples組合到一起,然后另外幾個 sample 又進行新的組合,等等。一個 track 的連續幾個 sample 組成的單元就被稱為 c

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論