MP4文件格式解析之结合实例分析

本文详细介绍了MP4文件的结构及组成部分,包括基本结构、整体结构、实例分析等内容。重点讲解了FileTypeBox、MovieBox、TrackBox等核心Box的功能与组成。

文章目录


一、前言

之前一直接触MP4格式的文件,但一直没有静下心来仔细研究,最近有时间,总结记录一下,顺便也查漏补缺一下。我们首先清楚的是,MP4 也称为 MPEG-4 第 14 部分,是继承 MPEG-4 第 12 部分的 ISO 基础媒体文件格式并略作扩展而来,定义于标准 ISO/IEC 14496-14 中,是一种标准的数字多媒体容器格式,广泛用于包装视频和音频数据流、海报、字幕和元数据等。目前流行的视频编码格式 AVC/H264 定义在 MPEG-4 Part 10。


二、MP4格式概览

1、基本结构

MP4 文件的数据都是封装在一个又一个名为 Box 的单元中。MP4 中最基本的单元就是 Box,它内部是通过一个一个独立的 box 拼接而成的。每个 box 分为 Header 和 Data。其中 Header 部分包含了 box 的类型和大小,Data 包含了子 box 或者数据。一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息;之后会有且只有一个“moov”类型的box(Movie Box),它是一种container box,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在“mdat”类型的box(Midia Data Box)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。


2、整体结构

下图是一个典型 MP4 文件的基本结构:

Box 有不同的类型,有着不同的数据结构,Box 中还可以包含其他 Box。Box 的类型详见下表(其中 * 表示当父 Box 存在时,则必须包含该 Box):


三、结合实例

先贴一些张我们要分析的MP4文件的mediainfo图:

再来一张整体结构图:

 注意此文件的层次结构,方便后续分析理解。


1、File Type Box(ftyp)

File Type Box,一般在文件的开始位置,描述的文件的版本、兼容协议等。该box有且只有1个,并且只能被包含在文件层,而不能被其他box包含。ftyp 相当于mp4 的纲领性说明。即,告诉demuxer它的基本解码版本,兼容格式。简而言之,就是用来告诉客户端,该 MP4 的使用的解码标准。所以,ftyp 都是放在 MP4 的开头。

它的格式为:

aligned(8) class FileTypeBox
   extends Box(‘ftyp’) {
   unsigned int(32)  major_brand;
   unsigned int(32)  minor_version;
   unsigned int(32) compatible_brands[];
}

上面的字段一律都是放在 data 字段中(参考,box 的描述)。

  • major_brand: 因为兼容性一般可以分为推荐兼容性和默认兼容性。这里 major_brand 就相当于是推荐兼容性。一般而言都是使用 isom 这个万金油即可。如果是需要特定的格式,可以自行定义。
  • minor_version: 指最低兼容版本。
  • compatible_brands: 和 major_brand 类似,通常是针对 MP4 中包含的额外格式,比如,AVC,AAC 等相当于的音视频解码格式。

 按照上文所述,每个box的header前 4 个字节 00 00 00 20 表示该 Box 的 size,接着 4 个字节 66 74 79 70 是该 Box 的 type,即 ftyp。接下来 4 个字节 69 73 6F 6D 是主 brand,表示该文件所遵循的标准规格,这里是 isom,即遵循 ISO Base Media File Format。接下来的 4 个字节 00 00 02 00 表示的是这个 Box 格式的版本号。接下来的 16 个字节则是兼容的 compatible brands,即该文件兼容的其他标准规格,这里是 isomiso2avc1mp41


2、Movie Box(moov)

该部分包含了文件媒体的metadata信息,“moov”是一个contanier box,具体内容由其子box诠释。同ftyp box一样该box有且只有一个,且只包含在文件层,一般情况下moov会跟着ftyp出现。moov Box 可以说是 MP4 文件中最重要的 Box,一般播放器的实现都需要读取到 moov 的数据才能开始播放流程。

  一 般情况下,“moov”中会包含1个“mvhd”和若干个“trak”。其中“mvhd”为header box,一般作为“moov”的第一个子box出现(对于其他container box来说,header box都应作为首个子box出现)。“trak”包含了一个track的相关信息,是一个container box。

2.1 Movie Header Box(mvhd)

Movie Header Box,记录整个媒体文件的描述信息,如创建时间、修改时间、时间度量标尺、可播放时长等。

字段 字节数 意义
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
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值