系列文章目录
MP4文件解析
文章目录
- 系列文章目录
- 前言
- 一、MP4文件的构成
- 二、MP4文件内部结构
- 三、结合实例
-
- 1、File Type Box(ftyp)
- 2、Movie Box(moov)
- 3、Video/AudioTrack Box
- 4、Free Space Box(free或skip)
- 5、Meida Data Box(mdat)
前言
最近在做的项目需要了解MP4的格式,于是就学习了一番,这里记录一下所学的知识。我们都知道MP4是一套用于音频、视频信息的压缩编码标准,也是我们日常生活中遇到最多的一种视频格式,最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准。随后MP4概念被转移到视频上,对应的是MPEG-4标准。
一、MP4文件的构成
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进行描述。
二、MP4文件内部结构
1.基本结构
其中,size指明了整个box所占用的大小,包括header部分。如果box很大(例如存放具体视频数据的mdat box),超过了uint32的最大数值,size就被设置为1,并用接下来的8位uint64来存放大小。
2.整体结构
三、结合实例
1、File Type Box(ftyp)
该box只有一个只能被包含在文件层,而不能被其他box包含,”ftyp”body一次包含一个32位的minor version(整数)和一个以32位(四个字符)为单位元素的数组compatible brands。这些都是用来指示文件级别的信息
2、Movie Box(moov)
该部分包含了文件媒体的metadata信息,“moov”是一个contanier box,具体内容由其子box诠释。同ftyp box一样该box有且只有一个,且制备包含在文件层,一般情况下moov会跟着ftyp出现。
一般情况下,“moov”中会包含一个“mvhd”和若干个“trak”其中“mvhd”作为header box,一般作为“moov”的第一个子box出现,。“trak”包含了一个track的相关信息,是一个contanier box
其中粉色部分为box header,橙色部分为mvhd
Movie header box(mvhd)结构如下:
“mvhd”的字节实例如下图,各字段已经用颜色区分开: