IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    nginx模块开发(46)—MP4模块分析

    cjhust发表于 2016-03-14 14:42:12
    love 0

    MP4(MPEG-4 Part 14)是一种常见的多媒体容器格式,它是在“ISO/IEC 14496-14”标准文件中定义的,属于MPEG-4的一部分,是“ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)”标准中所定义的媒体格式的一种实现,后者定义了一种通用的媒体文件结构标准。

    MP4是一种描述较为全面的容器格式,被认为可以在其中嵌入任何形式的数据,各种编码的视频、音频等都不在话下,不过我们常见的大部分的MP4文件存放的AVC(H.264)或MPEG-4(Part 2)编码的视频和AAC编码的音频。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式,包括:M4V、 3GP、F4V等。

            MP4是由一个个“box”组成的,大box中存放小box,一级嵌套一级来存放媒体信息,box的基本结构是:

    nginx模块开发(46)—MP4模块分析 - cjhust - 我一直在努力 

    其中,size指明了整个box所占用的大小,包括header部分。如果box很大(例如存放具体视频数据的mdat box),超过了uint32的最大数值,size就被设置为1,并用接下来的8位uint64来存放大小。

      一个mp4文件有可能包含非常多的box,在很大程度上增加了解析的复杂性,这个网页上http://mp4ra.org/atoms.html记录了一些当前注册过的box类型。还好大部分mp4文件没有那么多的box类型,下图就是一个简化了的,常见的mp4文件结构:

    nginx模块开发(46)—MP4模块分析 - cjhust - 我一直在努力
     

    atom索引表

    名称

    说明

    ftyp

     

     

     

     

     

    file type,文件类型

    moov

     

     

     

     

     

    metadata container,元数据信息

     

    mvhd

     

     

     

     

    moive header,文件的总体信息如时长等

     

    trak

     

     

     

     

    track container,存放音频/视频的容器

     

     

    tkhd

     

     

     

    track header,track的总体信息如时长、宽高等

     

     

    mdia

     

     

     

    track media information container

     

     

     

    mdhd

     

     

    Media header,定义timescale,trak需要通过timescale换成成真实时间

     

     

     

    hdlr

     

     

    Handler,表明track的类型,指明是video、audio或hint

     

     

     

    minf

     

     

    media information container

     

     

     

     

    stbl

     

    sample table box,存放时间/偏移的映射关系表,数据在子box中

     

     

     

     

     

    stsd

    sample descriptions

     

     

     

     

     

    stts

    时间和sample的映射表

     

     

     

     

     

    stsc

    sample和chunk的映射表

     

     

     

     

     

    stsz

    每个sample的size

     

     

     

     

     

    stz2

     

     

     

     

     

    ctts

    时间合成偏移表

     

     

     

     

     

    stss

    关键帧列表

     

     

     

     

     

    stco

    chunk的offset

     

     

     

     

     

    co64

    mdat

     

     

     

     

     

    具体的媒体数据



沪ICP备19023445号-2号
友情链接