mp4结构

1. mp4

1.1. 简介

  • MP4的全称:MPEG4-14,一种是用MPEG4多媒体档案格式,文件的后缀名“.MP4”。

  • 最开始MP4是指音频(MP3的升级),即MPEG2 AAC标准。随后MP4的概念被转移到视频上,对应的是MPEG4。

  • 现在MP4文件格式适应各种媒体数据,可以在平台和终端上播放。同时MP4文件可以用来描述几乎所有的媒体结构。

  • 是一种面向对象的,以节点为基础的树形存储数据的文件结构。它采用了QT文件的基本格式 。

  • 优点

    • MP4文件可以在各种平台和终端使用常用的播放器上播放。
    • MP4文件格式扩展性比加强,几乎可以用来描述所有的媒体结构。
    • MP4文件所需的空间更小。
    • MP4文件的meta data 和media data可以分为两个文件存放。
    • MP4文件不仅可以在本地播放,而且可以通过RTP/RTCP等流化协议将MP4的音视频数据进行流化,在网络上进行点播。
    • MP4的媒体描述信息比较多,各种信息比较全。
    • MP4文件支持两个以上音频流或者视频流存储。
  • 缺点

    • MP4文件结构比较复杂,增加了编程处理的难度。
    • hint track 和 media track 耦合度高。
    • 先写完子box,才能确定父box的相关信息,在实时存储时,一旦发生异常文件损坏。
    • MP4文件不易修复。
    • 非线编软件不能直接编辑MP4文件。
  • ISO/IEC 14496标准,ISO/IEC 14496是MPEG专家组制定的MPEG-4标准,分为多个部分(仍在更新)。参考:https://en.wikipedia.org/wiki/Category:ISO/IEC_14496

    • 第一部分(ISO/IEC 14496-1):系统:描述视频和音频数据流的控制、同步以及混合方式(即混流Multiplexing,简写为MUX)。
    • 第二部分(ISO/IEC 14496-2):视频:定义一个对各种视觉信息(包括自然视频、静止纹理、计算机合成图形等等)的编解码器。(例如XviD编码就属于MPEG-4 Part 2)
    • 第三部分(ISO/IEC 14496-3):音频:定义一个对各种音频信号进行编码的编解码器的集合。包括高级音频编码(Advanced Audio Coding,缩写为AAC)的若干变形和其他一些音频/语音编码工具。
    • 第四部分(ISO/IEC 14496-4):一致性:定义对本标准其他的部分进行一致性测试的程序。
    • 第五部分(ISO/IEC 14496-5):参考软件:提供用于演示功能和说明本标准其他部分功能的软件。
    • 第六部分(ISO/IEC 14496-6):多媒体传输集成框架(DMIF for Delivery Multimedia Integration Framework)
    • 第七部分(ISO/IEC 14496-7):优化的参考软件:提供对实现进行优化的例子(这里的实现指的是第五部分)。
    • 第八部分(ISO/IEC 14496-8):在IP网络上传输:定义在IP网络上传输MPEG-4内容的方式。
    • 第九部分(ISO/IEC 14496-9):参考硬件:提供用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。
    • 第十部分(ISO/IEC 14496-10):高级视频编码或称高级视频编码(Advanced Video Coding,缩写为AVC):定义一个视频编解码器(codec)。AVC和XviD都属于MPEG-4编码,但由于AVC属于MPEG-4 Part 10,在技术特性上比属于MPEG-4 Part2的XviD要先进。另外,它和ITU-T H.264标准是一致的,故又称为H.264。
    • 第十二部分(ISO/IEC 14496-12):基于ISO的媒体文件格式:定义一个存储媒体内容的文件格式。moof定义在这里。
    • 第十三部分(ISO/IEC 14496-13):知识产权管理和保护(IPMP for Intellectual Property Management and Protection)拓展。
    • 第十四部分(ISO/IEC 14496-14):MPEG-4文件格式:定义基于第十二部分的用于存储MPEG-4内容的视频文件格式。
    • 第十五部分(ISO/IEC 14496-15):AVC文件格式:定义基于第十二部分的用于存储第十部分的视频内容的文件格式。
    • 第十六部分(ISO/IEC 14496-16):动画框架扩展(AFX : Animation Framework eXtension)。
    • 第十七部分(ISO/IEC 14496-17):同步文本字幕格式。
    • 第十八部分(ISO/IEC 14496-18):字体压缩和流式传输(针对开放字体格式Open Font Format)。
    • 第十九部分(ISO/IEC 14496-19):合成材质流(Synthesized Texture Stream)。
    • 第二十部分(ISO/IEC 14496-20):简单场景表示(LASeR for Lightweight Scene Representation。
    • 第二十一部分(ISO/IEC 14496-21):用于描绘(Rendering)的MPEG-J拓展。
    • 第二十二部分(ISO/IEC 14496-22):开放字体格式(Open Font Format)。
    • 第二十三部分(ISO/IEC 14496-23):符号化音乐表示(Symbolic Music Representation)。
    • 第二十四部分(ISO/IEC 14496-24):音频与系统交互作用(Audio and systems interaction)。
    • 第二十五部分(ISO/IEC 14496-25):3D图形压缩模型(3D Graphics Compression Model)。
    • 第二十六部分(ISO/IEC 14496-26):音频一致性检查:定义测试音频数据与ISO/IEC 14496-3是否一致的方法(Audio conformance)。
    • 第二十七部分(ISO/IEC 14496-27):3D图形一致性检查:定义测试3D图形数据与ISO/IEC 14496-11:2005, ISO/IEC 14496-16:2006, ISO/IEC 14496-21:2006,和ISO/IEC 14496-25:2009是否一致的方法(3D Graphics conformance)。
    • qtff-2001:QuickTime file format;

MP4是在“ISO/IEC 14496-14”标准文件中定义的一种多媒体容器格式,它是MPEG4 (ISO/IEC 14496)标准的一部分。是“ISO/IEC 14496-12(MPEG-4 Part 12 ISO base media file format)”标准中所定义的媒体格式的一种实现。

  • 概念

    • track 表示一些sample的集合,对于媒体数据来说,表示一个视频或者音频序列
    • sample 对于video track来说,sample为一帧视频图像,或者一组连续的视频帧。对应audio sample,为一段压缩的音频。不可能有两个或者多个sample具有相同的时间戳。
    • chunk 一个track的几个连续sample组成的单元称为一个chunk,同一chunk内的sample是连续的。
  • 结构

    • MP4文件中的数据主要分成两部分:meta data和media data。这两种数据在MP4文件中是分开进行存储的 。
      • media data实际的音视频编码数据或者采样数据,例如视频帧,或者一个音频sample。 解码的入口单元
      • Meta data元数据用于描述media data
    • MP4文件的基本数据存储单元。在QuickTime中称之为Atom。MP4文件中所有的数据都封装在Box中,也就是说MP4文件是由若干个Box组成。
    • 每一个Box除了它本身的数据以外,还包含Box的大小和类型信息。Box中数据采用big-endian(network)进行存储。
    • MP4文件,由许多 Box 和 FullBox 组成。
    • Box,每个 Box 由 Header 和 Data 组成。
    • FullBox,是 Box 的扩展,Box 结构的基础上在 Header 中增加 8bits version 和 24bits flags。
    • Header,包含了整个 Box 的长度 size 和类型 type。
      • 当 size==0 时,代表这是文件中最后一个 Box;
      • 当 size==1 时,意味着 Box 长度需要更多 bits 来描述,在后面会定义一个 64bits 的 largesize 描述 Box 的长度;
      • 当 type 是 uuid 时,代表 Box 中的数据是用户自定义扩展类型。
    • Data,是 Box 的实际数据,可以是纯数据也可以是更多的子 Boxes。
    • 当一个 Box 的 Data 中是一系列子 Box 时,这个 Box 又可成为 Container Box。
    • 最主要的box是moov,视频元数据

Box的结构用伪代码表示如下

aligned(8) class Box (unsigned int(32) boxtype,optional unsigned int(8)[16] extended_type)   
{
    { // Header
        unsigned int(32) size;   
        unsigned int(32) type = boxtype;   
        if (size==1) {   
            unsigned int(64) largesize;   
        } else if (size==0) {   
            // box extends to end of file   
        }   
        if (boxtype==‘uuid’) {   
            unsigned int(8)[16] usertype = extended_type;   
        } 
    }
    char* pData;
}

请添加图片描述

文件基本结构描述图(打对勾的标识必须具备的box,不可省略)

精简版本

  • ftyp √ 文件类型,内容固定
  • moov √ 元数据metadata的信息box
    • mvhd √ moov头信息,包含时长(不准确)
    • trak √ 流数据容器,文件有多个track(video/audio/hint等)
      • tkhd √ track header 关于track的信息,包括时长、宽高
      • mdia √ 媒体box,包含媒体详细信息,描述track的媒体类型和sample data
        • mdhd √ media header 媒体信息综述,时长,采样率等
        • hdlr √ 媒体的播放过程信息,定义具体类型:video/audio/hint
        • minf √ media information 容器
          • vmhd video media header , overall information (video track only)
          • smhd sound media header , overall information (sound track only)
          • stbl √ sample table box, sample所有时间和位置的信息,以及sample的编解码等信息。利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置
            • stsd √ sample descriptions 详细的编码信息和解码初始化信息
              • mp4a aac
              • avc1 h264
              • esds mpeg4
              • hvcc h265
            • stts √ pts映射表,(decoding) time-to-sample
            • ctts dts映射表,(composition) time to sample
            • stsc √ sample/chunk映射表,sample-to-chunk, partial data-offset information
            • stsz sample大小,sample size (framing)
            • stz2 sample大小,compact sample sizes (framing)
            • stco √ 每个chunk在文件中的位置,chunk offset, partial data-offset information
            • co64 每个chunk在文件中的位置,64-bit chunk offset
  • mdat media data container 可以有多个,也可以没有,用来存储媒体数据。

复杂版本

  • ftyp √ 文件类型,内容固定
  • pdin progressive download information
  • moov √ 元数据metadata的信息box
    • mvhd √ moov头信息,包含时长(不准确)
    • trak √ 流数据容器,文件有多个track(video/audio/hint等)
      • tkhd √ track header 关于track的信息,包括时长、宽高
      • tref 定义tracks之间的关联关系,定义本身这个track如何关联到其他的track上
      • edts edit list container
        • elst an edit list
      • mdia √ 媒体box,包含媒体详细信息,描述track的媒体类型和sample data
        • mdhd √ media header 媒体信息综述,时长,采样率等
        • hdlr √ 媒体的播放过程信息,定义具体类型:video/audio/hint
        • minf √ media information 容器
          • vmhd video media header , overall information (video track only)
          • smhd sound media header , overall information (sound track only)
          • hmhd hint media header, overall information (hint track only)
          • nmhd Null media header, overall information (some tracks only)
          • dinf √ media information 定位box,通过url来指定数据(数据可以不在本文件内)
            • dref √ url,指定数据位置,当数据被完全包含在文件中时,“url”或“urn”中的定位字符串是空的
          • stbl √ sample table box, sample所有时间和位置的信息,以及sample的编解码等信息。利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置
            • stsd √ sample descriptions 详细的编码信息和解码初始化信息
              • mp4a
                • esds
              • avc1 h264
              • esds mpeg4
              • hvcc h265
            • stts √ pts映射表,(decoding) time-to-sample
            • ctts dts映射表,(composition) time to sample
            • stsc √ sample/chunk映射表,sample-to-chunk, partial data-offset information
            • stsz sample大小,sample size (framing)
            • stz2 sample大小,compact sample sizes (framing)
            • stco √ 每个chunk在文件中的位置,chunk offset, partial data-offset information
            • co64 每个chunk在文件中的位置,64-bit chunk offset
            • stss 这个box确定media中的关键帧,如果此表不存在,说明每一个sample都是一个关键帧,是一个随机存取点。
            • stsh shadow sync sample table
            • padb sample padding bits
            • stdp sample degradation priority
            • sdtp independent and disposable samples
            • sbgp sample-to-group
            • sgpd sample group description
            • subs sub-sample information
    • mvex movie extends box
      • mehd movie extends header box
      • trex √ track extends defaults
    • ipmc IPMP Control Box
  • moof movie fragment
    • mfhd √ movie fragment header
    • traf track fragment
      • tfhd √ track fragment header
      • trun track fragment run
      • sdtp independent and disposable samples
      • sbgp sample-to-group
      • subs sub-sample information
  • mfra movie fragment random access
    • tfra track fragment random access
    • mfro √ movie fragment random access offset
  • mdat media data container 可以有多个,也可以没有,用来存储媒体数据。
  • free free space “free”中的内容是无关紧要的,可以被忽略。该box被删除后,不会对播放产生任何影响。
  • skip free space
    • udta user-data 声明一些和它的container box或者media data相关的用户信息,用户信息也是通过box的形式来表现。
      • cprt copyright etc.
  • meta metadata
    • hdlr √ handler, declares the metadata (handler) type
    • dinf data information box, container
      • dref data reference box, declares source(s) of metadata items
    • ipmc IPMP Control Box
    • iloc item location
    • ipro item protection
      • sinf protection scheme information box
        • frma original format box
        • imif IPMP Information box
        • schm scheme type box
        • schi scheme information box
    • iinf item information
    • xml XML container
    • bxml binary XML container
    • pitm primary item reference
    • fiin file delivery item information
      • paen partition entry
        • fpar file partition
        • fecr FEC reservoir
      • segr file delivery session group
      • gitn group id to name
      • tsel track selection
  • meco additional metadata container
    • mere metabox relation

1.2. ftyp

  • File Type Box 该 box 有且只有1个,并且只能被包含在文件层,而不能被其他box包含。
  • 该box应该被放在文件的最开始,指示该MP4文件应用的相关信息。
  • 类型为“ftyp”
字段字节数意义实例
box size4box大小00 00 00 18
box type4box类型66 74 79 70
major brand46D 70 34 32
minor version400 00 00 01
compatible brands4*n6D 70 34 32 6D 70 34 31

1.3. moov

  • 该box包含了文件媒体的 metadata 信息,“moov” 是一个 container box,具体内容信息由子 box 诠释。
  • 该box有且只有一个,且只被包含在文件层。一般情况下,“moov”会紧随“ftyp”出现。
  • 一般情况下,“moov”中会包含1个“mvhd”和若干个“trak”。
    • 其中“mvhd”为header box,一般作为“moov”的第一个子box出现(对于其他container box来说,header box都应作为首个子box出现)。
    • “trak”包含了一个track的相关信息,是一个container box。
  • moov √ container for all the metadata
    • mvhd √ movie header, overall declarations
    • trak √ container for an individual track or stream
字段字节数意义实例
box size4box大小00 00 5A EB
box type4box类型moov6D 6F 6F 76

1.4. moov-mvhd

  • moov的头box
字段字节数意义实例
box size4box大小00 00 00 6C
box type4box类型6D 76 68 64
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags300 00 00
creation time4创建时间(相对于UTC时间1904-01-01零点的秒数)BE 44 3F 8D
modification time4修改时间BE 44 3F 8D
time scale4文件媒体在1秒时间内的刻度值,可以理解为1秒长度的时间单元数。频率或者采样率。00 00 02 58
duration4该track的时间长度,用duration和time scale值可以计算track时长(单位:秒),比如audio track的time scale = 8000, duration = 560128,时长为70.016,video track的time scale = 600, duration = 42000,时长为7000 00 A4 10
rate4推荐播放速率,高16位和低16位分别为小数点整数部分和小数部分,即[16.16] 格式,该值为1.0(0x00010000)表示正常前向播放00 01 00 00
volume2与rate类似,[8.8] 格式,1.0(0x0100)表示最大音量01 00
reserved10保留位00 00 00 00 00 00 00 00 00 00
matrix36 视频变换矩阵
pre-defined24
next track id4下一个track使用的id号00 00 00 05

1.5. moov-trak

  • “trak”也是一个 container box,其子 box 包含了该 track 的媒体数据引用和描述(hint track除外)。

  • 一个MP4文件中的媒体可以包含多个track,且至少有一个track,这些track之间彼此独立,有自己的时间和空间信息。

  • “trak”必须包含一个“tkhd”和一个“mdia”,此外还有很多可选的box(略)。

  • 其中“tkhd”为track header box,“mdia”为media box,该box是一个包含一些track媒体数据信息box的container box。

  • trak √ container for an individual track or stream

    • tkhd √ track header, overall information about the track
    • mdia √ container for the media information in a track
      • mdhd √ media header, overall information about the media
      • hdlr √ handler, declares the media (handler) type
      • minf √ media information container
        • vmhd video media header, overall information (video track only)
        • smhd sound media header, overall information (sound track only)
        • dinf √ data information box, container
          • dref √ data reference box, declares source(s) of media data in track
        • stbl √ sample table box, container for the time/space map
          • stsd √ sample descriptions (codec types, initialization etc.)
          • stts √ (decoding) time-to-sample
          • ctts (composition) time to sample
          • stsc √ sample-to-chunk, partial data-offset information
          • stsz sample sizes (framing)
          • stz2 compact sample sizes (framing)
          • stco √ chunk offset, partial data-offset information
          • co64 64-bit chunk offset
          • stss sync sample table (random access points)

1.6. trak-tkhd

  • trak的头。
  • 音频的(通过音频字段判断)
字段字节数意义实例
box size4box大小005C
box type4box类型74 6B 68 64
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags3按位或操作结果值,预定义如下:;0x000001 track_enabled,否则该track不被播放;0x000002 track_in_movie,表示该track在播放中被引用;0x000004 track_in_preview,表示该track在预览时被引用。一般该值为7,如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;对于hint track,该值为 000 00 01
creation time4创建时间(相对于UTC时间1904-01-01零点的秒数)BE 44 3F 8C
modification time4修改时间BE 44 3F 8D
track id4id号,不能重复且不能为000 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04
reserved4保留位00 00 00 00
duration4track的时间长度 参见mvhd的duration00 00 A4 10
reserved8保留位00 00 00 00 00 00 00 00
layer2视频层,默认为0,值小的在上层00 00
alternate group2track分组信息,默认为0表示该track未与其他track有群组关系00 00
volume2[8.8] 格式,如果为音频track,1.0(0x0100)表示最大音量;否则为001 00 00 00 00 00 00 00
reserved2保留位 00 00
matrix36视频变换矩阵 00 01 00 00 … 40 00 00 00
width400 00 00 00 00 0C 00 00 00 00 00 00 00 00 00 00
height4高,均为 [16.16] 格式值,与sample描述中的实际画面大小比值,用于播放时的展示宽高00 00 00 00 00 F2 00 00 00 00 00 00 00 00 00 00

1.7. trak-mdia

  • “mdia”也是个container box,其子box的结构和种类还是比较复杂的。先来看一个“mdia”的实例结构树图。
  • 总体来说,“mdia”定义了track媒体类型以及sample数据,描述sample信息。
  • 一般“mdia”包含一个“mdhd”,一个“hdlr”和一个“minf”
    • 其中“mdhd”为media header box
    • “hdlr”为handler reference box,
    • “minf”为media information box。

1.8. mdia-mdhd

字段字节数意义实例
box size4box大小00 00 00 20
box type4box类型6D 64 68 64
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags300 00 00
creation time4创建时间(相对于UTC时间1904-01-01零点的秒数)BE 44 3F 8D
modification time4修改时间BE 44 3F 8D
time scale4采样率00 00 1F 40//8000
duration4track的时间长度, 560128/8000=70s(音频时长)00 08 8C 00//560128
language2媒体语言码。最高位为0,后面15位为3个字符(见ISO 639-2/T标准中定义)15 C7
pre-defined200 00

1.9. mdia-hdlf

  • “hdlr”解释了媒体的播放过程信息。
  • 定义track类型(video/audio/hint)
字段字节数意义实例
box size4box大小00 00 00 3A
box type4box类型68 64 6C 72
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags3
pre-defined4
handler type4在media box中,该值为4个字符:“vide”— video track;“soun”— audio track;“hint”— hint track73 6F 75 6E(soun) 76 69 64 65(vide) 68 69 6E 74(hint)
reserved1200 00 00 00 00 00 00 00 00 00 00 00
name不定track type name,以‘\0’结尾的字符串41 70 70 6C…6C 65 72 00 Apple Sound Media Hander

1.10. mdia-minf

  • minf”存储了解释track媒体数据的handler-specific信息

  • media handler用这些信息将媒体时间映射到媒体数据并进行处理。

  • “minf”中的信息格式和内容与媒体类型以及解释媒体数据的media handler密切相关

  • 其他media handler不知道如何解释这些信息。“minf”是一个container box,其实际内容由子box说明。

  • 一般情况下,“minf”包含一个header box,一个“dinf”和一个“stbl”,

    • header box根据track type(即media handler type)分为“vmhd”、“smhd”、“hmhd”和“nmhd”,
    • “dinf”为data information box,
    • “stbl”为sample table box。
  • minf √ media information container

    • vmhd video media header, overall information (video track only)
    • smhd sound media header, overall information (sound track only)
    • hmhd hint media header, overall information (hint track only)
    • nmhd Null media header, overall information (some tracks only)
    • dinf √ data information box, container
      • dref √ data reference box, declares source(s) of media data in track
    • stbl √ sample table box, container for the time/space map
      • stsd √ sample descriptions (codec types, initialization etc.)
      • stts √ (decoding) time-to-sample
      • ctts (composition) time to sample
      • stsc √ sample-to-chunk, partial data-offset information
      • stsz sample sizes (framing)
      • stz2 compact sample sizes (framing)
      • stco √ chunk offset, partial data-offset information
      • co64 64-bit chunk offset
      • stss sync sample table (random access points)
      • stsh shadow sync sample table
      • padb sample padding bits
      • stdp sample degradation priority
      • sdtp independent and disposable samples
      • sbgp sample-to-group
      • sgpd sample group description
      • subs sub-sample information

1.11. minf-vmhd

字段字节数意义实例
box size4box大小00 00 00 14
box type4box类型76 6D 68 64
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags3
graphics mode2视频合成模式,为0时拷贝原始图像,否则与opcolor进行合成00 00
opcolor2×3{red,green,blue}00 00 00 00 00 00

1.12. minf-smhd

字段字节数意义实例
box size4box大小00 00 00 10
box type4box类型73 6D 68 64
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags300 00 00
balance2立体声平衡,[8.8] 格式值,一般为0,-1.0表示全部左声道,1.0表示全部右声道00 00
reserved200 00

1.13. minf-dinf

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

1.14. minf-dinf-dref

字段字节数意义实例
box size4box大小00 00 00 1C
box type4box类型64 72 65 66
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags300 00 00
entry count4“url”或“urn”表的元素个数00 00 00 01
“url”或“urn”列表不定00 00 00 0V 75 72 6C 20 00 00 00 01 00(url)

1.15. minf-stbl(最复杂的一个)

  • “stbl”几乎是普通的MP4文件中最复杂的一个box了,首先需要回忆一下sample的概念。

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

  • 一个Chunk可以包含1个或者多个sample

  • “stbl”包含了关于track中sample所有时间和位置的信息,以及sample的编解码等信息。

  • 利用这个表,可以解释sample的时序、类型、大小以及在各自存储容器中的位置。

  • “stbl”是一个container box

  • stbl √ sample table box, container for the time/space map

    • stsd √ sample descriptions (codec types, initialization etc.)
      • mp4a
        • esds
      • avc1 h264
      • esds mpeg4
      • hvcc h265
    • stts √ (decoding) time-to-sample
    • ctts (composition) time to sample
    • stsc √ sample-to-chunk, partial data-offset information
    • stsz sample sizes (framing)
    • stz2 compact sample sizes (framing)
    • stco √ chunk offset, partial data-offset information
    • co64 64-bit chunk offset
    • stss sync sample table (random access points)
    • stsh shadow sync sample table
    • padb sample padding bits
    • stdp sample degradation priority
    • sdtp independent and disposable samples
    • sbgp sample-to-group
    • sgpd sample group description
    • subs sub-sample information

1.16. stbl-stsd

  • sample description box(stsd)“stsd”必不可少,且至少包含一个条目,该box包含了data reference box进行sample数据检索的信息。
  • 没有“stsd”就无法计算media sample的存储位置。
  • “stsd”包含了编码的信息,其存储的信息随媒体类型不同而不同。
  • box header和version字段后会有一个entry count字段,根据entry的个数,每个entry会有type信息,如“vide”、“sund”等,根据type不同sample description会提供不同的信息,例如对于video track,会有“VisualSampleEntry”类型信息,对于audio track会有“AudioSampleEntry”类型信息。
  • 视频的编码类型、宽高、长度,音频的声道、采样等信息都会出现在这个box中。
字段字节数意义实例
box size4box大小00 00 00 67
box type4box类型73 74 73 64
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags3
entry count4Sample descriptons的数目00 00 00 01
Sample Description不定不同的媒体信息类型(mp4a,mp4v,rtp等)有不同的sample description,但前四个字段是相同的。包括size/type/reserve/data reference见下表

1.17. stbl-stsd-mp4a

字段字节数意义实例
box size4box大小00 00 00 57
box type4box类型6D 70 34 61
reserve6预留00 00 00 00 00 00
data reference2利用这个索引可以检索与当前sample description关联的数据,数据引用存储在data reference atoms。00 01
Other不定esds等子box

1.18. stbl-stts(dts)

  • time to sample box(stts)
  • “stts”存储了sample的duration,描述了sample时序的映射方法,我们通过它可以找到任何时间的sample。
  • “stts”可以包含一个压缩的表来映射时间和sample序号,用其他的表来提供每个sample的长度和指针。
  • 表中每个条目提供了在同一个时间偏移量里面连续的sample序号,以及samples的偏移量。
  • 递增这些偏移量,就可以建立一个完整的time to sample表。
  • 计算公式如下:
    • DT(n+1) = DT(n) + STTS(n)
    • 其中STTS(n)是没有压缩的STTS第n项信息
    • DT是第n个sample的是解码时间。
    • Sample的排序是按照时间戳的顺序,这样偏移量永远是非负数。
    • DT一般以0开始,如果不为0,edit list atom设定初始的DT值。
    • DT计算公式如下
      • DT(i) = SUM(for = j=0 to i-1 of delta(j))
    • 所有偏移量的和就是track中media的长度,这个长度不包括media的time scale,也不包括任何的eidt list。
字段字节数意义实例
box size4box大小00 00 00 18
box type4box类型73 74 74 73
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags300 00 00
count4time to sample的数目00 00 00 01
time to sample
sample count4有相同duration的连续sample的数目00 00 02 23
sample duration4每个sample的duration00 00 04 00

1.19. stbl-ctts(pts-dts)

  • 因为 pts > dts ,所以 ctts 永远大于 0
  • composition time = pts
  • decode time = dts

1.20. stbl-stsz/stz2(sample大小)

  • sample size box(stsz或stz2)
  • “stsz” 定义了每个sample的大小,包含了媒体中全部sample的数目和一张给出每个sample大小的表。
  • 这个box相对来说体积是比较大的。
字段字节数意义实例
box size4box大小00 00 08 A0
box type4box类型73 74 73 7A
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags3
sample size4全部sample的数目,如果所有的sample有相同的长度,这个字段就是这个值,否则,这个字段的值就是0.那些字段存在sample size表中00 00 00 00
条目数目4sample size的数目00 00 02 23(547)
sample size结构,这个表根据sample number索引,第一项就是第一个sample,第二项就是第二个sample
大小4每个sample的大小00 00 00 07 00 00 00 07 00 00 00 07 00 00 01 A6 … 00 00 01 10

1.21. stbl-stsc(sample/chunk)

  • sample to chunk box(stsc)
  • 用chunk组织sample可以方便优化数据获取,一个thunk包含一个或多个sample。
  • “stsc”中用一个表描述了sample与chunk的映射关系,查看这张表就可以找到包含指定sample的thunk,从而找到这个sample。
字段字节数意义实例
box size4box大小00 00 02 A4
box type4box类型73 74 73 63
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags300 00 00
条目数目4sample to chunk的数目00 00 00 37
sample to chunksample to chunk表的结构
First chunk4这个table使用的第一个chunk序号00 00 00 01 00 00 00 02 00 00 00 03 … 00 00 01 1C
Sample pre chunk4这个trunk内的sample数目00 00 00 03 00 00 00 01 00 00 00 02 … 00 00 00 02
sample description ID4与这些sample关联的sample description的序号00 00 00 01 00 00 00 01 00 00 00 01 … 00 00 00 01

1.22. stbl-stco/co64(check offset)

  • chunk offset box(stco或co64)
  • “stco”定义了每个thunk在媒体流中的位置。
  • 位置有两种可能,32位的和64位的,后者对非常大的电影很有用。
  • 在一个表中只会有一种可能,这个位置是在整个文件中的,而不是在任何box中的,这样做就可以直接在文件中找到媒体数据,而不用解释box。
  • 需要注意的是一旦前面的box有了任何改变,这张表都要重新建立,因为位置信息已经改变了。
字段字节数意义实例
box size4box大小00 00 04 84
box type4box类型73 74 63 6F
version1box版本,0或1,一般为0。(以下字节数均按version=0)00
flags300 00 00
条目数目4chunk offset的数目00 00 01 1D
chunk offset字节偏移量从文件开始到当前chunk。这个表根据chunk number索引,第一项就是第一个chunk,第二项就是第二个chunk
大小4每个chunk大小00 00 5B 2B 00 00 5B 40 00 00 67 85 … 00 0E 2E 2F
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值