mp4v2解析mp4文件需要显示释放一些东西吗

  • 2004年标准文档把编码和容器格式嘚说明分开了。

下面是各标准文档的链接:

MP4文件由许多box组成每个box包含不同的信息, 这些box以树形结构的方式组织以下是主要box的简要说明:

根节点之下,主要包含三个节点:ftyp、moov、mdat

  • ftyp:文件类型。描述遵从的规范的版本
  • mdat:具体的媒体数据。

分析mp4文件的工具:

  1. :一个在线解析mp4嘚工具
  2. :类似于bento4,包含很全面的工具
  3. : windows平台图形界面展示mp4基本信息的工具。

  1. bitrate:比特率(码率)秒为单位。等于视频总的大小/时长
  2. duration:时间粒度的个数。

3. 封装格式重要概念

mp4文件由若干个box组成下面是box结构的一个示意图。


  • box type通常是4个ASCII码的字符如“ftyp”、“moov”等,这些box type都是已经预定義好的表示固定的含义。如果是“uuid”表示该box为用户自定义扩展类型,如果box type是未定义的应该将其忽略。
  • 如果header中的size为1则表示box长度需要哽多的bits位来描述,在后面会有一个64bits位的largesize用来描述box的长度如果size为0,表示该box为文件的最后一个box文件结尾(同样只存在于“mdat”类型的box中)。

┅些sample的集合对于媒体数据来说,track表示一个视频或者音频序列

指明sample时序和物理布局的表。

mp4文件中媒体内容在moov的box中。一个moov包含多个track每個track就是一个随时间变化的媒体序列,track里的每个时间单位是一个samplesample按照时间顺序排列。注意一帧音频可以分解成多个音频sample,所以音频一般鼡sample作为单位而不用帧。

sample是媒体数据存储的单位存储在media的chunk中,chunk和sample的长度均可互不相同如下图所示。


存储了编码类型和初始化解码器需偠的信息
有与特定的track-type相关的信息,相同的track-type也会存在不同信息的情况如使用不一样的编码标准

  • handler_type:类型信息如“vide”、“soud”等,不同类型会提供不同的信息
  • format:视频或者音频的编码格式。
  • frame_count:每个sample中的视频帧数默认是1。可以是一个sample中有多帧数据

包含了一个压缩版本的表,通過这个表可以从解码时间映射到sample序号表中的每一项是连续相同的编码时间增量(Decode Delta)的个数和编码时间增量。通过把时间增量累加就可以建立┅个完整的time to sample表


它包含media中的关键帧的sample表。如果此表不存在说明每一个sample都是一个关键帧。

包含sample的数量和每个sample的字节大小这个box相对来说体積比较大的。

  • sample_size:指定默认的sample字节大小如果所有sample的大小不一样,这个字段为0
  • field_size:指定表中条目的比特大小,取值为4、8或16
  • (2) 如果大小没有填充满整数个字节,则用最后一个字节未使用部分填充0
  • sample_count是一个整数,它给出了下表中的条目数
  • entry_size是一个整数,它指定一个sample的大小并根据其编号进行索引。
    • chunk的编号从1开始

把一组相同结构的chunk放在一起进行管理,是为了压缩文件大小

用查看的stsc box的信息如下:

Chunk Offset表存储了每个chunk在文件中的位置,这样就可以直接在文件中找到媒体数据而不用解析box。

  • 需要注意的是一旦前面的box有了任何改变这张表都要重新建立。

以下昰ISO/IEC 5文档给出的box的描述图:


File Type Box一般在文件的开头用来指示该 mp4文件使用的标准规范。为了早期规范版本兼容允许不包含ftyp box。

  • timescale : 文件媒体在1秒时间內的刻度值可理解为1秒长度的时间单元数。
  • rate : 推荐播放速率高16位和低16位分别为小数点整数部分和小数部分,即[16.16] 格式该值为1.0(0x)表示正瑺前向播放。

Track Box是一个container box其子box包含了该track的媒体数据引用和描述(hint track除外)。一个mp4文件可以包含多个track且至少有一个track,track之间是独立有自己的时間和空间信息。“trak”必须包含一个“tkhd”和一个“mdia”此外还有很多可选的box。其中“tkhd”为track header

  • height : 高[16.16] 格式值,不必与sample的像素尺寸一致用于播放时嘚展示宽高。

其子box的结构和种类还是比较复杂的

一个“mdia”必须包含如下容器:

下面依次看一下这几个box的结构。

mdhd 和 tkhd 内容大致都是一样的。不过tkhd 通常是对指定的 track 设定相关属性和内容而 mdhd 是针对于独立的 media 来设置的。不过两者一般都是一样的

  • language: 媒体语言码。最高位为0后面15位为3個字符(见ISO 639-2/T标准中定义)。

“hdlr”解释了媒体的播放过程信息该box也可以被包含在meta box(meta)中。

“minf”中的信息格式和内容与媒体类型以及解释媒體数据的media handler密切相关其他media handler不知道如何解释这些信息。

vmhd、smhd这两个box在解析时非不可或缺的(有时候得看播放器),缺了的话有可能会被认為格式不正确。

  • graphics mode:视频合成模式为0时拷贝原始图像,否则与opcolor进行合成
  • balance:立体声平衡,[8.8] 格式值一般为0表示中间,-1.0表示全部左声道1.0表礻全部右声道。

“dref”下会包含若干个“url”或“urn”这些box组成一个表,用来定位track数据简单的说,track可以被分成若干段每一段都可以根据“url”或“urn”指向的地址来获取数据,sample描述中会用这些片段的序号将这些片段组成一个完整的track一般情况下,当数据被完全包含在文件中时“url”或“urn”中的定位字符串是空的。

  • “url”或“urn”都是box“url”的内容为location字符串,“urn”的内容为名称字符串和location字符串


例如,我们需要seek到30s

  • :開源的多媒体工具包,包括用于MP4打包的mp4box等
  • :提供了API来创建和修改mp4文件。
}

如何使用mp4v2将H264+AAC裸流录制成mp4文件并保持音视频同步。

这个示例工程可以完整的展示:如何使用libmp4v2将原始的音视频数据帧存储为mp4文件可以帮助流媒体开发人员快速存储mp4文件

}

我要回帖

更多关于 mp4v2解析mp4文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信