MP4文件结构
MP4文件中所有数据都封装在Box中 (QuickTime中为atom),即MP4是由若干个Box组成的,每个Box还可以包含其他的Box这样的Box称为container box.一个MP4文件首先会有且只有一个ftyp类型的box,作为MP4格式的的标志并包含关于文件的一些信息;之后会有且只有一个MOOV类型的Box它是一种container box,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在mdat类型的box中,该类型的box也是container box,可以有多个也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。
Box中的字节为网络字节序,也就是大端字节序(Big-Endian),即32位的4字节数据存储方式为高字节在内存的低端。每一个Box都由Header和Data组成,Header包含了整个Box的长度size和类型type,size指明了整个box所占用的大小,包括header部分。如果box很大,超过了UINT32的最大数值,size就被设置为1,就在header之后附加UINt64 largesize来存放大小整个box的大小,其中UINT32可表示的最大数值为4G,即Box超过4G之后需要将size设置为1,并使用largesize表示box大小。其中BoxData是Box的实际数据,可以是纯数据也可以是更多的子Box。
- box header结构:
aligned(8) class Box (unsigned int(32) boxtype,
optional unsigned int(8)[16] extended_type) {
unsigned int(32) size;
unsigned int(32) type = boxtype;
if (size==1) {
unsigned int(64) largesize;
} else if (size==0) {
// box extends to end of file
}
if (boxtype==‘uuid’) {
unsigned int(8)[16] usertype = extended_type;
}
}
我们可以很清楚的看到box的header结构,这里不做过多赘述.如果用户拓展使用拓展类型,在MP4文件里面称之为UUID,将type部分设置为UUID,在header末尾追加上拓展的类型名称即可。
- ftyp box
一个MP4文件有且只有一个ftyp box,ftyp box除了包含Header以外,在其Data部分会给出该MP4文件的版本信息,以及兼容的协议等。
3 Movie Header Box(mvhd):
aligned(8) class MovieHeaderBox extends FullBox(‘mvhd’, version, 0) {
if (version==1) {
unsigned int(64) creation_time;
unsigned int(64) modification_time;
unsigned int(32) timescale;
unsigned int(64) duration;
} else { // version==0
unsigned int(32) creation_time;
unsigned int(32) modification_time;
unsigned int(32) timescale;
unsigned int(32) duration;
}
template int(32) rate = 0x00010000; // typically 1.0
template int(16) volume = 0x0100; // typically, full volume
const bit(16) reserved = 0;
const unsigned int(32)[2] reserved = 0;
template int(32)[9] matrix =
{ 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };
// Unity matrix
bit(32)[6] pre_defined = 0;
unsigned int(32) next_track_ID;
}
mvhd box的结构如上所示,其中包含了具体的文件信息,创建时间,修改时间等.
关于MP4文件Box标准可以去参考ISO_IEC_14496-12,我这里使用的是c068960_ISO_IEC_14496-12_2015.pdf
附上MP4文件解码程序:http://download.youkuaiyun.com/detail/yuanquanzheng/9713899