admin 管理员组文章数量: 887053
2024年1月10日发(作者:property和possession)
路漫漫其修远兮,吾将上下而求索 - 百度文库
目录
1.引言 .................................................................................................................... 1
4中一些概念详解 ........................................................................................ 1
4文件结构分析 ............................................................................................ 2
3.1box结构 .................................................................................................... 2
3.2MP4总体结构 .......................................................................................... 3
3.3Movie box(moov) ...................................................................................... 3
3.3.1Movie Header box(mvhd) .............................................................. 4
3.3.2Trak box .......................................................................................... 5
3.4Media box ................................................................................................. 6
3.4.1Media header box(mdhd) .............................................................. 6
3.4.2Hdlr box .......................................................................................... 7
3.4.3Minf box ......................................................................................... 8
3.5Sample Table Box(stbl) .............................................................................. 8
3.5.1Sample Description Box(stsd) ................................................... 8
3.5.2Time To Sample Box(stts) ......................................................... 9
3.5.3Sample Size Box(stsz) ............................................................... 9
3.5.4Sample To Chunk Box(stsc) ....................................................... 9
3.5.5Sync Sample Box(stss) .............................................................. 9
3.5.6Chunk Offset Box(stco) ............................................................. 9
11
MP4文件格式解析总结
1.引言
MP4是一种常见的多媒体容器格式,对应MPEG-4标准,这种容器格式非常全面开放,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都可以。在MP4文件中,媒体的描述信息与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列。同时,MP4也支持流媒体,MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式。
4中一些概念详解
MP4文件格式中,所有的内容存在一个称为movie的容器中。一个movie可以由多个tracks组成。每个track就是一个随时间变化的媒体序列, track里的每个时间单位是一个sample,它可以是一帧视频,或者一段连续的压缩音频。sample按照时间顺序排列。其中一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。MP4文件格式的定义里面,用sample表示一个时间帧或者数据单元。
几个连续的sample就构成了一个chunk。
11
4文件结构分析
3.1box结构
BOXBoxHeaderBoxDataBoxHeaderUNIT32UNIT32UNIT64sizetypelargesize
MP4由一个一个box组成,每个box由一个boxheader和boxdata组成,boxheader又分为3部分:
①4字节的size:表示这个box的大小
②4字节的type:表示这个box的类型
③8字节的largesize
如果整个box的大小超出了4字节能表示的最大值,那么size=1,同时,box的大小就储存在largesize中。
22
3.2MP4总体结构
MP4ftyp boxmoov boxmdat boxMoov boxmvhd boxAutio track boxMedia track boxother track boxTrak boxtkhd boxmedia boxMedia boxMdhd boxHdlr boxMinf boxMinf boxHeader boxDinf boxStbl boxStbl boxStsd boxStts boxStsz boxStsc boxStco boxCtts boxStss box
Mp4必须包含ftyp box、moov box、mdat box。File type box(ftyp)用来储存文件类型的相关信息,Movie box(moov)用来储存媒体的信息,是一个container box,
Media data box(mdat)用来储存媒体的具体数据
3.3Movie box(moov)
Moov boxmvhd boxAutio track boxMedia track boxother track box
一个movie box包含一个mvhd box和若干个trak box,比如audio trak
box,vedio trak box。
33
3.3.1Movie Header box(mvhd)
mvmd具体结构如下:
字段
box size
box type
version
flags
creation time
modification time
字节数
4
4
1
3
4
4
意义
box大小
box类型
box版本,0或1,一般为0。(以下字节数均按version=0)
创建时间(相对于UTC时间1904-01-01零点的秒数)
修改时间
文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数
该track的时间长度,用duration和time scale值可以计算track时长,比如audio track的time scale = 8000, duration = 560128,时time scale 4
duration 4
长为70.016,video track的time scale = 600, duration = 42000,时长为70
推荐播放速率,高16位和低16位分别为小数点整数部分和小数部rate 4
分,即[16.16] 格式,该值为1.0(0x00010000)表示正常前向播放
volume
reserved
matrix
pre-defined
next track id
2
10
36
24
4
与rate类似,[8.8] 格式,1.0(0x0100)表示最大音量
保留位
视频变换矩阵
下一个track使用的id号
44
3.3.2Trak box
Trak boxtkhd boxmedia box
Trak box必须包含一个tkhd box和一个media box,此外还有很多可选的box: ①Track Header box(tkhd): 定义了一个track的特性,例如时间,空间和音量信息。
结构如下:
字段
box size
box type
version
字节数
4
4
1
意义
box大小
box类型
box版本,0或1,一般为0。(以下字节数均按version=0)
按位或操作结果值,预定义如下:
0x000001 track_enabled,否则该track不被播放;
0x000002 track_in_movie,表示该track在播放中被引用;
0x000004 track_in_preview,表示该track在预览时被引用。
一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;对于hint
track,该值为0
creation time
modification time
track id
4
4
4
创建时间(相对于UTC时间1904-01-01零点的秒数)
修改时间
id号,不能重复且不能为0
flags 3
55
reserved
duration
reserved
layer
alternate group
volume
reserved
matrix
width
4
4
8
2
2
2
2
36
4
保留位
track的时间长度
保留位
视频层,默认为0,值小的在上层
track分组信息,默认为0表示该track未与其他track有群组关系
[8.8]格式,如果为音频track1.0(0x0100)表示最大音量;否则为0
保留位
视频变换矩阵
宽
高,均为 [16.16] 格式值,与sample描述中的实际画面大小比值,用于播放时的展示宽高
height 4
②media box:该box是一个包含一些track媒体数据信息box的container box。
3.4Media box
Media boxMdhd boxHdlr boxMinf 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,具体结构如下:
字段 字节数 意义
66
box size 4 box大小
box type 4 box类型
version 1 box版本,0或1,一般为0。(以下字节数均按version=0)
flags 3
creation time 4 创建时间(相对于UTC时间1904-01-01零点的秒数)
修改时间
modification time 4
time scale 4 文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数
duration 4 track的时间长度
language 2 媒体语言码。最高位为0,后面15位为3个字符(见ISO 639-2/T标准中定义)
pre-defined 2
3.4.2Hdlr box
Hdlr box解释了媒体的播放过程信息。同时也指明了本trak类型,如:vedio、autio、hint,具体结构如下:
字段
box size
字节数
4
意义
box大小
box type 4 box类型
version 1 box版本,0或1,一般为0。(以下字节数均按version=0)
flags 3
pre-defined 4
在media box中,该值为4个字符:
handler type 4
“vide”— video track
77
“soun”— audio track
“hint”— hint track
reserved 12
不定
name track type name,以‘0’结尾的字符串
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)
Stbl boxStsd boxStts boxStsz boxStsc boxStco boxCtts boxStss box
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”类型信息,88
对于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包含一个或多个sample。stsc中用一个表描述了sample与chunk的映射关系,查看这张表就可以找到包含指定sample的thunk,从而找到这个sample。
3.5.5Sync Sample Box(stss)
stss确定media中的关键帧。对于压缩媒体数据,关键帧是一系列压缩序列的开始帧,其解压缩时不依赖以前的帧,而后续帧的解压缩将依赖于这个关键帧。stss可以非常紧凑的标记媒体内的随机存取点,它包含一个sample序号表,表内的每一项严格按照sample的序号排列,说明了媒体中的哪一个sample是关键帧。如果此表不存在,说明每一个sample都是一个关键帧,是一个随机存取点。
3.5.6Chunk Offset Box(stco)
stco定义了每个thunk在媒体流中的位置。位置有两种可能,32位的和64位的,后者对非常大的电影很有用。在一个表中只会有一种可能,这个位置是在整个文件中的,而不是在任何box中的,这样做就可以直接在文件中找到媒体数据,而不用解释box。需要注意的是一旦前面的box有了任何改变,这张表都要重新建立,因为位置信息已经改变了。
99
版权声明:本文标题:mp4文件格式解析--个人总结 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704871275h465162.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论