简介
MP4 或称 MPEG-4 第14部分(MPEG-4 Part 14)是一种标准的数字多媒体容器格式。由国际标准化组织(ISO)和国际电工委员会(IEC)下属的”动态图像专家组“(Moving Picture Experts Group,即MPEG)制定。
MP4 文件格式是一个十分开放的容器,几乎可以用来描述所有的媒体结构,MP4 文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。MP4 也支持流媒体。MP4目前被广泛用于封装 h.264/h.265 视频和 AAC 音频,是高清视频的代表。
历史演进
- 2001年,Apple 的 QuickTime 格式,
.qt
和.mov
后缀名。 - 2001年,MPEG-4 Part1,把基于 QuickTime 的 box 布局的容器格式添加到了 MPEG-4 标准。
- 2004年,标准文档把编码和容器格式的说明分开了。
MPEG-4 Part12,定义了容器格式通用的 box 结构,即 ISO 媒体文件格式(ISO base media file format)。
MPEG-4 Part14,基于 Part12 进行了细化,定义了用于存储 MPEG-4 内容的容器格式,即.mp4
格式。
容器格式解析
下图是从在线解析 MP4 工具基于H.265 编码的 MP4 文件生成的 Tree View,基于下图来解释 MP4 容器内部结构(以下简称容器)。
- 容器中所有数据是由若干个 box(QuickTime 中为
atom
)组成的。可以将 box 理解为一个数据对象块。 - 容器首先会有且只有一个
ftyp
类型的 box,作为 MP4 格式的标志,并包含一些文件的信息。之后会有且只有一个moov
(Movie box)类型的 box,子容器中包含了媒体的 metadata 信息。 - 容器中的媒体数据包含在
mdat
(Midia data box)类型的 box 中,可以没有(媒体数据全部引用其他文件时)或有多个。
ftyp
包括32位的 major_brand,一个32位的 minor_version 和一个以32位为单位的 compatible_brands,这些用来指示文件应用级别信息。moov
包含了文件媒体的 metadata 信息,“moov”中会包含1个“mvhd”和若干个“trak”。其中“mvhd”为header box,一般作为“moov”的第一个子 box 出现(对于其他 container box 来说,header box 都应作为首个子 box 出现)。“trak”包含了一个 track 的相关信息,是一个 container box。下图为部分“moov”的字节实例,其中红色部分为 box header,绿色为“mvhd”,黄色为一部分“trak”。
moov 字节实例
mvhd
结构表
trak
表示一些 sample 的集合,对于媒体数据来说表示一个视频或音频序列。tkhd(Track Header Box)
track 数据信息mdia(Media Box)
媒体数据信息,mdia 定义了 track 媒体类型以及 sample 数据,描述 sample 信息。一般 mdia 包含一个 mdhd(Media Header Box),一个 hdlr(Handler Reference Box)和一个 minf(Media Information Box)minf
中的文件解析:vmhd(Video Media Header Box),dinf(Data Information Box)解释如何定位媒体信息。stbl(Sample Table Box)sample 是媒体数据存储的单位,存储在 media 的 chunk 中,chunk 和sample 的长度均可互不相同,如下图所示。
包含了关于 track 中 sample 所有时间和位置的信息,以及 sample 的编解码等信息。
free
无关紧要的内容,删除后不会产生任何影响
MP4容器格式脑图:
下一步
接下来让我们来了解下容器格式AVI