文件格式解析
目前 MP4 的概念被炒得很火,也很乱。最开始 MP4 指的是音频(MP3 的升级版),
即 MPEG-2 AAC 标准。随后 MP4 概念被转移到视频上,对应的是 MPEG-4 标准。而现
在我们流行的叫法,多半是指能播放 MPEG-4 标准编码格式视频的播放器。但是这篇文
章介绍的内容跟上面这些都无关,我们要讨论的是 MP4 文件封装格式,对应的标准为
ISO/IEC 14496-12,即信息技术V视听对象编码的第 12 部分:ISO基本媒体文件格式
(Information technology Coding of audio-visual objects Part 12: ISO base
media )le format)。ISO/IEC 组织指定的标准一般用数字表示,ISO/IEC 14496 即
MPEG-4 标准。
MP4 视频文件封装格式是基于 QuickTime 容器格式定义的,因此参考 QuickTime
的格式定义对理解 MP4 文件格式很有帮助。MP4 文件格式是一个十分开放的容器,几乎
可以用来描述所有的媒体结构,MP4 文件中的媒体描述与媒体数据是分开的,并且媒体数
据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。
同时,MP4 也支持流媒体。MP4 目前被广泛用于封装 h.264 视频和 AAC 音频,是高清
视频的代表。
现在我们就来看看 MP4 文件格式到底是什么样的。
1、概述
MP4 文件中的所有数据都装在 box(QuickTime 中为 atom)中,也就是说 MP4 文
件由若干个 box 组成,每个 box 有类型和长度,可以将 box 理解为一个数据对象块。box
中可以包含另一个 box,这种 box 称为 container box。一个 MP4 文件首先会有且只有
一个“ftyp”类型的 box,作为 MP4 格式的标志并包含关于文件的一些信息;之后会有且
只有一个“moov”类型的 box(Movie Box),它是一种 container box,子 box 包含了
媒体的 metadata 信息;MP4 文件的媒体数据包含在“mdat”类型的 box(Midia Data
Box)中,该类型的 box 也是 container box,可以有多个,也可以没有(当媒体数据全
部引用其他文件时),媒体数据的结构由 metadata 进行描述。
下面是一些概念:
track表示一些 sample 的集合,对于媒体数据来说,track 表示一个视频或音频序
列。
hint track这个特殊的 track 并不包含媒体数据,而是包含了一些将其他数据 track
打包成流媒体的指示信息。
sample对于非 hint track 来说,video sample 即为一帧视频,或一组连续视频帧,
audio sample 即为一段连续的压缩音频,它们统称 sample。对于 hint track,sample
定义一个或多个流媒体包的格式。
sample table指明 sampe 时序和物理布局的表。
chunk一个 track 的几个 sample 组成的单元。
在本文中,我们不讨论涉及 hint 的内容,只关注包含媒体数据的本地 MP4 文件。下图
为一个典型的 MP4 文件的结构树。
评论0
最新资源