MP4 esds box解析

转载 2013年12月04日 15:00:29

esds box中主要是存放Element Stream Descriptors(ESDs),该box的前四个字节为version&flag,一般为0x 00 00 00 00;

从偏移第四个字节开始,为ESDs。

ESDs中可以分为三层,每层为包含关系,分别为MP4ESDescr,MP4DecConfigDescr,MP4DecSpecificDescr,每层的结构都类似如下:

typedef esdsStruct{

uint8_t tag;

<不定长,最长4字节> size;

uint8_t[size] data;

}esdsStruct;

各层的起始标签如下:

  1. #define MP4ESDescrTag                   0x03  
  2. #define MP4DecConfigDescrTag            0x04  
  3. #define MP4DecSpecificDescrTag          0x05  

起始标签后,为data size(不包含tag和size字节数),指示该层data的字节数。

其中,MP4DecConfigDescr层的data[0] 为objectTypeIndication<http://www.mp4ra.org/object.html>(一般来说,为esds box的data[11]),用于指示codec类型,定义如下:

  1. /* http://www.mp4ra.org */  
  2. /* ordered by muxing preference */  
  3. const AVCodecTag ff_mp4_obj_type[] = {  
  4.     { CODEC_ID_MOV_TEXT  , 0x08 },  
  5.     { CODEC_ID_MPEG4     , 0x20 },  
  6.     { CODEC_ID_H264      , 0x21 },  
  7.     { CODEC_ID_AAC       , 0x40 },  
  8.     { CODEC_ID_MP4ALS    , 0x40 }, /* 14496-3 ALS */  
  9.     { CODEC_ID_MPEG2VIDEO, 0x61 }, /* MPEG2 Main */  
  10.     { CODEC_ID_MPEG2VIDEO, 0x60 }, /* MPEG2 Simple */  
  11.     { CODEC_ID_MPEG2VIDEO, 0x62 }, /* MPEG2 SNR */  
  12.     { CODEC_ID_MPEG2VIDEO, 0x63 }, /* MPEG2 Spatial */  
  13.     { CODEC_ID_MPEG2VIDEO, 0x64 }, /* MPEG2 High */  
  14.     { CODEC_ID_MPEG2VIDEO, 0x65 }, /* MPEG2 422 */  
  15.     { CODEC_ID_AAC       , 0x66 }, /* MPEG2 AAC Main */  
  16.     { CODEC_ID_AAC       , 0x67 }, /* MPEG2 AAC Low */  
  17.     { CODEC_ID_AAC       , 0x68 }, /* MPEG2 AAC SSR */  
  18.     { CODEC_ID_MP3       , 0x69 }, /* 13818-3 */  
  19.     { CODEC_ID_MP2       , 0x69 }, /* 11172-3 */  
  20.     { CODEC_ID_MPEG1VIDEO, 0x6A }, /* 11172-2 */  
  21.     { CODEC_ID_MP3       , 0x6B }, /* 11172-3 */  
  22.     { CODEC_ID_MJPEG     , 0x6C }, /* 10918-1 */  
  23.     { CODEC_ID_PNG       , 0x6D },  
  24.     { CODEC_ID_JPEG2000  , 0x6E }, /* 15444-1 */  
  25.     { CODEC_ID_VC1       , 0xA3 },  
  26.     { CODEC_ID_DIRAC     , 0xA4 },  
  27.     { CODEC_ID_AC3       , 0xA5 },  
  28.     { CODEC_ID_DTS       , 0xA9 }, /* mp4ra.org */  
  29.     { CODEC_ID_VORBIS    , 0xDD }, /* non standard, gpac uses it */  
  30.     { CODEC_ID_DVD_SUBTITLE, 0xE0 }, /* non standard, see unsupported-embedded-subs-2.mp4 */  
  31.     { CODEC_ID_QCELP     , 0xE1 },  
  32.     { CODEC_ID_MPEG4SYSTEMS, 0x01 },  
  33.     { CODEC_ID_MPEG4SYSTEMS, 0x02 },  
  34.     { CODEC_ID_NONE      ,    0 },  
  35. };  

当objectTypeIndication为0x40时,为MPEG-4 Audio(MPEG-4 Audio generally is thought of as AAC but there is a whole framework of audio codecs that can go in MPEG-4 Audio including AAC, BSAC, ALS, CELP, and something called MP3On4),如果想更细分format为aac还是mp3,可以读取MP4DecSpecificDescr层data[0]的前五位,详细可以参考另一篇文章:

[mp4]The audio codec for mp4 atom
MP4DecSpecificDescr层(一般来说,该层在esds box中的偏移为objectTypeIndication+13,即esds box的data[24])的data为初始化解码器的私有数据,如aac音频的头信息,mpeg4视频的vos,vo等头信息。

[mp4]mp4文件中的esds box解析

esds box中主要是存放Element Stream Descriptors(ESDs),该box的前四个字节为version&flag,一般为0x 00 00 00 00; 从偏移第四个字节开...
  • ss0429
  • ss0429
  • 2013年01月01日 19:50
  • 4688

MP4文件格式详解

一、基本概念 1、 文件,由许多Box和FullBox组成。 2、 Box,每个Box由Header和Data组成。 3、 FullBox,是Box的扩展,Box结构的基础上在Header中增加...
  • wsk004321
  • wsk004321
  • 2014年01月26日 11:28
  • 797

软编码Flv 到Mp4 容器(四) fmp4 总览和基础讲解

https://github.com/332065255/flv2fmp4代码库首先约定几个定义 mp4容器,是由box组成 box分为Container box 和full boxContain...
  • g332065255
  • g332065255
  • 2017年05月17日 11:05
  • 826

MP4文件Boxes的层次结构

MP4文件的基本组成单元是box,也就是说MP4文件是由各种各样的box组成的,有parent box,还有children box。因此,这些boxes之间存在一定的层次关系,总结如下表所示:...
  • lyuan1314
  • lyuan1314
  • 2013年07月19日 13:23
  • 2358

MP4文件中如何寻找一个sample--MP4文件简单解析

晚上搜索MP4格式的文章。都是从上到下,从外到里,一层一层开拔各种的box,等到了真正感兴趣的boxer的时候,通常观看者已经累的老眼昏花,那么多的boxer。那么多的名字。怎么记得住呢? 我将从...
  • ddr77
  • ddr77
  • 2016年09月09日 11:37
  • 1130

【多媒体封装格式详解】---MP4【1】

MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在“ISO/IEC 14496-14”标准文件中定义的。 1.最小组成单元 BOX 像FLV的tag、MKV的EBML、ASF...
  • tx3344
  • tx3344
  • 2013年01月07日 10:54
  • 7972

mp4文件格式解析参考代码

这部分代码个人觉得还布整洁,因为没机会整理,所以前段时间删除了。一位网友请求重新发表,于是我在整理一下发上来了 //filename mp4_boxes.cpp #include ...
  • coloriy
  • coloriy
  • 2015年08月05日 13:30
  • 1324

MP4解析,包含moof

MP4解析块架构设 1介绍 1.1目的   Bem,BoxExtractor By Miracle,是MP4ISO 标准解析器。用于华为自研播放器PEPlayer项目组使用。   1.2术语...
  • zjp114695092
  • zjp114695092
  • 2014年05月31日 17:17
  • 4487

MP4文件格式详解——元数据moov(三)tref box

本次继续解析moov box,关于moov的解析推荐从我之前的博文《MP4文件格式详解——元数据moov(一)》看起。 moov     ...
  • dxpqxb
  • dxpqxb
  • 2014年12月30日 15:25
  • 1013

关于MP4文件格式解析

MP4 文件格式 综述 关键概念         MP4 文件格式中,所有的内容存在一个称为movie 的容器中。一个movie 可以由多个tracks 组成。每个track 就是一个随时间变化的...
  • hellofeiya
  • hellofeiya
  • 2013年07月09日 11:01
  • 10884
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MP4 esds box解析
举报原因:
原因补充:

(最多只允许输入30个字)