MP4是一种封装格式,全名为MPEG-4,文件中的所有数据都装在box中,也就是说MP4文件由若干个box组成,每个box有类型和长度,并且box之间可以相互嵌套。
每个box的结构都一致,如下图所示,box由head、body组成,head中4字节的size大小包括box header和box body整个box的大小,4字节的type一般为4个字符,其可以是“ftyp”、“moov”等,这些box type都是已经预定义好的,分别表示固定的意义,如果是“uuid”,表示该box为用户扩展类型。如果box type是未定义的,应该将其忽略。
上图片节选自:https://www.jianshu.com/p/529c3729f357(重点推荐这篇博客,里边有MP4标准文件的连接、以及推荐的开源软件)
一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息;之后会有且只有一个“moov”类型的box(Movie Box),它是一种container box,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在“mdat”类型的box(Midia Data Box)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。
box有很多的种类,里边存在包含关系,一部分种类box是必须的,另一部分是可能不需要的
上图是box众多类型中较为重要的类型,借鉴自:https://blog.csdn.net/fireroll/article/details/80711664,https://blog.csdn.net/dragoo1/article/details/49659473中有全部种类的表格图。
常见box类型结构图:(https://blog.csdn.net/NB_vol_1/article/details/58071879)
mp4info软件可以直接读取MP4文件,将其数据组织情况完整展示