没有合适的资源?快使用搜索试试~ 我知道了~
MP4文件格式详细分析
4星 · 超过85%的资源 107 下载量 59 浏览量
2010-02-08
18:21:02
上传
评论
收藏 2.26MB PDF 举报
温馨提示
试读
62页
一份非常详细的讲解MP4文件的格式。希望对想了解MP4文件格式的朋友有帮助!
资源推荐
资源详情
资源评论
[mp4 文件格式]mp4 文件格式系列 1 - 综述
wqyuwss 发表于 2007-3-2 18:32:00
Overview and Introduction
Core Concepts
MP4 文件格式中,所有的内容存在一个称为 movie 的容器中。一个 movie 可以由多个 tracks 组成。每个 track 就是一个随时
间变化的媒体序列,例如,视频帧序列。track 里的每个时间单位是一个 sample,它可以是一帧视频,或者音频。sample 按照
时间顺序排列。注意,一帧音频可以分解成多个音频 sample,所以音频一般用 sample 作为单位,而不用帧。MP4 文件格式的
定义里面,用 sample 这个单词表示一个时间帧或者数据单元。每个 track 会有一个或者多个 sample descriptions。track 里
面的每个 sample 通过引用关联到一个 sample description。这个 sample descriptions 定义了怎样解码这个 sample,例如
使用的压缩算法。
与其他的多媒体文件格式不同的是,MP4 文件格式经常使用几个不同的概念,理解其不同是理解这个文件格式的关键。
这个文件的物理格式没有限定媒体本身的格式。例如,许多文件格式将媒体数据分成帧,头部或者其他数据紧紧跟随每一帧视
频,!!!TODO(例如 MPEG2)。而 MP4 文件格式不是如此。
文件的物理格式和媒体数据的排列都不受媒体的时间顺序的限制。视频帧不需要在文件按时间顺序排列。这就意味着如果文件中
真的存在这样的一些帧,那么就有一些文件结构来描述媒体的排列和对应的时间信息。
MP4 文件中所有的数据都封装在一些 box 中(以前叫 atom)。所有的 metadata(媒体描述元数据),包括定义媒体的排列和时
间信息的数据都包含在这样的一些结构 box 中。MP4 文件格式定义了这些这些 box 的格式。Metadata 对媒体数据(例如,视
频帧)引用说明。媒体数据可以包含在同一个的一个或多个 box 里,也可以在其他文件中,metadata 允许使用 URLs 来引用其
他的文件,而媒体数据在这些引用文件中的排列关系全部在第一个主文件中的 metadata 描述。其他的文件不一定是 MP4 文件
格式,例如,可能就没有一个 box。
有很多种类的 track,其中有三个最重要,video track 包含了视频 sample;audio track 包含了 audio sample;hint track
稍有不同,它描述了一个流媒体服务器如何把文件中的媒体数据组成符合流媒体协议的数据包。 如果文件只是本地播放,可以
忽略 hint track,他们只与流媒体有关系。
Physical structure of the media
Box 定义了如何在 sample table 中找到媒体数据的排列。这包括 data reference(数据引用), the sample size table, the sam
ple to chunk table, and the chunk offset table. 这些表就可以找到 track 中每个 sample 在文件中的位置和大小。
data reference 允许在第二个媒体文件中找到媒体的位置。这样,一部电影就可以由一个媒体数据库中的多个不同文件组成,
而且不用把它们全部拷贝到另一个新文件中。例如,对视频编辑就很有帮助。
为了节约空间,这些表都很紧凑。另外,interleave 不是 sample by sample,而是把单个 track 的几个 samples 组合到一起,
然后另外几个 sample 又进行新的组合,等等。一个 track 的连续几个 sample 组成的单元就被称为 chunk。每个 chunk 在文件
中有一个偏移量,这个偏移量是从文件开头算起的,在这个 chunk 内,sample 是连续存储的。
这样,如果一个 chunk 包含两个 sample,第二个 sample 的位置就是 chunk 的偏移量加上第一个 sample 的大小。chunk offset
table 说明了每个 chunk 的偏移量,sample to chunk table 说明了 sample 序号和 chunk 序号的映射关系。
注意 chunk 之间可能会有死区,没有任何媒体数据引用到这部分区域,但是 chunk 内部不会有这样的死区。这样,如果在节目
编辑的时候,不需要一些媒体数据,就可以简单的留在那里,而不用引用,这样就不用删除它们了。类似的,如果媒体存放在第
二个文件中,但是格式不同于 MP4 文件格式,这个陌生文件的头部或者其他文件格式都可以简单忽略掉。
Temporal structure of the media
文件中的时间可以理解为一些结构。电影以及每个 track 都有一个 timescale。它定义了一个时间轴来说明每秒钟有多少个 ticks。
合理的选择这个数目,就可以实现准确的计时。一般来说,对于 audio track,就是 audio 的 sampling rate。对于 video track,
情况稍微复杂,需要合理选择。例如,如果一个 media TimeScale 是 30000,media sample durations 是 1001,就准确的定
义了 NTSC video 的时间格式(虽然不准确,但一般就是 29.97),and provide 19.9 hours of time in 32 bits.
Track 的时间结构受一个 edit list 影响,有两个用途:全部电影中的一个 track 的一部分时间片断变化(有可能是重用);空白
时间的插入,也就是空的 edits。特别注意的是如果一个 track 不是从节目开头部分开始,edit list 的第一个 edit 就一定是空的 e
dit。
每个 track 的全部 duration 定义在文件头部,这就是对 track 的总结,每个 sample 有一个规定的 duration。一个 sample 的准确
描述时间,也就是他的时间戳(time-stamp)就是以前的 sample 的 duration 之和。
Interleave
文件的时间和物理结构可以是对齐的,这表明媒体数据在容器中的物理顺序就是时间顺序。另外,如果多个 track 的媒体数据包
含在同一个文件中,这个媒体数据可以是 interleaved。一般来说,为了方便读取一个 track 的媒体数据,同时保证每个表紧凑,
以一个合适的时间间隔(例如 1 秒)做一次 interleave,而不是 sample by sample。这样就可以减少 chunk 的数据,减小 chu
nk offset table 的大小。
Composition
如果多个 audio track 包含在同一个文件中,他们有可能被混合在一起进行播放,并且由一个总 track volume 和左/右 balance
控制。
类似的,video track 也可以根据各自的层次序列号(从后向前)和合成模式进行混合。另外,每个 track 可以用一个 matrix 进
行变换,也可以全部电影用一个 matrix 进行变换。这样既可以进行简单操作(例如放大图像,校正 90º 旋转),也可以做更复
杂的操作(例如 shearing, arbitrary rotation)。
这个混合方法只是非常简单,是一个缺省的方法,MPEG4 的另一份文档会定义更强有力的方法(例如 MPEG-4 BIFS)。
[mp4 文件格式]mp4 文件格式系列 2 - mp4 文件例子
wqyuwss 发表于 2007-3-6 22:22:00
Darwin Streaming Server 里面有一些很好的工具,可以帮助分析 mp4 文件格式。
但是如果可以自己逐字节的 parse 文件,可以更好的了解 mp4 文件格式。这里我就逐字节的分析文件结构。文件例子是 DSS 里面包含的 sampl
e_100kbit.mp4
[mp4 文件格式]mp4 文件格式系列 3 - Movie Atom - MOOV
wqyuwss 发表于 2007-5-1 3:18:00
Movie atom 定义了一部电影的数据信息。它的类型是'moov',是一个容器 atom,至少必须包含三种 atom 中的一种—movie header
atom('mvhd'), compressed movie atom('cmov')和 reference movie atom ('rmra')。没有压缩的 movie header atom 必须至少包含 movi
e header atom 和 reference movie atom 中的一种。也可以包含其他的 atom,例如一个 clipping atom ('clip'),一个或几个 track a
toms ('trak'),一个 color table atom ('ctab'),和一个 user data atom ('udta')。其中 movie header atom 定义了整部电影的 time scal
e,duration 信息以及 display characteristics。track atom 定义了电影中一个 track 的信息。Track 就是电影中可以独立操作的媒体
单位,例如一个声道就是一个 track。
Compressed movie atoms 和 reference movie atoms 不太使用,不在本文讨论范围内。本文主要讨论 uncompressed movie atoms。
字段
长度(字节)
描述
尺寸
4
这个 movie header atom 的字节数
类型
4
moov
以下是实际的 sample_100kbit.mp4 的部分字节,可以看到结果是
主要包含四个子 atom,movie header atom(mvhd), 一个 audio track atom(trak),一个 video track atom(trak)。
[mp4 文件格式]mp4 文件格式系列 4 - Movie Header Atoms - MVHD
wqyuwss 发表于 2007-5-1 3:26:00
Movie header atom 定义了整个 movie 的特性,例如 time scale 和 duration,它的 atom 类型是'mvhd'。
剩余61页未读,继续阅读
xiangyong2008
- 粉丝: 101
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页