MP4文件格式简单解析

Mp4文件中的所有数据都装在box中,就是说,你可以简单的理解为MP4文件就是一个个box组成的。

那么,在Mp4文件中,Box主要有三种:

1 Ftyp box(有且只有一个):作为Mp4文件的标志,并包含关于文件的一些信息

2 Moov box(有且只有一个):包含媒体的metadata

3 Mdat box(可以0个,可以多个):包含媒体数据

 

那么,什么是box?

box是由header和body组成,header中主要存该box的size和type

还有一个概念是container box,就是box中包含子box的,这个box就叫做container box

 

所以,严谨的讲,mp4文件就是由一个个有可能有嵌套的box组成的。

 

那么,mp4中主要的三种box:ftyp,moov和mdat到底有什么区别?

Ftyp box(File Type Box)

Header:

Body:包含4字节major brand,4字节minor version和compatible brands数组(以4字节为单位)

 

Moov box(Movie box)

Header:

Body:一个mvhd和若干个trak(trak也是container box)

mvhd应该作为首个子box出现,其中包含了许多信息如推荐播放速率,下一个track使用的id等

 

Track

Header

Body:包含tkhd和mdia(也是container box)

 

Mdia:含一个mdhd,一个hdlr和一个minf

Mdhd(media header box):类型,大小等信息

Hdlr(handler reference box):解释媒体播放过程信息

Minf(media information box):存储了许多track媒体数据的handler-special信息

 

Mdat box(media data box)

存储媒体数据

 

简单的图就是

 

 

 

MP4文件格式简单解析

mdat中主要存放的是ES:最小的单位是sample。

那什么是sample?

video sample即为一帧或者一组连续视频帧,audio sample即为一段连续的音频。