MP4由许多Box/FullBox组成,每个box包含了Header和Data。
FullBox是Box的扩展,其包含的Header增加了version(1byte)和flags(3byte)。
Header
Header包含size(4byte)和type(4byte)。
size用来描述整个box的长度,如果size为1,则表示box长度需要更多bits位来描述,在后面会有一个8字节的largesize用来描述box的长度,如果size为0,表示box为文件的最后一个box
type描述box的类型,通常为4个ASCII码的字符如“fytp”,“moov”等,这些box type都是已经预定义好的,表示固定的含义,如果是“udid",表示该box为用户自定义扩展类型,如果box type是未定义的,应该将其忽略。
1byte=bit
Data
负载数据
Box数据定义
Box数据格式定义
aligned(8) class Box (unsigned int(32) boxtype optional unsigned[8][16] extended_type) {
unsigned int (32) size;
unsigned int (32) type = boxtype;
if (size == 1) {
unsigned int(64) = largsize;
} else if (size == 0) {
//box extends to end of file box的最后一个
}
if (boxtype == "udid") {
unsigned int[8][16] = usertype = extended_type;
}
}
FullBox数据格式定义
aligned(8) class FullBox (unsigned int(32) boxtype ,
unsigned int(8) v,bit(32)f) extends Box(xoxtype) {
unsigned int (8) version = v;
bit(64) flags = f;
}
Box有不同的类型
File Type Box解析
ftyp即File Type Box,包含文件的类型、版本、兼容信息等,在一个MP4文件中,该Box有且只有一个,并且需要尽可能放在文件最开始的位置
ftyp数据格式定义如下
aligned(8) class FileTypeBox extends Box('ftyp') {
unsigned int(32) major_brand;
unsigned int(32) minor_version;
unsigned int(32) compatible_brands[];//
}
以一段MP4文件分析ftyp的数据定义,ftyp是Box的扩展,前面会占据8个字节的头部,往下连续的4个字节是major_brand,以此类推
MP4文件从上向下排序为ftyp、moov、
网友评论