MP4檔案結構(2)__codec

來源:互聯網
上載者:User

以一個長度為10秒的MP4為例,其結構可能如下:

type: ftyp,        size:       24
type: mdat,     size:  8884701
type: mdat,     size:   136125
type: moov,     size:     4656 1. ftyp

一個ftyp對檔案的類型進行描述,指明其符合哪些格式。一般就是mp4格式了。符合本文檔的媒體類型有很多種,box條目的種類也不同,所以需要brand與compatible_brands的來說明此檔案內的box的種類。文檔中定義了isom, avc1, iso2, mp71, iso3這些brand應有的格式,當解碼器在讀出其brand後,就知道該檔案的格式了。

aligned(8) class FileTypeBox extends Box(‘ftyp’) {  unsigned int(32) major_brand;  unsigned int(32) minor_version;  unsigned int(32) compatible_brands[]; // to end of the box}

2. mdat

上例中有2個mdat,一個是視頻內容、另一個音頻內容。對於h264, aac編碼的媒體來說,其視頻mdat中內容是nal,對於音頻來說,其內容為aac的一幀。mdat中的幀依次存放,每個幀的位置、時間、長度都由moov中的資訊指定。可以看出,mdat是很好組建的,這種Box只含有資料。

aligned(8) class MediaDataBox extends Box(‘mdat’) {   bit(8) data[];}

3. moov

moov存放影片的所有資訊,一個moov含有多個trak。通常對於一個片子來說,就是一個視頻trak,一個音頻trak。MP4檔案的重點也在於此。


(1) trak / tkhd

對於視頻trak,存寬、高資訊;對於音頻trak,存音量資訊。並不是太重要,真正初始化解碼器要靠 stsd中的資訊。

(2) trak / mdia / hdlr

標明該trak是視頻還是音頻

(3) trak / mdia / minf / stbl

所有重要的表都在這裡。其中,

   - stsd: 編碼器CODEC資訊

   - stsz: 用於sample的劃分,通常一個sample可以對應於frame。

   - stsc: 多個sample組成一個trunk,不過實際操作中可以讓一個sample直接構成一個trunk

   - stco: trunk在檔案中的位置,用於定位。

   - stts / ctts: 指定每個sample的PTS, DTS

(4) trak / edts / elst

把視頻分為多段segment, 每個的起始時間和時間長度



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.