天天看點

【轉】3gp檔案格式研究

需要看的文檔

http://www.3gpp.org/ftp/Specs/archive/26_series/

3GPP TS 26.233

3GPP TS 26.243

3GPP TS 26.244

luxh找到的一個好東西

http://isotc.iso.org/livelink/livelink/fetch/2000/2489/Ittf_Home/PubliclyAvailableStandards.htm

大家一定要仔細找找啊,寶藏!

我們研究3gpp檔案最重要的兩個文檔就是《ISO/IEC 14496-12,ISO媒體檔案格式》和《3GPP TS 26.244-700》 

ISO/IEC 14496的組成如下:(引自:http://www.blogcn.com/user73/lipingfu/index.html)

(1)ISO/IEC 14496-1,系統部分,描述了組成一個場景的音頻和視訊成分之間的關系。

(2、3)ISO/IEC 14496-2,視訊部分和ISO/IEC 14496-3音頻部分,分别規定自然的和合成的視訊對象、音頻對象的編碼表示。

(4)ISO/IEC 14496-4,一緻性測試部分,定義了比特流和裝置的一緻性條件,用來測試MPEG-4的實作。

(5)ISO/IEC 14496-5,參考軟體,包括與MPEG-4的主要部分相對應的軟體。

(6)ISO/IEC 14496-6,多媒體傳送整體架構DMIF,這是MPEG-4應用層與傳輸網絡的接口,定義了通信協定,使MPEG-4系統的資料流能進入各種傳輸網絡。還包含一個存儲格式MP4,用于存儲編碼的場景。

(7) ISO/IEC 14496-7,為MPEG-4工具優化軟體,提供了對實作進行優化的例子(這裡的實作指的是第五部分)。

(8)ISO/IEC 14496-8,定義了在IP網絡上傳輸MPEG-4内容的方式。

(9)ISO/IEC 14496-9,為參考硬體描述,提供了用于示範怎樣在硬體上實作本标準其他部分功能的硬體設計方案。

(10)ISO/IEC 14496-10,進階視訊編碼AVC,定義了一個被稱為AVC的視訊編解碼器。

(11)ISO/IEC 14496-11,場景描述和應用引擎。

(12)ISO/IEC 14496-12,ISO媒體檔案格式,定義了一個存儲媒體内容的檔案格式。

(13)ISO/IEC 14496-13,知識産權管理和保護(IPMP)擴充。

(14)ISO/IEC 14496-14,MP4檔案格式,定義了基于第十二部分的用于存儲MPEG-4内容的容器檔案格式。

(15)ISO/IEC 14496-15,AVC檔案格式,定義了基于第十二部分的用于存儲第十部分的視訊内容的檔案格式。

(16)ISO/IEC 14496-16,動畫架構擴充AFX(Animation Framework eXtension)。

(17)ISO/IEC 14496-17,同步文本字幕格式(尚未完成,2005年1月達成"最終委員會草案"。

(18)ISO/IEC 14496-18,字型壓縮和流式傳輸(針對公開字型格式)。

(19)ISO/IEC 14496-19,綜合材質流(Synthesized Texture Stream)。

(20)ISO/IEC 14496-20,簡單場景表示(尚未完成,2005年1月達成"最終委員會草案"。

(21)ISO/IEC 14496-21,用于描繪(Rendering)的MPEG-J拓展(尚未完成,2005年1月達成"委員會草案"

我做的一個輔助工具:http://download.csdn.net/source/162821 3gpp檔案結構檢視器

目前最新版本是0.1.3

這個工具的源碼:http://download.csdn.net/source/162682

正文:

首先來說3gp檔案相當于一個容器,本身沒有什麼具體的編碼解碼規則。

我們可以選擇編碼方式 

- AMR narrow-band:編碼簡稱'samr' 常用與語言片段的壓縮,可以對聲音片段進行最大程度的壓縮,但是失真較大,如果用在音樂檔案上結構常常是無法忍受的。 

(詳情請參考:3GPP TS 26.071: "Mandatory Speech CODEC speech processing functions; AMR Speech CODEC; General description".) 

- AMR wideband:編碼簡稱'sawb' 相對AMR narrow-band來說壓縮比降低了,品質有所提升可用來壓縮音樂。 

(詳情請參考:3GPP TS 26.171: "AMR Wideband Speech Codec; General Description".) 

- Extended AMR-WB codec編碼簡稱 'sawp' 

(詳情請參考:

3GPP TS 26.290: "Extended AMR Wideband codec; Transcoding functions".

3GPP TS 26.304: "ANSI-C code for the Floating-point; Extended AMR Wideband codec".

3GPP TS 26.273: "ANSI-C code for the Fixed-point; Extended AMR Wideband codec".

- Enhanced aacPlus and MPEG-4 AAC codec編碼簡稱 'mp4a' 

(詳情請參考:

3GPP TS 26.401: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; General description".

3GPP TS 26.410: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; Floating-point ANSI-C code".

3GPP TS 26.411: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; Fixed-point ANSI-C code".

- MPEG-4 video codec編碼簡稱'mp4v' 

(詳情請參考:ISO/IEC 14496-2:2004: "Information technology – Coding of audio-visual objects – Part 2: Visual".) 

- H.263 video codec編碼簡稱'h263' 

(詳情請參考:ITU-T Recommendation H.263 (01/05): "Video coding for low bit rate communication".)

- H.264 video codec編碼簡稱'avc1' 

(詳情請參考:ITU-T Recommendation H.264 (03/05): "Advanced video coding for generic audiovisual services"

ISO/IEC 14496-10:2005: "Information technology – Coding of audio-visual objects – Part 10: Advanced Video Coding".)

- 3GPP timed text format 編碼簡稱'tx3g' 

(詳情請參考:3GPP TS 26.245: "Transparent end-to-end packet switched streaming service (PSS); Timed text format".)

其中手機最普遍支援的格式是 amr(音頻) +h263(視訊) 

 3gp檔案基于mpeg4由若幹個box組成

 一個3gp檔案由若幹個box組成常見的有:

檔案類型包:(FileTypeBox,簡稱代碼'ftyp')

ftyp:檔案類型包相當于檔案頭,說明了檔案所使用的協定版本,編碼格式等資訊

+[4]-+[4]-+[4]-+[4]-+[4]-+

|size|ftyp|mjbr|mivs|cpbr|

+----+----+----+----+----+

mjbr:major_brand 版本分支

mivs:minor_version 版本号 

cpbr:compatible_brands 相容分支 

媒體資料包:(Media Data Box,簡稱代碼'mdat')

"Media Data Box 

Box類型: ‘mdat’ 

容器: 檔案 

是否必須: 否 

數量: 任意個. "-luxh

mdat box 存放了音頻視訊和其他的資料,一般的檔案至少有2個mdatbox, 一個用于音頻,一個用于視訊, 通常還會有一些文本資訊也放在mdatbox中,各種資訊的順序不固定。 如果隻是存放音樂一個mdat就夠用了。

你可能會問這麼多box 都叫mdat我怎麼知道音頻放哪裡視訊放哪裡呢?别着急這些相關資訊都放在moovbox裡面 

影片包:(moov box:Movie Box:)是一個3gp檔案中最複雜最重要的檔案。

看到這裡你可能會問"moovbox裡面的方框都分别代表什麼含義呀?媒體描述資訊是怎麼存放的?",别着急咱們來慢慢分析一下。

"Movie Box 

Box類型: 'moov'; 

容器: 檔案 

是否必須: 是 

數量: 一個,并且隻能是一個. 

媒體的原始資料被放置在這個box中,這個box位于檔案的最進階别,一般來說這個box接近于檔案的開始或者末尾,盡管這并不被要求。文法如下: 

a ligned(8) class MovieBox extends Box(‘moov’) {} "-luxh

moovbox 有兩個必要的子box他們是影片頭包和軌迹包

影片頭包movie header,簡稱代碼'mvhd' 

首先剖析一下影片頭包,順便以此為例了解一下包的結構。

每一個包開頭的4個位元組都是一個整數存放了本包的長度。

接下來的4個位元組是個字元串存放了本包的類型。如'moov','mvhd'。

基本上包都是這模樣的:

+[4]-+[4]-+[size-8]-------------------+

|size|type|data                       |

+----+----+---------------------------+ 

很多box是這樣的我們可以稱之為全包(full box)(這裡有塊石頭,大家小心了,不要把全包當成普通包來讀,由于我提醒的不及時,網友陳秋松又在這裡摔了一跤,抱歉)

+[4]-+[4]-+-+---+[size-8]-------------------+

|size|type|v|flg|data                       |

+----+----+-+---+---------------------------+

簡記為

+[4]-+[4]-+[4]-+[size-8]-------------------+

|size|type|vsfl|data                       |

+----+----+----+---------------------------+

其中vsfl:版本号标志 

+-+---+

|v|flg|

+-+---+

v :version

flg:flages 

在影片頭包中接下來的是版本标志等資訊。

MVHD 是媒體資訊頭,存放媒體的全局性的資訊。

+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[76]----...---------+[4]-+

|size|mvhd|vsfl|cttm|mdtm|tmsc|mxtl|reserved...         |ntid|

+----+----+----+----+----+----+----+--------...---------+----+

size:box長度

type:檔案類型辨別内容為"mvhd"

vsfl:版本号标志

cttm:creat time 檔案建立時間

mdtm:modification time  檔案修改時間

tmsc:timescale 時間縮放因數

mxtl:maxTrackLen duration of longest track 最長播放時間

reserved: 保留字段

ntid-next trak id  下一個頻道辨別

軌迹包TRAK 也是一個容器,是單個媒體流頻道的資訊的容器,它有兩個必要的子box:TKHD,MDIA。

TKHD 存放本trak的資訊,有兩個版本

v=0

+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+

|size|tkhd|vsfl|cttm|mdtm|tkid|resv|duat|

+----+----+----+----+----+----+----+----+

+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+

|reserved    |ct|rs|reserved    |twvo|thvo|

+------------+--+--+--------...-+----+----+

v=1

+[4]-+[4]-+[4]-+[8]-----+[8]-----+[4]-+[4]-+[8]-----+

|size|tkhd|vsfl|cttm    |mdtm    |tkid|resv|duat    |

+----+----+----+--------+--------+----+----+--------+

+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+

|reserved    |ct|rs|reserved    |twvo|thvo|

+------------+--+--+--------...-+----+----+

size:box長度

type:檔案類型辨別内容為"tkhd"

vsfl:版本号标志

cttm:creat time 檔案建立時間

mdtm:modification time  檔案修改時間

tkid:track-id 同一個檔案中這是一個不重複的序列

resv:reserved 保留字段

duat:duration 總的播放時間長度

reserved: 保留字段

ct:codec_type {audio=0x0100; video=0} 編碼類型,到底是音頻還是視訊等

rs:reserved 保留字段

reserved: 保留字段

如果這個track 是視訊編碼它将有如下字段,在你解碼的時候非常有用.

twvo:Track width , for visual only 視訊的寬度

thvo:Track height, for visual only 視訊的高度

MDIA是存放具體的媒體資訊的容器。

有且僅有3個子box:{MDHD,HDLR,MINF}

MDHD媒體頭,也有兩個版本

 v=0

+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+

|size|type|cttm|mdtm|tmsk|duat|

+----+----+----+----+----+----+

v=1

+[4]-+[4]-+[8]-----+[8]-----+[4]-+[8]-----+

|size|type|cttm    |mdtm    |tmsk|duat    |

+----+----+--------+--------+----+--------+

其中

size:box長度

type:檔案類型辨別内容為"mdhd"

pl:pad&language{bit(1) pad = 0;unsigned int(5)[3] language // ISO-639-2/T language code參見附錄}

*-*[15]-----------*

|p|language       |

*-*---------------*

pd:unsigned int(16) pre_defined = 0;

HDLR 句柄,描述媒體類型

+[4]-+[4]-+[4]-+[12]--------+[size-24]--+

|size|pred|hdlt|reserved    |name       |

+----+----+----+------------+-----------+

size:box長度

type:檔案類型辨別内容為"tkhd" 

pred:pre_defined = 0;

hdlt:handler_type;

 ‘vide’ Video track 視訊

 ‘soun’ Audio track 音頻

 ‘hint’ Hint track 注釋

reserved: reserved = 0;

name: 名稱字元串,0結尾的UTF-8串 

MINF 媒體資訊容器(Media Information Box)

這是一個普通的box容器.它的内部可能包含如下的子box:

VMHD,SMHD,HMHD,NMHD,DINF,STBL.

VMHD,SMHD,HMHD分别對應于視訊,音頻,注視,NMHD我還不太清楚.它們都屬于fullbox.

DINF資料資訊和STBL采樣表,都是普通的box. VMHD還包括兩個資料字段.

+[4]-+[4]-+[4]-+[4]-+

|gmod|opcl          |

+----+----+----+----+

gmod:graphicsmode 描述了本視訊track 與其他視訊track的混合方式.預設的值為0,也就是直接覆寫.

opcl:opcolor 透明色顔色值 (red, green, blue)如果gmod不是copy的話會用到.

SMHD包括兩個字段 

+--+--+

|bl|rs|

+--+--+

bl:balance 是一個定點小數(精度 8.8) 前8bits是整數,後8bits是小數.如果值為0說明左右聲道是相同的.全左的情況下值為-1.0 全右則為1.0.

rs:reserved 保留字段.

HMHD包括5個字段.如下:

+--+--+[4]-+[4]-+[4]-+

|mp|ap|mbrt|abrt|resv|

+--+--+----+----+----+

mp:maxPDUsize 最大PDU長度 -pdu RTP包的大小

ap:avgPDUsize 平均PDU長度 

mbrt:maxbitrate 最大比特率 

abrt:avgbitrate 平均比特率 

resv:reserved 保留字段 

NMHD是個空的fullbox 

DINF是一個普通的box,也是一個容器,它包括url,urn,dref三個fullbox

url 内部是一個UTF-8編碼的0結尾的字元串

string location;

url裡面則是兩個

string name;

string location;

這兩個都被稱為DataEntryBox.

dref裡面是一個url或者urn的清單.首先它有一個字段

unsigned int(32) entry_count;DataEntryBox的清單的個數.

然後就是DataEntryBox的清單

STBL是一個普通的box,也是一個容器,裡面包含了很多媒體采樣資訊.

STTS是一個fullbox裡面包含了采樣的時間長度資訊

内部的資料首先是清單長度

unsigned int(32) entry_count;

然後就是采用時長清單.

清單每一項都由兩個字段組成.

unsigned int(32) sample_count;采樣個數

unsigned int(32) sample_delta;每個采樣的時間長度.

在認識stsd之前我們首先要了解一個資料結構SampleEntry和它的子類AudioSampleEntry,VisualSampleEntry和HintSampleEntry

SampleEntry 是一個繼成box的抽象的資料結構模型.

除了size,type外它包括兩個字段,如下:

+[4]-+[4]-+[6]---+--+

|size|type|resved|di|

+----+----+------+--+

resved:reserved,保留字段

di:data_reference_index,序号.

從這個抽象資料結構繼承下來的三個子類分别增加了幾個獨特的新字段.

HintSampleEntry

+[4]-+[4]-+[6]---+--+[n]-+

|size|type|resved|di|data|

+----+----+------+--+----+

resved:reserved,保留字段

di:data_reference_index,序号.

data:是一個0結尾的utf8編碼的字元串.

VisualSampleEntry

+[4]-+[4]-+[6]---+--+--+--+[12]---------+--+--+[4]-+[4]-+[4]-+--+[32]----...---+--+--+

|size|type|resved|di|pd|rs|pre_defined |wd|ht|hrsl|vrsl|resv|fc|compressorname|dp|pd|

+----+----+------+--+--+--+-------------+--+--+----+----+----+--+--------...---+--+--+

size:box長度

type:box:類型

resved:reserved,保留字段

di:data_reference_index,序号.

pd: pre_defined 保留字段

rs: reserved 保留字段

pd: pre_defined 保留字段

wd: width 視訊的寬

ht: height 視訊的高

hrsl: horizresolution 水準分辨率如0x00480000; // 72 dpi

vtsl: vertresolution 垂直分辨率如0x00480000; // 72 dpi

rd: reserved 保留字段

fc: frame_count 每個采樣裡面的貞數,一般是1;

cmpn: compressorname 是一個數字開頭的字元串.并且末尾有填料.對齊到32位.

  +-+[n]-+[x]-+

  |n|data|xpad|

  +-+----+----+

n:number of data.資料的長度,x+n+1=32

dp: depth 視訊的色深 0x18 表示24位色

pd: pre_defined 保留字段

AudioSampleEntry

+[4]-+[4]-+[6]---+--+[8]-----+--+--+--+--+[4]-+

|size|type|resved|di|reserved|cc|ss|pd|rs|sprt|

+----+----+------+--+--------+--+--+--+--+----+

resved:reserved,保留字段

di:data_reference_index,序号.

reserved:保留字段

cc: channelcount 聲道數1或者2;

ss: samplesize 采樣位數大小 8bit 8 ;16bit 16;

pd: pre_defined 保留字段

rs: reserved保留字段

sprt:samplerate 采樣率

stsd是一個采樣包(SampleEntry)的清單,一般來講同一個清單中隻有一種SampleEntry.

可以通過hdlr裡面的handler_type來判斷屬于哪種SampleEntry.

内部的資料首先是清單長度,一個32位無符号整數 entry_count;

然後就是采樣包清單.

采樣包有很多具體的實作.如下: 

+MP4VisualSampleEntry:MP4視訊采樣包. 

+[4]-+[4]-+[6]---+--+--+--+[12]---------+--+--+[4]-+[4]-+[4]-+--+[32]----...---+--+--+[n]-+

|size|type|resved|di|pd|rs|pre_defined |wd|ht|hrsl|vrsl|resv|fc|compressorname|dp|pd|esds|

+----+----+------+--+--+--+-------------+--+--+----+----+----+--+--------...---+--+--+----+

size:box長度

type:box類型,内容'mp4v'

resved:reserved,保留字段

di:data_reference_index,序号.

pd: pre_defined 保留字段

rs: reserved 保留字段

pd: pre_defined 保留字段

wd: width 視訊的寬

ht: height 視訊的高

hrsl: horizresolution 水準分辨率如0x00480000; // 72 dpi

vtsl: vertresolution 垂直分辨率如0x00480000; // 72 dpi

rd: reserved 保留字段

fc: frame_count 每個采樣裡面的貞數,一般是1;

compressorname: 是一個數字開頭的字元串.并且末尾有填料.對齊到32位.

dp: depth 視訊的色深 0x18 表示24位色

pd: pre_defined 保留字段

+esds:原子資料流描述包(Elementary Stream Data Box). 

ES_ID — set to 0 as stored; when built into a stream, the lower 16 bits of the TrackID are used.

streamDependenceFlag — set to 0 as stored; if a dependency exists, it is indicated using a track reference of type ‘dpnd’.

URLflag — kept untouched, i.e. set to false, as the stream is in the file, not remote.

SLConfigDescriptor — is predefined type 2.

OCRStreamFlag — set to false in the file. 

+MP4AudioSampleEntry:Entry type for audio samples defined in the MP4 specification. 

+[4]-+[4]-+[6]---+--+[8]-----+--+--+--+--+[4]-+[n]-+

|size|type|resved|di|reserved|cc|ss|pd|rs|sprt|esds|

+----+----+------+--+--------+--+--+--+--+----+----+

resved:reserved,保留字段

di:data_reference_index,序号.

reserved:保留字段

cc: channelcount 聲道數1或者2;

ss: samplesize 采樣位數大小 8bit 8 ;16bit 16;

pd: pre_defined 保留字段

rs: reserved保留字段

sprt:samplerate 采樣率

+esds:Elementary Stream Data Box.Box containing an elementary stream descriptor for this stream. 

ES_ID — set to 0 as stored; when built into a sntream, the lower 16 bits of the TrackID are used.

streamDependenceFlag — set to 0 as stored; if a dependency exists, it is indicated using a track reference of type ‘dpnd’.

URLflag — kept untouched, i.e. set to false, as the stream is in the file, not remote.

SLConfigDescriptor — is predefined type 2.

OCRStreamFlag — set to false in the file. 

+AMRSampleEntry:Entry type for AMR and AMR-WB speech samples defined in clause 6.5 of the present document. 

+[4]-+[4]-+[6]---+--+[8]-----+--+--+--+--+[4]-+[n]-+

|size|type|resved|di|reserved|cc|ss|pd|rs|sprt|damr|

+----+----+------+--+--------+--+--+--+--+----+----+

type:'samr' resved:reserved,保留字段

di:data_reference_index,序号.

reserved:保留字段

cc: channelcount 聲道數1或者2;

ss: samplesize 采樣位數大小 8bit 8 ;16bit 16;

pd: pre_defined 保留字段

rs: reserved保留字段

sprt:samplerate 采樣率

+damr:AMRSpecificBox 

+[4]-+[4]-+[4]-+-+--+-+-+

|size|type|vend|d|ms|m|f|

+----+----+----+-+--+-+-+

type:'damr' vend:vendor

d:decoder_version

ms:mode_set

m:mode_change_period

f:frames_per_sample

+AMRWPSampleEntry:Entry type for AMR and AMR-WB speech samples defined in clause 6.5 of the present document. 

+[4]-+[4]-+[6]---+--+[8]-----+--+--+--+--+[4]-+[n]-+

|size|type|resved|di|reserved|cc|ss|pd|rs|sprt|dawp|

+----+----+------+--+--------+--+--+--+--+----+----+

type:'sawb' resved:reserved,保留字段

di:data_reference_index,序号.

reserved:保留字段

cc: channelcount 聲道數1或者2;

ss: samplesize 采樣位數大小 8bit 8 ;16bit 16;

pd: pre_defined 保留字段

rs: reserved保留字段

sprt:samplerate 采樣率

+dawp:AMRWPDecSpecStruc 

The AMRWPDecSpecStruc is defined as follows: +[4]-+[4]-+[4]-+-+

|size|type|vend|d|

+----+----+----+-+

type:'dawp'

vend:vendor

d:decoder_version

+H263SampleEntry:Entry type for H.263 visual samples defined in clause 6.6 of the present document. 

+[4]-+[4]-+[6]---+--+--+--+[12]---------+--+--+[4]-+[4]-+[4]-+--+[32]----...---+--+--+[n]-+

|size|type|resved|di|pd|rs|pre_defined |wd|ht|hrsl|vrsl|resv|fc|compressorname|dp|pd|d263|

+----+----+------+--+--+--+-------------+--+--+----+----+----+--+--------...---+--+--+----+

size:box長度

type:box類型,内容's263'

resved:reserved,保留字段

di:data_reference_index,序号.

pd: pre_defined 保留字段

rs: reserved 保留字段

pd: pre_defined 保留字段

wd: width 視訊的寬

ht: height 視訊的高

hrsl: horizresolution 水準分辨率如0x00480000; // 72 dpi

vtsl: vertresolution 垂直分辨率如0x00480000; // 72 dpi

resv: reserved 保留字段

fc: frame_count 每個采樣裡面的貞數,一般是1;

compressorname: 是一個數字開頭的字元串.并且末尾有填料.對齊到32位.

dp: depth 視訊的色深 0x18 表示24位色

pd: pre_defined 保留字段

+d263:H263SpecificBox Information specific to the H.263 decoder. 

+[4]-+[4]-+[n]-------------+[m]-------+

|size|type|H263DecSpecStruc|BitrateBox|

+----+----+----------------+----------+

type:内容'd263'

+H263DecSpecStruc: H.263 資訊包

H263DecSpecStruc 注意這不是一個包而是個結構.

+[4]-+-+-+-+

|vend|d|l|p|

+----+-+-+-+

vend:vendor 銷售商,4位的字元串例如 'VXYZ'

d:decoder_version解碼器版本

l:H263_Level h263版本

p:H263_Profile h263特性

l和p這兩個定義是基于MIME media type video/H263-2000标準的

The profile and level specifications can be found in [9].

請參考ITU-T Recommendation H.263 (1998): "Video coding for low bit rate communication".

例 1: H.263 基本 = {H263_Level = 10, H263_Profile = 0}

例 2: H.263 Profile 3 @ Level 10 = {H263_Level = 10 , H263_Profile = 3}

注意:hint軌迹也可能引用這個結構中的資訊. 

+BitrateBox:比特率資訊包(可選的) 

+[4]-+[4]-+[4]-+[4]-+

|size|type|avbr|mabr|

+----+----+----+----+

type:‘bitr’

avbr: Avg_Bitrate 平均比特率

mabr: Max_Bitrate 平均比特率

+AVCSampleEntry:Entry type for H.264 (AVC) visual samples defined in the AVC file format specification. 

請參考ISO/IEC 14496-15: 2004: "Information technology – Coding of audio-visual objects – 

Part 15: Advanced Video Coding (AVC) file format". 

+TextSampleEntry:Entry type for timed text samples defined in the timed text specification 

ISO/IEC 14496-17,同步文本字幕格式 歌詞可以放在這個裡面. 

+HintSampleEntry:Entry type for hint track samples defined in the ISO specification. 

注釋資訊 

本文章最初發表于csdn:http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx 

本文來自CSDN部落格,轉載自:http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx

繼續閱讀