12期_视频封装格式MP4(1)

2023-09-20  本文已影响0人  萧修

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、

上一篇 下一篇

猜你喜欢

热点阅读