分类:
2012-11-20 14:07:57
目前MP4的概念被炒得很火,也很乱。最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准。随后MP4概念被转移到视频上,对应的是MPEG-4标准。而现在我们流行的叫法,多半是指能播放MPEG-4标准编码格式视频的播放器。但是这篇文章介绍的内容跟上面这些都无关,我们要讨论的是MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术 视听对象编码的第12部分:ISO 基本媒体文件格式(Information technology Coding of audio-visual objects Part 12: ISO base media file format)。ISO/IEC组织指定的标准一般用数字表示,ISO/IEC 14496即MPEG-4标准。
1、概述
2、Box
3、File Type Box(ftyp)
4、Movie Box(moov)
4.1 Movie Header Box(mvhd)
字段 |
字节数 |
意义 |
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的时间长度,用duration和time scale值可以计算track时长,比如audio track的time scale = 8000, duration = 560128,时长为70.016,video track的time scale = 600, duration = 42000,时长为70 |
rate |
4 |
推荐播放速率,高16位和低16位分别为小数点整数部分和小数部分,即[16.16] 格式,该值为1.0(0x00010000)表示正常前向播放 |
volume |
2 |
与rate类似,[8.8] 格式,1.0(0x0100)表示最大音量 |
reserved |
10 |
保留位 |
matrix |
36 |
视频变换矩阵 |
pre-defined |
24 |
|
next track id |
4 |
下一个track使用的id号 |
4.2 Track Box(trak)
4.2.1 Track Header Box(tkhd)
字段 |
字节数 |
意义 |
box size |
4 |
box大小 |
box type |
4 |
box类型 |
version |
1 |
box版本,0或1,一般为0。(以下字节数均按version=0) |
flags |
3 |
按位或操作结果值,预定义如下: 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 |
4 |
创建时间(相对于UTC时间1904-01-01零点的秒数) |
modification time |
4 |
修改时间 |
track id |
4 |
id号,不能重复且不能为0 |
reserved |
4 |
保留位 |
duration |
4 |
track的时间长度 |
reserved |
8 |
保留位 |
layer |
2 |
视频层,默认为0,值小的在上层 |
alternate group |
2 |
track分组信息,默认为0表示该track未与其他track有群组关系 |
volume |
2 |
[8.8] 格式,如果为音频track,1.0(0x0100)表示最大音量;否则为0 |
reserved |
2 |
保留位 |
matrix |
36 |
视频变换矩阵 |
width |
4 |
宽 |
height |
4 |
高,均为 [16.16] 格式值,与sample描述中的实际画面大小比值,用于播放时的展示宽高 |
4.2.2 Media Box(mdia)
4.2.2.1 Media Header Box(mdhd)
字段 |
字节数 |
意义 |
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 |
同前表 |
duration |
4 |
track的时间长度 |
language |
2 |
媒体语言码。最高位为0,后面15位为3个字符(见ISO 639-2/T标准中定义) |
pre-defined |
2 |
|
4.2.2.2 Handler Reference Box(hdlr)
字段 |
字节数 |
意义 |
box size |
4 |
box大小 |
box type |
4 |
box类型 |
version |
1 |
box版本,0或1,一般为0。(以下字节数均按version=0) |
flags |
3 |
|
pre-defined |
4 |
|
handler type |
4 |
在media box中,该值为4个字符: “vide”— video track “soun”— audio track “hint”— hint track |
reserved |
12 |
|
name |
不定 |
track type name,以‘\0’结尾的字符串 |
4.2.2.3 Media Information Box(minf)
4.2.2.3.1 Media Information Header Box(vmhd、smhd、hmhd、nmhd)
Video Media Header Box(vmhd)
字段 |
字节数 |
意义 |
box size |
4 |
box大小 |
box type |
4 |
box类型 |
version |
1 |
box版本,0或1,一般为0。(以下字节数均按version=0) |
flags |
3 |
|
graphics mode |
4 |
视频合成模式,为0时拷贝原始图像,否则与opcolor进行合成 |
opcolor |
2×3 |
{red,green,blue} |
Sound Media Header Box(smhd)
字段 |
字节数 |
意义 |
box size |
4 |
box大小 |
box type |
4 |
box类型 |
version |
1 |
box版本,0或1,一般为0。(以下字节数均按version=0) |
flags |
3 |
|
balance |
2 |
立体声平衡,[8.8] 格式值,一般为0,-1.0表示全部左声道,1.0表示全部右声道 |
reserved |
2 |
|
Hint Media Header Box(hmhd)
Null Media Header Box(nmhd)
4.2.2.3.2 Data Information Box(dinf)
字段 |
字节数 |
意义 |
box size |
4 |
box大小 |
box type |
4 |
box类型 |
version |
1 |
box版本,0或1,一般为0。(以下字节数均按version=0) |
flags |
3 |
|
entry count |
4 |
“url”或“urn”表的元素个数 |
“url”或“urn”列表 |
不定 |
|
4.2.2.3.3 Sample Table Box(stbl)
Sample Description Box(stsd)
Time To Sample Box(stts)
Sample Size Box(stsz)
Sample To Chunk Box(stsc)
Sync Sample Box(stss)
Chunk Offset Box(stco)
5、Free Space Box(free或skip)
6、Meida Data Box(mdat)