⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3gp文件格式研究 (转windcao的专栏) - 嵌入式 - it博客网.htm

📁 研究3gp文件格式时总结的资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            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>&nbsp;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>&nbsp;</P>
            <P>&nbsp;3gp文件基于mpeg4由若干个box组成</P>
            <P>&nbsp;一个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 版本号&nbsp;<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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |<BR>+----+----+---------------------------+ </P>
            <P>很多box是这样的我们可以称之为全包(full 
            box)<BR>+[4]-+[4]-+-+---+[size-8]-------------------+<BR>|size|type|v|flg|data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |<BR>+----+----+-+---+---------------------------+</P>
            <P>简记为<BR>+[4]-+[4]-+[4]-+[size-8]-------------------+<BR>|size|type|vsfl|data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |<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...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |ntid|<BR>+----+----+----+----+----+----+----+--------...---------+----+<BR>size:box长度<BR>type:文件类型标识内容为"mvhd"<BR>vsfl:版本号标志<BR>cttm:creat 
            time 文件创建时间<BR>mdtm:modification time&nbsp; 文件修改时间<BR>tmsc:timescale 
            时间缩放因数<BR>mxtl:maxTrackLen duration of longest track 
            最长播放时间<BR>reserved: 保留字段<BR>ntid-next trak id&nbsp; 下一个频道标识</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&nbsp;&nbsp;&nbsp; 
            |ct|rs|reserved&nbsp;&nbsp;&nbsp; 
            |twvo|thvo|<BR>+------------+--+--+--------...-+----+----+<BR>v=1<BR>+[4]-+[4]-+[4]-+[8]-----+[8]-----+[4]-+[4]-+[8]-----+<BR>|size|tkhd|vsfl|cttm&nbsp;&nbsp;&nbsp; 
            |mdtm&nbsp;&nbsp;&nbsp; |tkid|resv|duat&nbsp;&nbsp;&nbsp; 
            |<BR>+----+----+----+--------+--------+----+----+--------+<BR>+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+<BR>|reserved&nbsp;&nbsp;&nbsp; 
            |ct|rs|reserved&nbsp;&nbsp;&nbsp; 
            |twvo|thvo|<BR>+------------+--+--+--------...-+----+----+</P>
            <P>size:box长度<BR>type:文件类型标识内容为"tkhd"<BR>vsfl:版本号标志<BR>cttm:creat 
            time 文件创建时间<BR>mdtm:modification time&nbsp; 文件修改时间<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>&nbsp;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&nbsp;&nbsp;&nbsp; 
            |mdtm&nbsp;&nbsp;&nbsp; |tmsk|duat&nbsp;&nbsp;&nbsp; 
            |<BR>+----+----+--------+--------+----+--------+<BR>其中<BR>size:box长度<BR>type:文件类型标识内容为"mdhd"<BR><BR>pl:pad&amp;language{bit(1) 
            pad = 0;unsigned int(5)[3] language // ISO-639-2/T language 
            code参见附录}<BR>*-*[15]-----------*<BR>|p|language&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |<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&nbsp;&nbsp;&nbsp; 
            |name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            |<BR>+----+----+----+------------+-----------+<BR>size:box长度<BR>type:文件类型标识内容为"tkhd" 
            </P>
            <P>pred:pre_defined = 0;<BR>hdlt:handler_type;<BR>&nbsp;‘vide’ Video 
            track 视频<BR>&nbsp;‘soun’ Audio track 音频<BR>&nbsp;‘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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<BR>+----+----+----+----+<BR>&nbsp;<BR>gmod:graphicsmode 
            描述了本视频track 与其他视频track的混合方式.默认的值为0,也就是直接覆盖.<BR>opcl:opcolor 透明色颜色值 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -