mp4文件格式解析个人总结文档格式.docx
《mp4文件格式解析个人总结文档格式.docx》由会员分享,可在线阅读,更多相关《mp4文件格式解析个人总结文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
![mp4文件格式解析个人总结文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/ca779ca6-7289-4e5a-8a56-09b6cc098562/ca779ca6-7289-4e5a-8a56-09b6cc0985621.gif)
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必须包含ftypbox、moovbox、mdatbox。
Filetypebox(ftyp)用来储存文件类型的相关信息,Moviebox(moov)用来储存媒体的信息,是一个containerbox,
Mediadatabox(mdat)用来储存媒体的具体数据
3.3Moviebox(moov)
一个moviebox包含一个mvhdbox和若干个trakbox,比如audiotrakbox,vediotrakbox。
3.3.1MovieHeaderbox(mvhd)
mvmd具体结构如下:
字段
字节数
意义
boxsize
4
box大小
boxtype
box类型
version
1
box版本,0或1,一般为0。
(以下字节数均按version=0)
flags
3
creationtime
创建时间(相对于UTC时间1904-01-01零点的秒数)
modificationtime
修改时间
timescale
文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数
duration
该track的时间长度,用duration和timescale值可以计算track时长,比如audiotrack的timescale=8000,duration=560128,时长为70.016,videotrack的timescale=600,duration=42000,时长为70
rate
推荐播放速率,高16位和低16位分别为小数点整数部分和小数部分,即[16.16]格式,该值为1.0(0x00010000)表示正常前向播放
volume
2
与rate类似,[8.8]格式,1.0(0x0100)表示最大音量
reserved
10
保留位
matrix
36
视频变换矩阵
pre-defined
24
nexttrackid
下一个track使用的id号
3.3.2Trakbox
Trakbox必须包含一个tkhdbox和一个mediabox,此外还有很多可选的box:
①TrackHeaderbox(tkhd):
定义了一个track的特性,例如时间,空间和音量信息。
结构如下:
按位或操作结果值,预定义如下:
0x000001track_enabled,否则该track不被播放;
0x000002track_in_movie,表示该track在播放中被引用;
0x000004track_in_preview,表示该track在预览时被引用。
一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;
对于hinttrack,该值为0
trackid
id号,不能重复且不能为0
track的时间长度
8
layer
视频层,默认为0,值小的在上层
alternategroup
track分组信息,默认为0表示该track未与其他track有群组关系
[8.8]格式,如果为音频track1.0(0x0100)表示最大音量;
否则为0
width
宽
height
高,均为[16.16]格式值,与sample描述中的实际画面大小比值,用于播放时的展示宽高
②mediabox:
该box是一个包含一些track媒体数据信息box的containerbox。
3.4Mediabox
Mediabox主要包含mediaheaderbox(mdhd)、hdlrbox、minfbox。
3.4.1Mediaheaderbox(mdhd)
mediaheaderbox(mdhd)定义了整个movie的特性,例如timescale和duratio,具体结构如下:
language
媒体语言码。
最高位为0,后面15位为3个字符(见ISO639-2/T标准中定义)
3.4.2Hdlrbox
Hdlrbox解释了媒体的播放过程信息。
同时也指明了本trak类型,如:
vedio、autio、hint,具体结构如下:
handlertype
在mediabox中,该值为4个字符:
“vide”—videotrack
“soun”—audiotrack
“hint”—hinttrack
12
name
不定
tracktypename,以‘\0’结尾的字符串
3.4.3Minfbox
存储了解释该track的媒体数据的handler-specific的信息。
mediahandler用这些信息将媒体时间映射到媒体数据,并进行处理。
minf包含一个headerbox,一个DataInformationBox(dinf)和一个SampleTableBox(stbl):
①Headerbox定义颜色和图形模式信息
②dinfbox解释如何定位媒体信息
③stblbox包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。
利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。
3.5SampleTableBox(stbl)
SampleTableBox(stbl)包含:
sampledescriptionbox(stsd)、timetosamplebox(stts)、samplesizebox(stsz)、sampletochunkbox(stsc)、chunkoffsetbox(stco)、compositiontimetosamplebox(ctts)、syncsamplebox(stss)。
3.5.1SampleDescriptionBox(stsd)
boxheader和version字段后会有一个entrycount字段,根据entry的个数,每个entry会有type信息,如“vide”、“sund”等,根据type不同sampledescription会提供不同的信息,例如对于videotrack,会有“VisualSampleEntry”类型信息,对于audiotrack会有“AudioSampleEntry”类型信息。
视频的编码类型、宽高、长度,音频的声道、采样等信息都会出现在这个box中。
3.5.2TimeToSampleBox(stts)
stts存储了sample的duration,描述了sample时序的映射方法,我们通过它可以找到任何时间的sample。
stts可以包含一个压缩的表来映射时间和sample序号,用其他的表来提供每个sample的长度和指针。
表中每个条目提供了在同一个时间偏移量里面连续的sample序号,以及samples的偏移量。
递增这些偏移量,就可以建立一个完整的timetosample表。
3.5.3SampleSizeBox(stsz)
stsz定义了每个sample的大小,包含了媒体中全部sample的数目和一张给出每个sample大小的表。
这个box相对来说体积是比较大的。
3.5.4SampleToChunkBox(stsc)
用chunk组织sample可以方便优化数据获取,一个thunk包含一个或多个sample。
stsc中用一个表描述了sample与chunk的映射关系,查看这张表就可以找到包含指定sample的thunk,从而找到这个sample。
3.5.5SyncSampleBox(stss)
stss确定media中的关键帧。
对于压缩媒体数据,关键帧是一系列压缩序列的开始帧,其解压缩时不依赖以前的帧,而后续帧的解压缩将依赖于这个关键帧。
stss可以非常紧凑的标记媒体内的随机存取点,它包含一个sample序号表,表内的每一项严格按照sample的序号排列,说明了媒体中的哪一个sample是关键帧。
如果此表不存在,说明每一个sample都是一个关键帧,是一个随机存取点。
3.5.6ChunkOffsetBox(stco)
stco定义了每个thunk在媒体流中的位置。
位置有两种可能,32位的和64位的,后者对非常大的电影很有用。
在一个表中只会有一种可能,这个位置是在整个文件中的,而不是在任何box中的,这样做就可以直接在文件中找到媒体数据,而不用解释box。
需要注意的是一旦前面的box有了任何改变,这张表都要重新建立,因为位置信息已经改变了。