📄 3gp文件格式研究 (转windcao的专栏) - 嵌入式 - it博客网.htm
字号:
14496-4,一致性测试部分,定义了比特流和设备的一致性条件,用来测试MPEG-4的实现。<BR>(5)ISO/IEC
14496-5,参考软件,包括与MPEG-4的主要部分相对应的软件。<BR>(6)ISO/IEC
14496-6,多媒体传送整体框架DMIF,这是MPEG-4应用层与传输网络的接口,定义了通信协议,使MPEG-4系统的数据流能进入各种传输网络。还包含一个存储格式MP4,用于存储编码的场景。<BR>(7)
ISO/IEC
14496-7,为MPEG-4工具优化软件,提供了对实现进行优化的例子(这里的实现指的是第五部分)。<BR>(8)ISO/IEC
14496-8,定义了在IP网络上传输MPEG-4内容的方式。<BR>(9)ISO/IEC
14496-9,为参考硬件描述,提供了用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。<BR>(10)ISO/IEC
14496-10,高级视频编码AVC,定义了一个被称为AVC的视频编解码器。<BR>(11)ISO/IEC
14496-11,场景描述和应用引擎。<BR>(12)ISO/IEC
14496-12,ISO媒体文件格式,定义了一个存储媒体内容的文件格式。<BR>(13)ISO/IEC
14496-13,知识产权管理和保护(IPMP)扩展。<BR>(14)ISO/IEC
14496-14,MP4文件格式,定义了基于第十二部分的用于存储MPEG-4内容的容器文件格式。<BR>(15)ISO/IEC
14496-15,AVC文件格式,定义了基于第十二部分的用于存储第十部分的视频内容的文件格式。<BR>(16)ISO/IEC
14496-16,动画框架扩展AFX(Animation Framework eXtension)。<BR>(17)ISO/IEC
14496-17,同步文本字幕格式(尚未完成,2005年1月达成"最终委员会草案"。<BR>(18)ISO/IEC
14496-18,字体压缩和流式传输(针对公开字体格式)。<BR>(19)ISO/IEC
14496-19,综合材质流(Synthesized Texture Stream)。<BR>(20)ISO/IEC
14496-20,简单场景表示(尚未完成,2005年1月达成"最终委员会草案"。<BR>(21)ISO/IEC
14496-21,用于描绘(Rendering)的MPEG-J拓展(尚未完成,2005年1月达成"委员会草案"<BR></P>
<P><STRONG>我做的一个辅助工具</STRONG>:<A
href="http://download.csdn.net/source/162659"><U><FONT
color=#800080>http://download.csdn.net/source/162659</FONT></U></A> 3gpp文件结构查看器<BR>目前最新版本是0.1.2</P>
<P><STRONG><FONT
size=5>正文:</FONT></STRONG><BR>首先来说3gp文件相当于一个容器,本身没有什么具体的编码解码规则。<BR>我们可以选择编码方式
<BR>- <STRONG>AMR narrow-band:</STRONG>编码简称'samr'
常用与语言片段的压缩,可以对声音片段进行最大程度的压缩,但是失真较大,如果用在音乐文件上结构常常是无法忍受的。 </P>
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:3GPP TS 26.071:
"Mandatory Speech CODEC speech processing functions; AMR Speech
CODEC; General description".) </P>- <STRONG>AMR
wideband:</STRONG>编码简称'sawb' 相对AMR
narrow-band来说压缩比降低了,品质有所提升可用来压缩音乐。
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:3GPP TS 26.171:
"AMR Wideband Speech Codec; General Description".) </P>-
<STRONG>Extended AMR-WB codec</STRONG>编码简称 'sawp'
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:<BR>3GPP TS
26.290: "Extended AMR Wideband codec; Transcoding
functions".<BR>3GPP TS 26.304: "ANSI-C code for the Floating-point;
Extended AMR Wideband codec".<BR>3GPP TS 26.273: "ANSI-C code for
the Fixed-point; Extended AMR Wideband codec".<BR></P>-
<STRONG>Enhanced aacPlus and MPEG-4 AAC codec</STRONG>编码简称 'mp4a'
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:<BR>3GPP TS
26.401: "General audio codec audio processing functions; Enhanced
aacPlus general audio codec; General description".<BR>3GPP TS
26.410: "General audio codec audio processing functions; Enhanced
aacPlus general audio codec; Floating-point ANSI-C code".<BR>3GPP TS
26.411: "General audio codec audio processing functions; Enhanced
aacPlus general audio codec; Fixed-point ANSI-C code".<BR></P>-
<STRONG>MPEG-4 video codec</STRONG>编码简称'mp4v'
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:ISO/IEC
14496-2:2004: "Information technology – Coding of audio-visual
objects – Part 2: Visual".) </P>- <STRONG>H.263 video
codec</STRONG>编码简称'h263'
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:ITU-T
Recommendation H.263 (01/05): "Video coding for low bit rate
communication".)<BR></P>- <STRONG>H.264 video
codec</STRONG>编码简称'avc1'
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:ITU-T
Recommendation H.264 (03/05): "Advanced video coding for generic
audiovisual services"<BR>ISO/IEC 14496-10:2005: "Information
technology – Coding of audio-visual objects – Part 10: Advanced
Video Coding".)<BR></P>- <STRONG>3GPP timed text format
</STRONG>编码简称'tx3g'
<P dir=ltr style="MARGIN: 0px 0px 0px 20px">(详情请参考:3GPP TS 26.245:
"Transparent end-to-end packet switched streaming service (PSS);
Timed text format".)<BR></P>其中手机最普遍支持的格式是 amr(音频) +h263(视频)
<P> </P>
<P> 3gp文件基于mpeg4由若干个box组成</P>
<P> 一个3gp文件由若干个box组成常见的有:</P><FONT face="Courier New">
<P><STRONG>文件类型包:</STRONG>(FileTypeBox,简称代码'ftyp')<BR>ftyp:文件类型包相当于文件头,说明了文件所使用的协议版本,编码格式等信息<BR>+[4]-+[4]-+[4]-+[4]-+[4]-+<BR>|size|ftyp|mjbr|mivs|cpbr|<BR>+----+----+----+----+----+<BR>mjbr:major_brand
版本分支<BR>mivs:minor_version 版本号 <BR>cpbr:compatible_brands 兼容分支
</P>
<P><STRONG>媒体数据包:</STRONG>(Media Data Box,简称代码'mdat')<BR><FONT
color=#333399>"Media Data Box <BR>Box类型: ‘mdat’ <BR>容器: 文件 <BR>是否必须:
否 <BR>数量: 任意个. "-luxh</FONT><BR><IMG alt="3gp file frame"
src="3gp文件格式研究 (转windcao的专栏) - 嵌入式 - IT博客网.files/3gpfileBoxs.jpg"></P>
<P>mdat box 存放了音频视频和其他的数据,一般的文件至少有2个mdatbox, 一个用于音频,一个用于视频,
通常还会有一些文本信息也放在mdatbox中,各种信息的顺序不固定。 如果只是存放音乐一个mdat就够用了。</P>
<P>你可能会问这么多box 都叫mdat我怎么知道音频放哪里视频放哪里呢?别着急这些相关信息都放在moovbox里面 </P>
<P><STRONG>影片包:</STRONG>(moov box:Movie
Box:)是一个3gp文件中最复杂最重要的文件。<BR><IMG alt="moov box"
src="3gp文件格式研究 (转windcao的专栏) - 嵌入式 - IT博客网.files/MoovBox.jpg"> </P>
<P>看到这里你可能会问"moovbox里面的方框都分别代表什么含义呀?媒体描述信息是怎么存放的?",别着急咱们来慢慢分析一下。<BR><FONT
color=#333399>"Movie Box <BR>Box类型: 'moov'; <BR>容器: 文件 <BR>是否必须: 是
<BR>数量: 一个,并且只能是一个.
<BR><BR>媒体的原始数据被放置在这个box中,这个box位于文件的最高级别,一般来说这个box接近于文件的开始或者末尾,尽管这并不被要求。语法如下:
<BR>a ligned(8) class MovieBox extends Box(‘moov’) {}
"-luxh<BR></FONT><BR>moovbox
有两个必要的子box他们是影片头包和轨迹包<BR><STRONG>影片头包</STRONG>movie
header,简称代码'mvhd'
<BR>首先剖析一下影片头包,顺便以此为例理解一下包的结构。<BR>每一个包开头的4个字节都是一个整数存放了本包的长度。<BR>接下来的4个字节是个字符串存放了本包的类型。如'moov','mvhd'。<BR>基本上包都是这模样的:<BR>+[4]-+[4]-+[size-8]-------------------+<BR>|size|type|data
|<BR>+----+----+---------------------------+ </P>
<P>很多box是这样的我们可以称之为全包(full
box)<BR>+[4]-+[4]-+-+---+[size-8]-------------------+<BR>|size|type|v|flg|data
|<BR>+----+----+-+---+---------------------------+</P>
<P>简记为<BR>+[4]-+[4]-+[4]-+[size-8]-------------------+<BR>|size|type|vsfl|data
|<BR>+----+----+----+---------------------------+</P>
<P>其中vsfl:版本号标志 </P>
<P>+-+---+<BR>|v|flg|<BR>+-+---+<BR>v :version<BR>flg:flages </P>
<P>在影片头包中接下来的是版本标志等信息。<BR>MVHD
是媒体信息头,存放媒体的全局性的信息。<BR>+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[76]----...---------+[4]-+<BR>|size|mvhd|vsfl|cttm|mdtm|tmsc|mxtl|reserved...
|ntid|<BR>+----+----+----+----+----+----+----+--------...---------+----+<BR>size:box长度<BR>type:文件类型标识内容为"mvhd"<BR>vsfl:版本号标志<BR>cttm:creat
time 文件创建时间<BR>mdtm:modification time 文件修改时间<BR>tmsc:timescale
时间缩放因数<BR>mxtl:maxTrackLen duration of longest track
最长播放时间<BR>reserved: 保留字段<BR>ntid-next trak id 下一个频道标识</P>
<P><STRONG>轨迹包</STRONG>TRAK
也是一个容器,是单个媒体流频道的信息的容器,它有两个必要的子box:TKHD,MDIA。<BR>TKHD
存放本trak的信息,有两个版本<BR>v=0<BR>+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+<BR>|size|tkhd|vsfl|cttm|mdtm|tkid|resv|duat|<BR>+----+----+----+----+----+----+----+----+<BR>+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+<BR>|reserved
|ct|rs|reserved
|twvo|thvo|<BR>+------------+--+--+--------...-+----+----+<BR>v=1<BR>+[4]-+[4]-+[4]-+[8]-----+[8]-----+[4]-+[4]-+[8]-----+<BR>|size|tkhd|vsfl|cttm
|mdtm |tkid|resv|duat
|<BR>+----+----+----+--------+--------+----+----+--------+<BR>+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+<BR>|reserved
|ct|rs|reserved
|twvo|thvo|<BR>+------------+--+--+--------...-+----+----+</P>
<P>size:box长度<BR>type:文件类型标识内容为"tkhd"<BR>vsfl:版本号标志<BR>cttm:creat
time 文件创建时间<BR>mdtm:modification time 文件修改时间<BR>tkid:track-id
同一个文件中这是一个不重复的序列<BR>resv:reserved 保留字段<BR>duat:duration
总的播放时间长度<BR>reserved: 保留字段<BR>ct:codec_type {audio=0x0100; video=0}
编码类型,到底是音频还是视频等<BR>rs:reserved 保留字段<BR>reserved: 保留字段<BR>如果这个track
是视频编码它将有如下字段,在你解码的时候非常有用.<BR>twvo:Track width , for visual only
视频的宽度<BR>thvo:Track height, for visual only 视频的高度</P>
<P><FONT
face="Courier New">MDIA是存放具体的媒体信息的容器。<BR>有且仅有3个子box:{MDHD,HDLR,MINF}</FONT></P>
<P><FONT
face="Courier New">MDHD媒体头,也有两个版本<BR> v=0<BR>+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+<BR>|size|type|cttm|mdtm|tmsk|duat|<BR>+----+----+----+----+----+----+<BR><BR>v=1<BR>+[4]-+[4]-+[8]-----+[8]-----+[4]-+[8]-----+<BR>|size|type|cttm
|mdtm |tmsk|duat
|<BR>+----+----+--------+--------+----+--------+<BR>其中<BR>size:box长度<BR>type:文件类型标识内容为"mdhd"<BR><BR>pl:pad&language{bit(1)
pad = 0;unsigned int(5)[3] language // ISO-639-2/T language
code参见附录}<BR>*-*[15]-----------*<BR>|p|language
|<BR>*-*---------------*<BR><BR>pd:unsigned int(16) pre_defined =
0;</FONT></P>
<P>HDLR
句柄,描述媒体类型<BR>+[4]-+[4]-+[4]-+[12]--------+[size-24]--+<BR>|size|pred|hdlt|reserved
|name
|<BR>+----+----+----+------------+-----------+<BR>size:box长度<BR>type:文件类型标识内容为"tkhd"
</P>
<P>pred:pre_defined = 0;<BR>hdlt:handler_type;<BR> ‘vide’ Video
track 视频<BR> ‘soun’ Audio track 音频<BR> ‘hint’ Hint track
注释<BR>reserved: reserved = 0;<BR>name: 名称字符串,0结尾的UTF-8串 </P>
<P>MINF 媒体信息容器(Media Information
Box)<BR>这是一个普通的box容器.它的内部可能包含如下的子box:<BR>VMHD,SMHD,HMHD,NMHD,DINF,STBL.<BR>VMHD,SMHD,HMHD分别对应于视频,音频,注视,NMHD我还不太清楚.它们都属于fullbox.<BR>DINF数据信息和STBL采样表,都是普通的box.
VMHD还包括两个数据字段.<BR>+[4]-+[4]-+[4]-+[4]-+<BR>|gmod|opcl |<BR>+----+----+----+----+<BR> <BR>gmod:graphicsmode
描述了本视频track 与其他视频track的混合方式.默认的值为0,也就是直接覆盖.<BR>opcl:opcolor 透明色颜色值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -