1.MP4
MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式,是MPEG-4系列的成员之一
2.文件结构
MP4由一层层的嵌套Box(atom)组成
[ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ]
3.常见Box
类型 | 名称 | 描述 |
---|---|---|
加粗样式 | ftyp | File Type |
moov | Movie Box | 视频元数据(时长、轨道、帧率等) |
mdat | Media Data Box | 真正的视频/音频数据 |
mvhd | Movie Header | 在 moov 中,记录全局时长、时间基等 |
trak | Track Box | 每个音视频轨道的容器(如 video、audio) |
tkhd | Track Header | 描述轨道的基本信息(id、宽高等) |
mdia | Media Box | 媒体信息容器 |
minf | Media Information | 媒体详细信息,如音频格式、视频帧率等 |
stbl | Sample Table | 每帧的偏移、大小、时间戳信息 |
moof | Movie Fragment | 流式播放中分片播放时的元数据(fragmented MP4 用) |
free / skip | Padding Box | 空的填充区域,无实际内容 |
4.常见box介绍
1.ftyp box
告知视频播放器/编辑器等MP4的格式和兼容标准
[ size ][ type ][ major_brand ][ minor_version ][ compatible_brands… ]
字段名 | 大小 | 说明 |
---|---|---|
size | 4 字节 | 总长度(含 header) |
type | 4 字节 | Box 类型,值为 ftyp |
major_brand | 4 字节 | 主标识,例如 isom, mp41, mp42 |
minor_version | 4 字节 | 小版本号 |
compatible_brands | N 字节 | 一个或多个 4 字节字符串,表示兼容的播放环境 |
2.moov box
定义一个MP4文件中的数据信息,类型是moov,包含
mvhd标签:Move Header Atom,存放为压缩过的影片信息头容器
cmov标签:Compressed Movie Atom,压缩过的电影信息容器
rmra标签:Reference Movie Atom, 参考电影信息容器
3.track box
track容器定义了媒体文件中的一个track信息,一个媒体文件中可以包含多个track,每个track之间互相独立,具有自己的时间和空间占用信息。主要用于
包含媒体数据的引用和描述
包含modifier track信息
流媒体协议的打包信息
字段 | 长度 | 说明 |
---|---|---|
size | 4字节 | 描述atom大小 |
类型 | 4字节 | tkhd,mdia,clip,matt等 |
3.tkhd box
字段 | 长度/字节 | 描述 |
---|---|---|
尺寸 | 4 | 这个 Atom 的字节数 |
类型 | 4 | tkhd |
版本 | 1 | 这个 Atom 的版本 |
标志 | 3 | 有效的标志分别如下: • 0x0001:track 生效 • 0x0002:track 被用于 Movie 预览中 • 0x0004:track 被用于 Movie 的 Poster 中 |
生成时间 | 4 | Movie Atom 的起始时间(基准时间是 1904-1-1 0:00 AM) |
修改时间 | 4 | Movie Atom 的修订时间(基准时间是 1904-1-1 0:00 AM) |
Track ID | 4 | 唯一标志该 track 的一个非零值 |
保留 | 4 | 这里为 0 |
Duration | 4 | track 的 Duration,在电影的时间戳中。与 track 的 edts list 进行的时间戳会建立关联,然后进行时间戳计算,得到对应的 track 的播放时间坐标 |
保留 | 8 | 这里为 0 |
Layer | 2 | 视频层,默认为 0,值小的在上层 |
Alternate group | 2 | track 分组信息,默认为 0,表示该 track 未与其他 track 有群组关系 |
音量 | 2 | 播放此 track 的音量。1.0 为正常音量 |
保留 | 2 | 这里为 0 |
矩阵结构 | 36 | 该矩阵定义了此 track 中两个坐标空间的映射关系 |
4.hdlr box
描述媒体流的播放过程
字段 | 长度 / 字节 | 描述 |
---|---|---|
尺寸 | 4 | 这个 Atom 的字节数 |
类型 | 4 | hdlr |
版本 | 1 | 这个 Atom 的版本 |
标志 | 3 | 这里为 0 |
Handle 的类型 | 4 | handler 的类型。当前只有两种类型: • mhlr :media handlers• dhlr :data handlers |
Handle 的子类型 | 4 | media handler 或 data handler 的类型。 如果 component type 是 mhlr ,那么这个字段定义的是媒体数据类型,如:• vide :video 数据• soun :sound 数据如果 component type 是 dhlr ,那么这个字段定义的是数据引用类型,如:• alis :文件的别名 |
保留 | 12 | 保留字段,默认为 0 |
Component name | 可变 | 这个 component 的名字,也就是生成此 media 的 media handler。该字段的长度可以为 0 |