重要概念

文件打包和解包在OTT和RTC中的应用:理解MP4、FLV和TS容器

10 分钟阅读
Feb 18, 2025

在超越顶级(OTT)和实时通信(RTC)技术的世界中,文件打包和解包在管理和传输音视频内容中起着至关重要的作用。本文将深入探讨打包和解包的概念,重点介绍三种流行的容器格式:MP4、FLV 和 TS。

打包的必要性

当音频和视频数据经过各自的编码器后,我们通常会得到两个独立的数据流:一个用于音频的 AAC 流和一个用于视频的 H.264 流。这些流是分开的,因为它们来自不同的源(音频来自麦克风,视频来自摄像头),并由不同的组件处理。

然而,在实际应用中,音频和视频流很少单独使用。为了同步同一场景中的声音和画面,我们需要将音频和视频数据打包到一个文件中。

什么是打包?

打包,也称为复用或 muxing,是将多个数据流组合成一个单一容器文件的过程。打包的主要目的包括:

  1. 整合来自同一场景的信息。
  2. 便于音视频同步和统一配置。

结果打包后的文件称为容器。常见的容器格式包括 MP4、FLV、TS、AVI 和 MKV。

Container, Metadata, Video Stream, Audio Stream. Packaging involves combining multiple data streams, such as video and audio

元数据:高效播放的关键

容器就像不同大小的盒子,有些支持多种编解码格式(如 MKV),而有些支持较少(如 AVI)。为了实现高效播放,容器包含元数据——关于打包媒体的信息。

元数据通常包括:

  • 音频和视频的编解码信息
  • 分辨率
  • 帧速率
  • 比特率
  • 采样率
  • 比特深度
  • 音频通道数

当媒体播放器开始播放文件时,它首先读取元数据,以确定使用哪些编解码器以及在开始播放之前分配多少缓冲区空间。

对于具有“边下载边播放”功能的在线流媒体,确保元数据位于文件开头至关重要。一些打包格式将元数据放在末尾,这需要转码以移动元数据或在播放开始之前下载整个文件。

流行的容器格式

让我们探索三种在 OTT 和 RTC 系统中使用的流行容器格式:

1. MP4(MPEG-4 第 14 部分)

MP4 是一种多功能的媒体文件结构标准,可以嵌入各种类型的数据。大多数 MP4 文件包含 H.264 或 MPEG-4 编码的视频和 AAC 编码的音频。

MP4 文件结构为一系列嵌套的“盒子”。以下是一些常见的盒子类型:

MP4 container structure diagram illustrating the relationship between various boxes including MP4, MoovBox, TrakBox, MediaBox, StblBox

盒子类型描述
ftyp文件类型,指示文件格式
moov元数据容器,存储文件元数据
mvhd电影头部,包含文件头部信息
trak轨道容器,包含音频/视频轨道信息
tkhd轨道头部,包含轨道头部信息
mdia媒体信息
mdhd媒体头部,定义媒体头部信息
hdlr处理程序,指定轨道类型(视频/音频/提示)
minf媒体信息,包含媒体数据
stbl样本表,存储样本映射信息
mdat媒体数据容器,保存实际的媒体数据

2. FLV(Flash 视频)

FLV 是由 Adobe 开发的一种流行的网络视频容器格式。其简单的结构和易于解码使其非常适合在线视频,尤其是与 Adobe 的 RTMP 协议结合使用时。

FLV 文件由 FLV 头部和 FLV 主体组成:

FLV 头部 | 标签0 | 标签0 数据 | 标签1 | 标签1 数据 | ... | 标签N | 标签N 数据

FLV 主体包含多个标签,这些标签可以是音频、视频或脚本(用于关键字或文件信息)。

FLV 头部结构:

字段描述
签名(3B)始终为 "FLV" (0x46 0x4C 0x56)
版本(1B)版本号,通常为 0x01
标志(1B)位 5-7: 0,位 6: 音频标签存在,位 7: 视频标签存在
头部大小(4B)FLV 头部的大小,通常为 9

FLV 主体结构(针对每个标签):

字段描述
前一个标签大小前一个标签的大小
标签类型音频 (0x08),视频 (0x09),或脚本 (0x12)
数据大小标签数据部分的大小
时间戳标签的时间戳
流 ID流标识符
标签数据实际的媒体数据

3. TS(传输流)

TS,由 MPEG-2 标准定义,通常用于数字视频广播和 HTTP 实时流协议(HLS)。

TS 打包过程:

  1. 元素流(ES) - 原始编码的音频或视频数据
  2. 分组元素流(PES) - 将 ES 数据打包成 PES 数据包
  3. 传输流(TS) - 将 PES 数据包复用到 TS 数据包中

TS 数据包的固定大小为 188 字节,包含头部和有效载荷。

结论

理解文件打包和解包对任何从事 OTT 和 RTC 技术的人来说都是至关重要的。每种容器格式都有其优势,适用于不同的用例:

  • MP4 广泛用于互联网视频点播服务
  • FLV 在直播和视频点播中都很受欢迎
  • TS 通常用于 HTML5 视频传送的 HLS 中

随着数字媒体领域的不断发展,及时了解这些容器格式及其应用将对开发高效、高质量的音视频流解决方案至关重要。