我们常说的视频文件格局常常仅仅多媒体封装格局,里面不只包括了视频,还有音频、字幕等媒体信息。而纯视频码流的格局更多运用运用编码格局表达。

多媒体封装格局Multimedia Container Format,简称MCF、多媒体容器),是一种开放(没有身份规限,免费)、自在的数据格局。

多媒体文件是个容器。容器里面存在多个流(stream/track) 。每种流是由不同的编码器编程生成的。从流中读出的数据称为。在一个包中包括一个或多个

容器格局内部对音视频数据的处理都是迥然不同,差异点并不大。更多的距离在于它们关于不同编码格局的支撑程度、元数据的详细程度以及关所以否能够支撑音视频以外的数据。

不同的容器具有不同的特点,下面简略介绍常用的多媒体容器。

AVI

AVI,Audio Video Interleave。

  • 安排:Mircrosoft
  • 不支撑流媒体
  • 支撑编解码器:简直一切
  • BT下载视频

一种RIFF(Resource Interchange File Format)文件格局。同样运用RIFF文件格局还有WAV格局文件。RIFF运用小端序存储。

主体中的图画数据和声音数据是穿插寄存的,以此到达音视频同步。从尾部的索引能够跳转到要播映的方位。

播映时刻没有直接的字段由读取的帧数和帧率计算得出。

缺陷:

  • 因为索引在文件尾部,所以不适合用来流传输。
  • 容器中我没有时刻戳,只能经过帧数和帧率计算得出。在索引中也没有写明时刻戳和媒体方位的信息,所以在播映AVI时seek操作还需要额外的技术手段。
  • 因为媒体数据分块寄存,使得它对很多运用运动猜测特定的视频编码的支撑不是很好,因为猜测帧需要访问帧外的数据。

二进制构成

AVI文件是一个类型为AVI的RIFF块,主要有三个subchunk构成:

  • hdrl LIST,信息块:元数据
  • movi LIST,数据块:保存音视频序列数据
  • idxl LIST,索引块(可选)

结构暗示:

RIFF (‘AVI ’
    LIST (‘hdrl’
       ‘avih’(主AVI信息头数据)
       LIST (‘strl’
          ‘strh’ (流的头信息数据)
          ‘strf’ (流的格局信息数据)
          [‘strd’ (可选的额外的头信息数据) ]
          [‘strn’ (可选的流的名字) ]
          ...
         )
       ...
      )
    LIST (‘movi’
       { SubChunk | LIST (‘rec ’
                SubChunk1
                SubChunk2
                ...
               )
        ...
       }
       ...
      )
    [‘idx1’ (可选的AVI索引块数据) ]
   )

多媒体容器
多媒体容器

参阅:

  • 多媒体文件格局之AVI – Tocy – 博客园
  • AVI文件格局剖析 | Sp4n9x’s Blog

MOV

MOV,QuickTime File Format(QTFF)

  • 安排:Apple

  • 支撑流媒体

  • 支撑编解码器:

    • 音:AAC、MPEG-1 Layers I/II/III、AC-3等
    • 视:MPEG-2/4、H.264
  • 点播、直播

相关概念

atom:QTFF的根本数据单元,能够来包容实践的音视频数据,也能够放置元数据和字幕等信息,经过层层嵌套方法形成树状结构。atom包容的数据类型和巨细在atom头部进行描绘。

MP4

MP4,MPEG-4 Part14

  • 安排:MPEG

  • 支撑流媒体

  • 支撑编解码器:

    • 音:AAC、MPEG-1 Layers I/II/III、AC-3等
    • 视:MPEG-2/4、H.264、H.263等
  • 互联网视频网站

MP4由多个包括不同信息的box,以树方式安排构成,与MOV的atom简直共同。

根结点下包括三个box:

  • ftyp:文件类型
  • moov:元数据
  • mdat:媒体数据

把moov放到mdat前面能够更快预备播映。

box结构

构成:

  • header:指明box巨细和类型;

    • 增加了version(8位)和flags(24位)字段的成为FullBox。
    • 当size等于0时,代表这个box是文件最后一个box。当size等于1时,阐明box长度需要更多的位来描绘,在后面会定义一个64位的largesize来描绘box的长度。
  • body:数据或box

常用容器

  • moov,音视频数据的元数据信息

    • mvhd,影片文件头信息,未紧缩过的影片信息的头容器

    • trak,多个,各轨迹信息容器

      • tkhd,轨迹元数据(TrackID、Duration、音量等等)

      • edts

        • 假如没有该表,那么这个轨迹会当即开端播映,一个空的 edts 数据用来定位对轨迹的开端时刻偏移方位
      • mdia

        • mdhd,媒体头

        • hdlr,句柄参阅

        • minf,媒体信息

          • vmhd,视频信息头
          • smhd,音频信息头
          • dinf,数据信息
          • stdl,采样表

多媒体容器

mdat box中的多媒体数据是没有结构的,是参阅moovtrack box解析。moov包括了整个多媒体文件的元数据,seek也是经过该box完成,经过其间的各个表查到数据偏移方位。

FLV

FLV,FLash Video。

  • 安排:Adobe

  • 支撑流媒体

  • 支撑编解码器:

    • 音:MP3、ADPCM、Linear PCM、AAC等
    • 视:Sorenson、VP6、H.264
  • 互联网视频

FLV常用做流媒体。

结构:

  • FLV Header

    • 字符 FLV 签名字段
    • 版本
    • 保存标记
    • 音视频标记
    • 数据偏移
  • FLV Body,这里body仅仅一个概念,详细直接便是PreviousTagSize和Tag

    • PreviousTagSize #0:0

    • TAG #1

      • TAG Header

        • Type
        • DataSize
        • TimeStamp
      • TAG Data

        • Audio Tag Data

          • 第一个字节包括音频数据的参数信息
          • 第二个字节开端为音频流数据
        • Video Tag Data(同上)

        • Script Tag Data

          • 常用于展现元数据,存储的数据格局一般为 AMF 格局
    • PreviousTagSize #1:上一个TAG巨细。

    • TAG #2

    • PreviousTagSize #2

参阅:

  • Flv格局解析 –

TS

TS,MPEG2-TS

  • 安排:MPEG

  • 支撑流媒体

  • 支撑编解码器:

    • 音:MPEG-1 Layers I/II/III、AAC
    • 视:MPEG-1/2/4、H.264
  • IPTV,低延时直播

TS文件为传输流文件,其特点是要求从视频流的恣意片段开端都是能够独立解码的。TS容器是为了流传输而规划的。

在MPEG-2规范中,有两种不同类型的码流输出到信道:一种是节目码流(Program Stream, PS),适用于没有误差发生的媒体存储,如DVD等存储介质(.vob)。另一种是传送流(Transport stream, TS),适用于有信道噪声发生的传输,现在TS流广泛应用于广播电视中,如机顶盒等。

TS文件分层:

  • ES,Elementary Stream:原始流,直接从编码器出来的裸数据。
  • PES,Packet Elemental Stream:切割打包的ES流,参加了PES头(PTSDTS等)。PES由包头和playload组成。
  • TS层,Transport Stream:传输流。是在PES层的基础上参加数据流的辨认和传输有必要的信息。固定包长度为188字节,以便于找到帧的开端方位,易于从丢包中恢复。

为了便于传输,完成时分复用,根本流ES有必要打包,便是将顺序连续、连续传输的数据流按必定的时刻长度进行切割,切割的小段叫包,因而打包也称为分组。

参阅:TS流根本概念、ts流格局详解

多媒体容器

MKV

MKV,Matroska Video File

  • 安排:Matroska
  • 支撑流媒体
  • 支撑编解码器:简直一切
  • 点播、直播

开放规范、免费运用,可放入多种媒体信息,且不限数量。并且是现在唯一一个支撑封装ASS字幕的格局。

参阅

  • Comparison of video container formats – Wikipedia
  • mp4文件格局解析 – 简书
  • 多媒体容器格局变迁史 | 随写 – XinoAssassin’s Blog