IOS 基礎媒體檔案格式文法描述和語意(MP4檔案格式分析執行個體)

來源:互聯網
上載者:User
一、基本對象 Box

Boxes start with a header which gives both size and type. 

在最前面Box 包含 size和type,size和type都是佔4個位元組。


The header permits compact or extended size (32or 64 bits) and compact or extended types (32 bits or full Universal Unique IDentifiers, i.e. UUIDs). 

允許根據需要,將size 簡化或者擴充,同樣的,對於type 也可以根據需要進行簡化或者擴充。

簡化,即使用32位的 size 和type. 擴充,即使用64位的size 和type.


The standard boxes all use compact types (32-bit) and most boxes will use the compact (32-bit) size. 

標準的box 使用簡化的type,即32位的,大多數box一般也都使用簡化的 32位的 size。


Typicallyonly the Media Data Box(es) need the 64-bit size.

但是 Media Data Box 需要使用64位的size.


The size is the entire size of the box, including the size and type header, fields, and all contained boxes.  

size指的是整個Box的大小,包括頭部的 size和type 的大小,以及後面的值和所有的包含的其他box .

 aligned(8) class Box (unsigned int(32) boxtype,optional unsigned int(8)[16] extended_type) {   unsigned int(32) size;   unsigned int(32) type = boxtype;   if (size==1) {      unsigned int(64) largesize;   } else if (size==0) {      // box extends to end of file   }if (boxtype==‘uuid’) {unsigned int(8)[16] usertype = extended_type;}}  

二、擴充項物件

擴充項物件繼承了 Box,並在此基礎上增加了 version和 flages.

 aligned(8) class FullBox(unsigned int(32) boxtype, unsigned int(8) v, bit(24) f) extends Box(boxtype) {unsigned int(8) version = v;bit(24) flags = f;}  

三、構建檔案對象

1、File Type Box 

 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}  

計算一下FileTypeBox的大小:

size佔32位,4個位元組;

type佔32位,4個位元組;

major_brand佔32位,4個位元組;

minor_version佔32位,4個位元組;

compatible_brands 每個brand佔32位,4個位元組;



2、Free Space Box 

 aligned(8) class FreeSpaceBox extends Box('free') { 
    unsigned int(8) data[];} 

計算一下Free Space Box的大小:

size佔32位,4個位元組;

type佔32位,4個位元組;

每個 data 佔8位,1個位元組;

3、Media Data Box


aligned(8) class MediaDataBox extends Box(‘mdat’) { 

bit(8) data[];

}

計算一下Media Data Box的大小:

size佔32位,4個位元組;

type佔32位,4個位元組;

每個 data 佔8位,1個位元組;

4、Movie Box 

aligned(8) class MovieBox extends Box(‘moov’){


計算一下Movie Box 的大小:

size佔32位,4個位元組;

type佔32位,4個位元組;


5、uuid
以上分析了通過一個mp4檔案,分析了mp4檔案格式頂級box的大小 size 、類型 type 以及相鄰box的定位。


下面說一下,uuid.根據基本對象 Box 的定義,如果

boxtype==‘uuid’
那麼在type後面要包含 16個位元組的 擴充類型。擴充類型之後才是資料。


關於頂級box內部的子box的情況還沒有做出說明,在下一篇文章會繼續。
<EOF>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.