MP4數據封裝格式


一 、MP4   https://blog.csdn.net/sdsszk/article/details/90719075

 

MP4   由很多個ATOM 嵌套構成,主要的ATOM包括  【ftyp】 【moov】【mdat】

ftyp在第一個, moov 和mdat順序不固定,moov保存着視頻播放的索引,

在線播放,moov必須在前面

部分攝像設備   moov-free-mdat

 

Atom結構:

這里寫圖片描述

 1. ftype moov 和 mdat

  ftype:

  作用:確定文件的類型

    

  MOOV 
  moov中主要保存了媒體的時間信息、trak信息和媒體索引等。

  MDAT 

  所有媒體數據統一存放在mdat中

 

3. moov  結構

 

3.1 mvhd   時間長度

(1/1000)*70080 秒

 

 

 

3.2 track  視頻索引

3.2.1  track->tkhd

  

3.2.2 moov-trak-mdia-hdlr   track 類型   包括’vide’, ‘soun’和’hint’三種。

 

 

 3.2.3    track 時間

  moov-track-media-mdhd   :

 

  moov-trak-mdia-minf-stbl-stts中有媒體幀之間的時間間隔,單位是moov-trak-tkhd中的時間粒度。

 

3.2.4

moov-trak-mdia-minf-stbl比較重要,其中保存了解碼器需要的信息和索引信息,以下Atom都是stbl Atom的孩子。 
stsd中保存了解碼器需要的媒體描述信息。 

 

stss  標識媒體流中的關鍵幀

 

 

stts  數據幀之間的間隔

 

 

 

stco     每個數據Chunk在文件中的偏移

 

 stsc給出各個數據Chunk中包含的數據幀。一個chunk可能會包含一個或者幾個幀。每個chunk會有不同的size,每個chunk中的幀也會有不同的size。 

 

 

 

 

 

stsz  樣本大小

 

 

 

4  實際應用場景

1、把文件尾部的moov移到文件頭 
對於流媒體播放,如果mdat的位置在moov之前,通過流的方式播放文件會出現問題,因為沒有辦法在一開始就獲得文件的媒體信息和索引。 
這種情況需要對視頻做預處理,把moov移動到文件頭。通過遍歷Atom可以很容易找到moov Atom。

需要注意的是,移動moov到文件頭,同時需要修改moov中的stco/co64。因為這里保存了chunk數據的偏移量,移動moov后,需要根據moov的新位置更新stco/co64 。

 

2、分割MP4文件 
在視頻點播服務中,需要將MP4文件分割為多個分片,此時需要獲取關鍵幀、切割時間軸、更新moov和生成各個分片文件。

可參考 http://www.cnblogs.com/haibindev/archive/2011/10/17/2214518.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM