MP4文件格式解析-----个人总结讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1.引言 (1)
2.MP4中一些概念详解 (1)
3.MP4文件结构分析 (1)
3.1box结构 (1)
3.2MP4总体结构 (2)
3.3Movie box(moov) (3)
3.3.1Movie Header box(mvhd) (3)
3.3.2Trak box (4)
3.4Media box (6)
3.4.1Media header box(mdhd) (6)
3.4.2Hdlr box (7)
3.4.3Minf box (7)
3.5Sample Table Box(stbl) (8)
3.5.1Sample Description Box(stsd) (8)
3.5.2Time To Sample Box(stts) (8)
3.5.3Sample Size Box(stsz) (8)
3.5.4Sample To Chunk Box(stsc) (8)
3.5.5Sync Sample Box(stss) (9)
3.5.6Chunk Offset Box(stco) (9)
MP4文件格式解析总结
1.引言
MP4是一种常见的多媒体容器格式,对应MPEG-4标准,这种容器格式非常全面开放,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都可以。在MP4文件中,媒体的描述信息与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列。同时,MP4也支持流媒体,MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式。
2.MP4中一些概念详解
MP4文件格式中,所有的内容存在一个称为movie的容器中。一个movie可以由多个tracks组成。每个track就是一个随时间变化的媒体序列,track里的每个时间单位是一个sample,它可以是一帧视频,或者一段连续的压缩音频。sample按照时间顺序排列。其中一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。MP4文件格式的定义里面,用sample表示一个时间帧或者数据单元。
几个连续的sample就构成了一个chunk。
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)用来储存媒体的信息,是一个container 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)
3.3.2Trak box
Trak box必须包含一个tkhd box和一个media box,此外还有很多可选的box:
①Track Header box(tkhd): 定义了一个track的特性,例如时间,空间和音量信息。
②media box:该box是一个包含一些track媒体数据信息box的container box。
Media box主要包含media header box(mdhd)、hdlr box、minf box。
3.4.1Media header box(mdhd)
media header box(mdhd)定义了整个movie 的特性,例如time scale 和duratio,
Hdlr box解释了媒体的播放过程信息。同时也指明了本trak类型,如:vedio、
3.4.3Minf box
存储了解释该track的媒体数据的handler-specific的信息。media handler用这些信息将媒体时间映射到媒体数据,并进行处理。minf包含一个header box,一个Data Information 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)、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”类型信息,对于audio track会有“AudioSampleEntry”类型信息。
视频的编码类型、宽高、长度,音频的声道、采样等信息都会出现在这个box 中。
3.5.2Time To Sample Box(stts)
stts存储了sample的duration,描述了sample时序的映射方法,我们通过它可以找到任何时间的sample。stts可以包含一个压缩的表来映射时间和sample 序号,用其他的表来提供每个sample的长度和指针。表中每个条目提供了在同一个时间偏移量里面连续的sample序号,以及samples的偏移量。递增这些偏移量,就可以建立一个完整的time to sample表。
3.5.3Sample Size Box(stsz)
stsz定义了每个sample的大小,包含了媒体中全部sample的数目和一张给出每个sample大小的表。这个box相对来说体积是比较大的。
3.5.4Sample To Chunk Box(stsc)
用chunk组织sample可以方便优化数据获取,一个thunk包含一个或多个