3gp文件格式研究 (轉windcao的專欄)

序言

06我開始做3gp文件的播放器,但是關于3gp的文檔太少了也很難找,在網友luxh的幫助下,
我終于有了第一份關于3gp文件格式的文檔《ISO/IEC 14496-12,ISO媒體文件格式》.
在此真心感謝luxh的貢獻.
當然了是英文版的,有文檔就不錯了.為了便于查閱和理解,我把之后陸續找到的其他幾個文檔也揉在了一起.
從06年5月12日到現在2007-3-23,一點點的擠時間,總算寫完了.如有錯誤,敬請斧正.
之所以寫這篇文章目的只有一個,希望大家都能夠少走彎路.
有用的到的人可以隨意復制,轉貼.
因為以后我有可能會對本文修改更新,所以請保留文中的原始鏈接.
愿意同我一道研究的人請加msn:windcao@hotmail.com

需要看的文檔
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/162659?3gpp文件結構查看器
目前最新版本是0.1.2

正文:
首先來說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

3gp file frame

mdat box 存放了音頻視頻和其他的數據,一般的文件至少有2個mdatbox, 一個用于音頻,一個用于視頻,通常還會有一些文本信息也放在mdatbox中,各種信息的順序不固定。 如果只是存放音樂一個mdat就夠用了。

你可能會問這么多box 都叫mdat我怎么知道音頻放哪里視頻放哪里呢?別著急這些相關信息都放在moovbox里面

影片包:(moov box:Movie Box:)是一個3gp文件中最復雜最重要的文件。
moov box

看到這里你可能會問"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是啥???????? 知道啥是pdu的朋友請告訴我.
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

sample_e

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.

附錄:

ISO 639-2 CodeISO 639-1 CodeEnglish name of Language
aaraaAfar
abkabAbkhazian
ace?Achinese
ach?Acoli
ada?Adangme
ady?Adyghe; Adygei
afa?Afro-Asiatic (Other)
afh?Afrihili
afrafAfrikaans
ain?Ainu
akaakAkan
akk?Akkadian
alb/sqisqAlbanian
ale?Aleut
alg?Algonquian languages
alt?Southern Altai
amhamAmharic
ang?English, Old (ca.450-1100)
anp?Angika
apa?Apache languages
araarArabic
arc?Aramaic
arganAragonese
arm/hyehyArmenian
arn?Araucanian
arp?Arapaho
art?Artificial (Other)
arw?Arawak
asmasAssamese
ast?Asturian; Bable
ath?Athapascan languages
aus?Australian languages
avaavAvaric
aveaeAvestan
awa?Awadhi
aymayAymara
azeazAzerbaijani
bad?Banda
bai?Bamileke languages
bakbaBashkir
bal?Baluchi
bambmBambara
ban?Balinese
baq/euseuBasque
bas?Basa
bat?Baltic (Other)
bej?Beja
belbeBelarusian
bem?Bemba
benbnBengali
ber?Berber (Other)
bho?Bhojpuri
bihbh
bik?Bikol
bin?Bini
bisbiBislama
bla?Siksika
bnt?Bantu (Other)
tib/bodboTibetan
bosbsBosnian
bra?Braj
brebrBreton
btk?Batak (Indonesia)
bua?Buriat
bug?Buginese
bulbgBulgarian
bur/myamyBurmese
byn?Blin; Bilin
cad?Caddo
cai?Central American Indian (Other)
car?Carib
catcaCatalan; Valencian
cau?Caucasian (Other)
ceb?Cebuano
cel?Celtic (Other)
cze/cescsCzech
chachChamorro
chb?Chibcha
checeChechen
chg?Chagatai
chi/zhozhChinese
chk?Chuukese
chm?Mari
chn?Chinook jargon
cho?Choctaw
chp?Chipewyan
chr?Cherokee
chucuChurch Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
chvcvChuvash
chy?Cheyenne
cmc?Chamic languages
cop?Coptic
corkwCornish
coscoCorsican
cpe?Creoles and pidgins, English based (Other)
cpf?Creoles and pidgins, French-based (Other)
cpp?Creoles and pidgins, Portuguese-based (Other)
crecrCree
crh?Crimean Tatar; Crimean Turkish
crp?Creoles and pidgins (Other)
csb?Kashubian
cus?Cushitic (Other)
wel/cymcyWelsh
cze/cescsCzech
dak?Dakota
dandaDanish
dar?Dargwa
day?Dayak
del?Delaware
den?Slave (Athapascan)
ger/deudeGerman
dgr?Dogrib
din?Dinka
divdvDivehi; Dhivehi; Maldivian
doi?Dogri
dra?Dravidian (Other)
dsb?Lower Sorbian
dua?Duala
dum?Dutch, Middle (ca.1050-1350)
dut/nldnlDutch; Flemish
dyu?Dyula
dzodzDzongkha
efi?Efik
egy?Egyptian (Ancient)
eka?Ekajuk
gre/ellelGreek, Modern (1453-)
elx?Elamite
engenEnglish
enm?English, Middle (1100-1500)
epoeoEsperanto
estetEstonian
baq/euseuBasque
ewe

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455329.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android開發必用工具及其進階途徑

三百六十行,行行出狀元,怎么樣才能在Android行業中當個狀元了,開發過程中的高效、自我能力的提升顯得至關重要,步入IT行業更是要時時刻刻學習,新技術更新快,今天將介紹一下Android開發中必用工具及其進階途…

MySQL遇到check the manual that corresponds to your MySQL server version for the right syntax錯誤

原來是MySQL表中不能包含關鍵字 轉載于:https://www.cnblogs.com/flycoding/p/7088465.html

Python腳本實現圖片加水印

起步 圖片是指由圖形、圖像等構成的平面媒體,有形式的事物,我們看到的,是圖畫、照片、拓片等的統稱。 為了保護一些原創圖片的版權,某些時候我們需要在圖片上面,加上水印,當然你可以用Photoshop來做,只不過如果圖片數量過多,亦或者圖片的動態生成的時候…

yarn 怎么查看有多個job在跑_flink on yarn 模式下提示yarn資源不足問題分析

背景在實時計算平臺上通過YarnClient向yarn上提交flink任務時一直卡在那里,并在client端一直輸出如下日志:(YarnClusterDescriptor.java:1036)- Deployment took more than 60 seconds. Please check if the requested resources are available in the Y…

MPEG-2TS碼流編輯的原理及其應用(轉載

[作者:遼寧電視臺 趙季偉] 在當今數字媒體不斷發展、新媒體業務不斷涌現 的前提下,實踐證明襁褓中的新媒體只有兩種經營方略可供選擇:或是購買并集成整套節目,或是低成本深加工新節目,再不可能去按照傳統生產模式…

Python中的yield詳解

閱讀別人的python源碼時碰到了這個yield這個關鍵字,各種搜索終于搞懂了,在此做一下總結: 通常的for…in…循環中,in后面是一個數組,這個數組就是一個可迭代對象,類似的還有鏈表,字符串&#xf…

shell循環結構之while循環

while循環 1) while CONDITION; dostatementstatement<改變循環條件真假的語句>done 編寫腳本&#xff0c;計算1---100的和 #!/bin/bash#sum0i1while [ $i -le 100 ]; dolet sum$sum$ilet i$i1doneecho $sum2) while true; do statementstatementdone #!/bin/bash#while …

python 管道隊列_關于python:Multiprocessing-管道與隊列

Python的多處理程序包中的隊列和管道之間的根本區別是什么&#xff1f;在什么情況下應該選擇一種&#xff1f; 什么時候使用Pipe()有優勢&#xff1f; 什么時候使用Queue()有優勢&#xff1f;Pipe()只能有兩個端點。Queue()可以有多個生產者和消費者。何時使用它們如果需要兩個…

pip默認使用國內鏡像地址

很多小伙伴在ubuntu系統下,使用pip安裝會很慢 以為安裝源在國外服務器上面 今天小編就教大家配置成讓pip默認從國內源中尋找安裝包 首先CtrlAltT打開終端 進入家目錄 cd ~在家目錄中創建一個文件夾,命名為.pip mkdir .pip進入目錄,并創建一個名為pip.conf的文件 cd .pip…

“大型票務系統”和“實物電商系統”的數據庫選型

討論請移步至&#xff1a;http://www.zhiliaotech.com/ideajam/idea/detail/423 相關文章&#xff1a; 《今天你買到票了嗎&#xff1f;——從鐵道部12306.cn站點漫談電子商務站點的“海量事務快速處理”系統》 不能簡單套用“實物電商系統”對“大型票務系統”做需求分析 “大…

FLV文件格式(Z)(轉載)

剛才在看一些關于demux的東西&#xff0c;在處理flv格式的文件的時候&#xff0c;由于自己對flv文件的格式不了解&#xff0c;所以就比較云頭轉向&#xff0c;正好看到了一篇講述flv文件格式的文章&#xff0c;寫的比較明白&#xff0c;所以就轉過來了。O(∩_∩)O~flv頭文件比較…

mysql-5.7中的innodb_buffer_pool_prefetching(read-ahead)詳解

一、innodb的read-ahead是什么&#xff1a; 所謂的read-ahead就是innodb根據你現在訪問的數據&#xff0c;推測出你接下來可能要訪問的數據&#xff0c;并把它們(可能要訪問的數據)讀入 內存。 二、read-ahead是怎么做到的&#xff1a; 1、總的來說read-ahead利用的是程序的局部…

python compare excel_python簡單操作excle的方法

Python操作Excle文件&#xff1a;使用xlwt庫將數據寫入Excel表格&#xff0c;使用xlrd 庫從Excel讀取數據。從excle讀取數據存入數據庫1、導入模塊&#xff1a;import xlrd2、打開excle文件&#xff1a;data xlrd.open_workbook(excel.xls)3、獲取表、行/列值、行/列數、單元值…

collections系列

class Counter(dict):  Counter類繼承dict類、繼承了dict的所有功能計數器&#xff1a; 例&#xff1a;import collections obj collections.Counter(sdkasdioasdjoasjdoasd) print(obj)得&#xff1a;Counter({s: 5, d: 5, a: 4, o: 3, j: 2, k: 1, i: 1}) 拿到前幾位&…

Python中的虛擬環境-virtualenv

更低層次: virtualenv virtualenv 是一個創建隔絕的Python環境的 工具。virtualenv創建一個包含所有必要的可執行文件的文件夾&#xff0c;用來使用Python工程所需的包。 它可以獨立使用&#xff0c;代替Pipenv。 通過pip安裝virtualenv&#xff1a; $ pip install virtual…

mp4文件格式解析(一)

原文地址&#xff1a;mp4文件格式解析&#xff08;一&#xff09;作者&#xff1a;可下人間目前MP4的概念被炒得很火&#xff0c;也很亂。最開始MP4指的是音頻&#xff08;MP3的升級版&#xff09;&#xff0c;即MPEG-2 AAC標準。隨后MP4概念被轉移到視頻上&#xff0c;對應的是…

shiro身份驗證測試

2019獨角獸企業重金招聘Python工程師標準>>> 一、登錄驗證 1、首先在shiro.ini里準備一些用戶身份/憑據&#xff0c;后面這里會使用數據庫代替&#xff0c;如&#xff1a; [users] [main] #realm jdbcRealmcom.learnging.system.shiro.ShiroRealm securityManager…

shell if多個條件判斷_萌新關于Excel VBA中IF條件判斷語句的一點心得體會

作者:金人瑞 《Excel VBA175例無理論純實戰教程》學員最近正在學習鄭廣學老師的VBA 175例教程&#xff0c;這是一篇新手向的文章&#xff0c;也是一個新手的總結&#xff0c;高手可以批評文章中的不足之處&#xff0c;也可以無視&#xff0c;VBA中的IF判斷, 判斷一般起到控制作…

Django筆記01-基礎:一個完美主義的web框架

淺談Web框架 一,什么是框架? 軟件框架就是為實現或完成某種軟件開發時,提供了一些基礎的軟件產品, 框架的功能類似于基礎設施,提供并實現最為基礎的軟件架構和體系 通常情況下我們依據框架來實現更為復雜的業務程序開發 一個字,框架就是程序的骨架 二,框架的優缺點 可重…

mysql存儲引擎的一點學習心得總結

首先我們應該了解mysql中的一個重要特性——插件式存儲引擎&#xff0c;從名字就能夠看出在mysql中&#xff0c;用戶能夠依據自己的需求隨意的選擇存儲引擎。實際上也是這樣。即使在同一個數據庫中。不同的表也能夠使用不同的存儲引擎。Mysql中支持的存儲引擎有非常多種&#x…