2024年6月7日发(作者:)

MP4

文件格式

综述

关键概念

MP4文件格式中,所有的内容存在一个称为movie的容器中。一个movie可以由多个

tracks组成。每个track就是一个随时间变化的媒体序列,例如,视频帧序列。track里的每个时

间单位是一个

sample

,它可以是一帧视频,或者音频。

sample

按照时间顺序排列。注意,一帧

音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。MP4文件格式

的定义里面,用sample这个单词表示一个时间帧或者数据单元。每个track会有一个或者多个

sampledescriptions。track里面的每个sample通过引用关联到一个sampledescription。这

个sampledescriptions定义了怎样解码这个sample,例如使用的压缩算法。

与其他的多媒体文件格式不同的是,MP4文件格式经常使用几个不同的概念,理解其不同

是理解这个文件格式的关键。

这个文件的物理格式没有限定媒体本身的格式。例如,许多文件格式将媒体数据分成帧,

头部或者其他数据紧紧跟随每一帧视频,!!!TODO(例如MPEG2)。而MP4文件格式不是如

此。

文件的物理格式和媒体数据的排列都不受媒体的时间顺序的限制。视频帧不需要在文件按

时间顺序排列。这就意味着如果文件中真的存在这样的一些帧,那么就有一些文件结构来描述媒体

的排列和对应的时间信息。

MP4文件中所有的数据都封装在一些box中(以前叫atom)。所有的metadata(媒体描

述元数据),包括定义媒体的排列和时间信息的数据都包含在这样的一些结构

box

中。MP4文件格

式定义了这些这些box的格式。Metadata对媒体数据(例如,视频帧)引用说明。媒体数据可以

包含在同一个的一个或多个box里,也可以在其他文件中,metadata允许使用URLs来引用其他

的文件,而媒体数据在这些引用文件中的排列关系全部在第一个主文件中的metadata描述。其他

的文件不一定是MP4文件格式,例如,可能就没有一个box。

k

有很多种类的track,其中有三个最重要,videotrack包含了视频sample;audiotractrack

包含了audiosample;hinttrack稍有不同,它描述了一个流媒体服务器如何把文件中的媒体数据

组成符合流媒体协议的数据包。如果文件只是本地播放,可以忽略hinttrack,他们只与流媒体有

关系。

媒体文件的物理结构

Box定义了如何在sampletable中找到媒体数据的排列。这包括datareference(数据引

用),thesamplesizetable,thesampletochunktable,andthechunkoffsettable.这些表就可以找

到track中每个sample在文件中的位置和大小。

datareference允许在第二个媒体文件中找到媒体的位置。这样,一部电影就可以由一个

媒体数据库中的多个不同文件组成,而且不用把它们全部拷贝到另一个新文件中。例如,对视频编

辑就很有帮助。

为了节约空间,这些表都很紧凑。另外,interleave不是samplebysample,而是把单个

track的几个samples组合到一起,然后另外几个sample又进行新的组合,等等。一个track的连

续几个sample组成的单元就被称为chunk。每个chunk在文件中有一个偏移量,这个偏移量是从

文件开头算起的,在这个chunk内,sample是连续存储的。