原文地址:http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx

序言

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/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

最后更新日期2007-3-23 11:13

附录:
ISO-639-2/T language code

ISO 639-2 Code ISO 639-1 Code English name of Language aar aa Afar abk ab Abkhazian ace   Achinese ach   Acoli ada   Adangme ady   Adyghe; Adygei afa   Afro-Asiatic (Other) afh   Afrihili afr af Afrikaans ain   Ainu aka ak Akan akk   Akkadian alb/sqi sq Albanian ale   Aleut alg   Algonquian languages alt   Southern Altai amh am Amharic ang   English, Old (ca.450-1100) anp   Angika apa   Apache languages ara ar Arabic arc   Aramaic arg an Aragonese arm/hye hy Armenian arn   Araucanian arp   Arapaho art   Artificial (Other) arw   Arawak asm as Assamese ast   Asturian; Bable ath   Athapascan languages aus   Australian languages ava av Avaric ave ae Avestan awa   Awadhi aym ay Aymara aze az Azerbaijani bad   Banda bai   Bamileke languages bak ba Bashkir bal   Baluchi bam bm Bambara ban   Balinese baq/eus eu Basque bas   Basa bat   Baltic (Other) bej   Beja bel be Belarusian bem   Bemba ben bn Bengali ber   Berber (Other) bho   Bhojpuri bih bh bik   Bikol bin   Bini bis bi Bislama bla   Siksika bnt   Bantu (Other) tib/bod bo Tibetan bos bs Bosnian bra   Braj bre br Breton btk   Batak (Indonesia) bua   Buriat bug   Buginese bul bg Bulgarian bur/mya my Burmese byn   Blin; Bilin cad   Caddo cai   Central American Indian (Other) car   Carib cat ca Catalan; Valencian cau   Caucasian (Other) ceb   Cebuano cel   Celtic (Other) cze/ces cs Czech cha ch Chamorro chb   Chibcha che ce Chechen chg   Chagatai chi/zho zh Chinese chk   Chuukese chm   Mari chn   Chinook jargon cho   Choctaw chp   Chipewyan chr   Cherokee chu cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic chv cv Chuvash chy   Cheyenne cmc   Chamic languages cop   Coptic cor kw Cornish cos co Corsican cpe   Creoles and pidgins, English based (Other) cpf   Creoles and pidgins, French-based (Other) cpp   Creoles and pidgins, Portuguese-based (Other) cre cr Cree crh   Crimean Tatar; Crimean Turkish crp   Creoles and pidgins (Other) csb   Kashubian cus   Cushitic (Other) wel/cym cy Welsh cze/ces cs Czech dak   Dakota dan da Danish dar   Dargwa day   Dayak del   Delaware den   Slave (Athapascan) ger/deu de German dgr   Dogrib din   Dinka div dv Divehi; Dhivehi; Maldivian doi   Dogri dra   Dravidian (Other) dsb   Lower Sorbian dua   Duala dum   Dutch, Middle (ca.1050-1350) dut/nld nl Dutch; Flemish dyu   Dyula dzo dz Dzongkha efi   Efik egy   Egyptian (Ancient) eka   Ekajuk gre/ell el Greek, Modern (1453-) elx   Elamite eng en English enm   English, Middle (1100-1500) epo eo Esperanto est et Estonian baq/eus eu Basque ewe ee Ewe ewo   Ewondo fan   Fang fao fo Faroese per/fas fa ersian fat   fij fj Fijian fil   Filipino; Pilipino fin fi Finnish fiu   Finno-Ugrian (Other) fon   Fon fre/fra fr French fre/fra fr French frm   French, Middle (ca.1400-1600) fro   French, Old (842-ca.1400) frr   Northern Frisian frs   Eastern Frisian fry fy Western Frisian ful ff Fulah fur   Friulian gaa   Ga gay   Gayo gba   Gbaya gem   Germanic (Other) geo/kat ka Georgian ger/deu de German gez   Geez gil   Gilbertese gla gd Gaelic; Scottish Gaelic gle ga Irish glg gl Galician glv gv Manx gmh   German, Middle High (ca.1050-1500) goh   German, Old High (ca.750-1050) gon   Gondi gor   Gorontalo got   Gothic grb   Grebo grc   Greek, Ancient (to 1453) gre/ell el Greek, Modern (1453-) grn gn Guarani gsw   Alemani; Swiss German guj gu Gujarati gwi   Gwich磇n hai   Haida hat ht Haitian; Haitian Creole hau ha Hausa haw   Hawaiian heb he Hebrew her hz Herero hil   Hiligaynon him   Himachali hin hi Hindi hit   Hittite hmn   Hmong hmo ho Hiri Motu scr/hrv hr Croatian hsb   Upper Sorbian hun hu Hungarian hup   Hupa arm/hye hy Armenian iba   Iban ibo ig Igbo ice/isl is Icelandic ido io Ido iii ii Sichuan Yi ijo   Ijo iku iu Inuktitut ile ie Interlingue ilo   Iloko ina ia Interlingua (International Auxiliary Language Association) inc   Indic (Other) ind id Indonesian ine   Indo-European (Other) inh   Ingush ipk ik Inupiaq ira   Iranian (Other) iro   ice/isl is Icelandic ita it Italian jav jv Javanese jbo   Lojban jpn ja Japanese jpr   Judeo-Persian jrb   Judeo-Arabic kaa   Kara-Kalpak kab   Kabyle kac   Kachin kal kl Kalaallisut; Greenlandic kam   Kamba kan kn Kannada kar   Karen kas ks Kashmiri geo/kat ka Georgian kau kr Kanuri kaw   Kawi kaz kk Kazakh kbd   Kabardian kha   Khasi khi   Khoisan (Other) khm km Khmer kho   Khotanese kik ki Kikuyu; Gikuyu kin rw Kinyarwanda kir ky Kirghiz kmb   Kimbundu kok   Konkani kom kv Komi kon kg Kongo kor ko Korean kos   Kosraean kpe   Kpelle krc   Karachay-Balkar krl   Karelian kro   Kru kru   Kurukh kua kj Kuanyama; Kwanyama kum   Kumyk kur ku Kurdish kut   Kutenai lad   Ladino lah   Lahnda lam   Lamba lao lo Lao lat la Latin lav lv Latvian lez   Lezghian lim li Limburgan; Limburger; Limburgish lin ln Lingala lit lt Lithuanian lol   Mongo loz   Lozi ltz lb Luxembourgish; Letzeburgesch lua   Luba-Lulua lub lu Luba-Katanga lug lg Ganda lui   Luiseno lun   Lunda luo   Luo (Kenya and Tanzania) lus   Lushai mac/mkd mk Macedonian mad   Madurese mag   Magahi mah mh Marshallese mai   Maithili mak   Makasar mal ml Malayalam man   Mandingo mao/mri mi Maori map   Austronesian (Other) mar mr Marathi mas   Masai may/msa ms Malay mdf   Moksha mdr   Mandar men   Mende mga   Irish, Middle (900-1200) mic   Mi'kmaq; Micmac min   Minangkabau mis   Miscellaneous languages mac/mkd mk Macedonian mkh   Mon-Khmer (Other) mlg mg Malagasy mlt mt Maltese mnc   Manchu mni   Manipuri mno   Manobo languages moh   Mohawk mol mo Moldavian mon mn Mongolian mos   Mossi mao/mri mi Maori may/msa ms Malay mul   Multiple languages mun   Munda languages mus   Creek mwl   Mirandese mwr   Marwari bur/mya my Burmese myn   Mayan languages myv   Erzya nah   Nahuatl nai   North American Indian nap   Neapolitan nau na Nauru nav nv Navajo; Navaho nbl nr Ndebele, South; South Ndebele nde nd Ndebele, North; North Ndebele ndo ng Ndonga nds   Low German; Low Saxon; German, Low; Saxon, Low nep ne Nepali new   Nepal Bhasa; Newari nia   Nias nic   Niger-Kordofanian (Other) niu   Niuean dut/nld nl Dutch; Flemish nno nn Norwegian Nynorsk; Nynorsk, Norwegian nob nb Bokm錶, Norwegian; Norwegian Bokm錶 nog   Nogai non   Norse, Old nor no Norwegian nqo   N'Ko nso   Pedi; Sepedi; Northern Sotho nub   Nubian languages nwc   Classical Newari; Old Newari; Classical Nepal Bhasa nya ny Chichewa; Chewa; Nyanja nym   Nyamwezi nyn   Nyankole nyo   Nyoro nzi   Nzima oci oc oji oj Ojibwa ori or Oriya orm om Oromo osa   Osage oss os Ossetian; Ossetic ota   Turkish, Ottoman (1500-1928) oto   Otomian languages paa   Papuan (Other) pag   Pangasinan pal   Pahlavi pam   Pampanga pan pa Panjabi; Punjabi pap   Papiamento pau   Palauan peo   Persian, Old (ca.600-400 B.C.) per/fas fa Persian phi   Philippine (Other) phn   Phoenician pli pi Pali pol pl Polish pon   Pohnpeian por pt Portuguese pra   Prakrit languages pro   Provenl, Old (to 1500) pus ps Pushto qaa-qtz   Reserved for local use que qu Quechua raj   Rajasthani rap   Rapanui rar   Rarotongan roa   Romance (Other) roh rm Raeto-Romance rom   Romany rum/ron ro Romanian rum/ron ro Romanian run rn Rundi rup   Aromanian; Arumanian; Macedo-Romanian rus ru Russian sad   Sandawe sag sg Sango sah   Yakut sai   South American Indian (Other) sal   Salishan languages sam   Samaritan Aramaic san sa Sanskrit sas   Sasak sat   Santali scc/srp sr Serbian scn   Sicilian sco   Scots scr/hrv hr Croatian sel   Selkup sem   Semitic (Other) sga   Irish, Old (to 900) sgn   Sign Languages shn   Shan sid   Sidamo sin si Sinhala; Sinhalese sio   Siouan languages sit   Sino-Tibetan (Other) sla   Slavic (Other) slo/slk sk Slovak slo/slk sk Slovak slv sl Slovenian sma   Southern Sami sme se Northern Sami smi   Sami languages (Other) smj   Lule Sami smn   Inari Sami smo sm Samoan sms   Skolt Sami sna sn Shona snd sd Sindhi snk   Soninke sog   Sogdian som so Somali son   Songhai sot st Sotho, Southern spa es Spanish; Castilian alb/sqi sq srd sc Sardinian srn   Sranan Togo scc/srp sr Serbian srr   Serer ssa   Nilo-Saharan (Other) ssw ss Swati suk   Sukuma sun su Sundanese sus   Susu sux   Sumerian swa sw Swahili swe sv Swedish syr   Syriac tah ty Tahitian tai   Tai (Other) tam ta Tamil tat tt Tatar tel te Telugu tem   Timne ter   Tereno tet   Tetum tgk tg Tajik tgl tl Tagalog tha th Thai tib/bod bo Tibetan tig   Tigre tir ti Tigrinya tiv   Tiv tkl   Tokelau tlh   Klingon; tlhIngan-Hol tli   Tlingit tmh   Tamashek tog   Tonga (Nyasa) ton to Tonga (Tonga Islands) tpi   Tok Pisin tsi   Tsimshian tsn tn Tswana tso ts Tsonga tuk tk Turkmen tum   Tumbuka tup   Tupi languages tur tr Turkish tut   Altaic (Other) tvl   Tuvalu twi tw Twi tyv   udm   Udmurt uga   Ugaritic uig ug Uighur; Uyghur ukr uk Ukrainian umb   Umbundu und   Undetermined urd ur Urdu uzb uz Uzbek vai   Vai ven ve Venda vie vi Vietnamese vol vo Volap黭 vot   Votic wak   Wakashan languages wal   Walamo war   Waray was   Washo wel/cym cy Welsh wen   Sorbian languages wln wa Walloon wol wo Wolof xal   Kalmyk; Oirat xho xh Xhosa yao   Yao yap   Yapese yid yi Yiddish yor yo Yoruba ypk   Yupik languages zap   Zapotec zen   Zenaga zha za Zhuang; Chuang chi/zho zh Chinese znd   Zande zul zu Zulu zun   Zuni zxx   No linguistic content zza   Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki
   
      
       Comments on this document: iso639-2@loc.gov
       --------------------------------------------------------------------------------     
         IS0 639-2 HOME - Code
         List - Changes to Codes  
         ISO
         639 Joint Advisory Committee -
   ISO
         639-1 Registration Authority
 
       --------------------------------------------------------------------------------
     
 Library of Congress >> Standards Contact UsOctober 5, 2006

发表于 @ 2006年05月12日 11:27:00 | 评论( 23 ) | 编辑| 举报| 收藏

旧一篇:Symbian中日志文件的使用 | 新一篇:使用CDirectScreenAcess进行直接写屏
查看最新精华文章 请访问博客首页相关文章
什么是3GPFLASH PLYAER UPDATE 3互联网流媒体世界刚刚发生了一场革命3gp手机视频制作flash 9.0.115 h.264 视频文件转换手机电影3GP转换器下载3gp的文件格式3gpJ2ME视频播放ainycao 发表于2006年7月3日 9:13:00  IP:举报回复删除
你好,我最近也在做3gp的东西,可以交流一下吗?
联系方法msn:ainy_198010@hotmail.comwindcao 发表于2006年7月25日 11:08:00  IP:举报回复删除
呵呵,我请了几天陪产假,刚刚看到,我的现在还不成熟,成熟之后我整理一下会公开的careerman 发表于2006年8月9日 16:19:00  IP:举报回复删除
windcao老兄,就等你的研究结果了,CVideoPlayerUtility不能播放3GP文件,不知道怎么才能播放3GP文件阿MQL 发表于2006年9月2日 14:30:00  IP:举报回复删除
moovbox里面的方框都分别代表什么含义亚?媒体描述信息是怎么存放的luxh 发表于2006年9月12日 16:51:00  IP:举报回复删除
windcao兄,今天抓狂的时候看到了你这篇文章。
受人恩惠,说声谢谢,呵呵wxq888 发表于2006年9月27日 17:02:00  IP:举报回复删除
找了半天,终于发现了,老兄,你太伟大了!!
先顶了再细看opensource 发表于2006年10月10日 21:20:00  IP:举报回复删除
总算见到了一个真正的高手,不像有些人,研究了一下就搞个库出来卖! 真是恶心。http://blog.csdn.net/ydfok/archive/2006/10/08/1326449.aspxluxh 发表于2006年10月16日 10:28:00  IP:举报回复删除
下面是我最近读的box格式,我的msn:luxh_229@hotmail.com,QQ:48294909.
欢迎xdjm和我交流,大家在windcao的
Movie Box
Box类型: ‘moov’
容器: 文件
是否必须: 是
数量: 一个,并且只能是一个.

媒体的原始数据被放置在这个box中,这个box位于文件的最高级别,一般来说这个box接近于文件的开始或者末尾,尽管这并不被要求。语法如下:
aligned(8) class MovieBox extends Box(‘moov’)
{}
Media Data Box
Box类型: ‘mdat’
容器: 文件
是否必须: 否
数量: 任意个.
其他box待读.
这个box包含媒体数据,在视频轨道中,这个box包含视频帧,一个presentation可以包含0个或者多个这样的box,实际的媒体数据紧跟在type field后面,媒体数据的格式被元数据描述(在英文文件的8.14节被介绍)。
当presentation很大的时候,box中的数据的长度很可能超过一个32位的字,这时候英文文稿中6.2规定的大变量被使用。
元数据中描述了媒体数据在整个文件中的绝对偏移。语法如下:
aligned(8) class MediaDataBox extends Box(‘mdat’)
{
bit(8) data[];
}
Data[]包含的是媒体数据。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx

symbian流媒体入门之--《3gp文件格式研究》相关推荐

  1. 3gp文件格式研究 (转windcao的专栏)

    序言 06我开始做3gp文件的播放器,但是关于3gp的文档太少了也很难找,在网友luxh的帮助下, 我终于有了第一份关于3gp文件格式的文档<ISO/IEC 14496-12,ISO媒体文件格式 ...

  2. [转载]3GP文件格式研究

    原文来自: 无极 - CSDN博客  http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx 序言 06我开始做3gp文件的播放器,但是 ...

  3. Symbian s60入门(转载)

    Symbian s60入门 转载自 http://dev.csdn.net/htmls/62/62134.html   摘要: Symbian OS 是目前市场占有率最高的移动设备 OS .本文是 S ...

  4. 转 3GP文件格式分析

    http://blog.csdn.net/rootcn/archive/2005/01/21/263226.aspx 1.      概述现在很多智能手机都支持多媒体功能,特别是音频和视频播放功能,而 ...

  5. 3GP文件格式的研究(有转载)

    ISO/IEC 14496的组成如下: (引自:http://www.blogcn.com/user73/lipingfu/index.html ) (1)ISO/IEC 14496-1,系统部分,描 ...

  6. 智能手机Symbian操作系统入门知识整理

    1.什么是S60.        什么是OS6/7/8/9,什么是J2ME.        什么是MIDP 根据人机界面的不同Symbian操作系统分为S60.S80.S90和UIQ,发展不同用户界面 ...

  7. [转贴]Symbian开发入门 - UIQ开发教程

    文章作者:无双: 原发处:loveunix.net 欢迎转载,但是保留原作者与发表网站 保留版权声明 文章作者:无双: 原发处:loveunix.net 欢迎转载,但是保留原作者与发表网站 保留版权声 ...

  8. Symbian开发入门

    原文地址: http://www.360doc.com/content/070530/15/13049_529351.html 1.      Symbian简介 1.1       Symbian起 ...

  9. Symbian开发入门(一) symbian简介

    随着3G网络的建设,智能手机将更普及.其中的个人发展机会将更大,因此选定Symbian来学习.一下记录了学习的过程和心得.<结合网络资料和书籍整合自己的经验> 说起Symbian我们必须提 ...

最新文章

  1. Switcher ---Vista Areo 工具
  2. tomcat用80port能够启动,可是浏览器不显示tomcat首页
  3. ajax模拟省市级联动,省市区三级联动和ajax模拟请求(示例代码)
  4. 机器学习(一)——熟悉tensorflow2.0
  5. 单片机入门学习笔记7:人机交互界面
  6. 概率分布:PMF与PDF
  7. cf 786 B 线段树优化建图
  8. Python3+PyCharm+selenium3 环境搭建
  9. Android 系统(193)----图解从URL到网页通信原理
  10. jsf2.0---jsf的新特性
  11. CSS的继承层叠和特殊性 样式的继承和优先级属性
  12. 中国2017 Google 开发者大会第二天简单回顾
  13. Swift 再等等?我的答案是:快上车
  14. mysql dbutil_DBUtil连接数据库
  15. extjs6整合到web项目中
  16. matlab中uigetfile命令的应用
  17. mysql中怎么防止数据丢失
  18. 利用npm bin创建可执行命令实现项目代码规范自动化
  19. three.js加载3D模型,在网页上展示3D模型(.glb.gltf.fbx格式)
  20. 使用 easyExcel 生成多个 excel 并打包成zip压缩包

热门文章

  1. linux 页缓存 块缓存,页缓存和块缓存
  2. 各种Android UI开源框架 开源库
  3. 如何让您的网站符合W3C标准
  4. 【线程基础】多个线程,顺序输出
  5. 【UML】用例图、活动图、类图、顺序图练习题
  6. java序列化与反序列化的使用方法-java.io.InvalidClassException错误
  7. 学习型索引在数据库中的应用实践
  8. Elasticsearch 6 Mapping设置
  9. 什么是骨传导耳机?骨传导耳机好不好,看完这些你就知道了!
  10. jQuery 图像 360 度旋转插件