1、3.MP4文件结构分析3.1box结构MP4由一个一个box组成,每个box由一个boxheader和boxdata组成,boxheader又分为3部分: 4字节的size:表示这个box的大小 4字节的type:表示这个box的类型8字节的largesize如果整个box的大小超出了4字节能表示的最大值,那么size=1,同时,box的大小就储存在largesize中。3.2MP4总体结构Mp4必须包含ftyp box、moov box、mdat box。File type box(ftyp)用来储存文件类型的相关信息,Movie box(moov)用来储存媒体的信息,是一个containe
2、r box,Media data box(mdat)用来储存媒体的具体数据3.3Movie box(moov)一个movie box包含一个mvhd box和若干个trak box,比如audio trak box,vedio trak box。3.3.1Movie Header box(mvhd)mvmd具体结构如下:字段字节数意义box size4box大小box typebox类型version1box版本,0或1,一般为0。(以下字节数均按version=0)flags3creation time创建时间(相对于UTC时间1904-01-01零点的秒数)modification tim
3、e修改时间time scale文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数duration该track的时间长度,用duration和time scale值可以计算track时长,比如audio track的time scale = 8000, duration = 560128,时长为70.016,video track的time scale = 600, duration = 42000,时长为70rate推荐播放速率,高16位和低16位分别为小数点整数部分和小数部分,即16.16 格式,该值为1.0(0x00010000)表示正常前向播放volume2与rate类似,8.
4、8 格式,1.0(0x0100)表示最大音量reserved10保留位matrix36视频变换矩阵pre-defined24next track id下一个track使用的id号3.3.2Trak boxTrak box必须包含一个tkhd box和一个media box,此外还有很多可选的box: Track Header box(tkhd): 定义了一个track的特性,例如时间,空间和音量信息。结构如下:按位或操作结果值,预定义如下:0x000001 track_enabled,否则该track不被播放;0x000002 track_in_movie,表示该track在播放中被引用;0x
5、000004 track_in_preview,表示该track在预览时被引用。一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;对于hint track,该值为0track idid号,不能重复且不能为0track的时间长度8layer视频层,默认为0,值小的在上层alternate grouptrack分组信息,默认为0表示该track未与其他track有群组关系8.8格式,如果为音频track1.0(0x0100)表示最大音量;否则为0width宽height高,均为 16.16 格式值
6、,与sample描述中的实际画面大小比值,用于播放时的展示宽高media box:该box是一个包含一些track媒体数据信息box的container box。3.4Media boxMedia box主要包含media header box(mdhd)、hdlr box、minf box。3.4.1Media header box(mdhd)media header box(mdhd)定义了整个movie 的特性,例如time scale 和duratio,具体结构如下:language媒体语言码。最高位为0,后面15位为3个字符(见ISO 639-2/T标准中定义)3.4.2Hdlr b
7、oxHdlr box解释了媒体的播放过程信息。同时也指明了本trak类型,如:vedio、autio、hint,具体结构如下:handler type在media box中,该值为4个字符:“vide” video track“soun” audio track“hint” hint track12name不定track type name,以0结尾的字符串3.4.3Minf box存储了解释该track的媒体数据的handler-specific的信息。media handler用这些信息将媒体时间映射到媒体数据,并进行处理。minf包含一个header box,一个Data Informa
8、tion Box (dinf)和一个Sample Table Box (stbl):Header box定义颜色和图形模式信息dinf box解释如何定位媒体信息stbl box包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。3.5Sample Table Box(stbl) Sample Table Box (stbl)包含:sample description box(stsd)、time to sample box(stts)、sample size box(stsz)、
9、sample to chunk box(stsc)、chunk offset box(stco)、composition time to sample box(ctts)、sync sample box(stss)。3.5.1Sample Description Box(stsd) box header和version字段后会有一个entry count字段,根据entry的个数,每个entry会有type信息,如“vide”、“sund”等,根据type不同sample description会提供不同的信息,例如对于video track,会有“VisualSampleEntry”类型信息
10、,对于audio track会有“AudioSampleEntry”类型信息。 视频的编码类型、宽高、长度,音频的声道、采样等信息都会出现在这个box中。3.5.2Time To Sample Box(stts) stts存储了sample的duration,描述了sample时序的映射方法,我们通过它可以找到任何时间的sample。stts可以包含一个压缩的表来映射时间和sample序号,用其他的表来提供每个sample的长度和指针。表中每个条目提供了在同一个时间偏移量里面连续的sample序号,以及samples的偏移量。递增这些偏移量,就可以建立一个完整的time to sample表。
11、3.5.3Sample Size Box(stsz) stsz定义了每个sample的大小,包含了媒体中全部sample的数目和一张给出每个sample大小的表。这个box相对来说体积是比较大的。3.5.4Sample To Chunk Box(stsc) 用chunk组织sample可以方便优化数据获取,一个thunk包含一个或多个sample。stsc中用一个表描述了sample与chunk的映射关系,查看这张表就可以找到包含指定sample的thunk,从而找到这个sample。3.5.5Sync Sample Box(stss) stss确定media中的关键帧。对于压缩媒体数据,关键
12、帧是一系列压缩序列的开始帧,其解压缩时不依赖以前的帧,而后续帧的解压缩将依赖于这个关键帧。stss可以非常紧凑的标记媒体内的随机存取点,它包含一个sample序号表,表内的每一项严格按照sample的序号排列,说明了媒体中的哪一个sample是关键帧。如果此表不存在,说明每一个sample都是一个关键帧,是一个随机存取点。3.5.6Chunk Offset Box(stco) stco定义了每个thunk在媒体流中的位置。位置有两种可能,32位的和64位的,后者对非常大的电影很有用。在一个表中只会有一种可能,这个位置是在整个文件中的,而不是在任何box中的,这样做就可以直接在文件中找到媒体数据,而不用解释box。需要注意的是一旦前面的box有了任何改变,这张表都要重新建立,因为位置信息已经改变了。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1