摘要:用"饭盒装菜"的比喻彻底讲清封装格式和编码格式的区别,然后逐个拆解 MP4、FLV、TS、MKV 的内部结构、设计初衷和适用场景。附带工程选型建议和对比表格,看完就知道你的业务该用什么容器。
1. 核心比喻:饭盒和菜是两回事
新手最容易混淆的两个概念:编码格式 和 封装格式。
编码格式 (H.264/H.265/AV1):决定视频画面怎么"画"出来。
封装格式(MP4/FLV/TS/MKV):决定这些"画"和声音怎么打包存放。
生活比喻 :
编码格式就是"菜怎么做"------红烧、清蒸、油炸。
封装格式就是"用什么饭盒装"------长方形塑料盒、保温桶、外卖纸袋。
一个饭盒可以装红烧肉(MP4 里放 H.264),也可以装清蒸鱼(MP4 里放 H.265)。同一种菜也能装在不同饭盒里。
文件扩展名就是饭盒的牌子 ,告诉你这是什么容器,但不能 100% 确定里面装的是什么编码的菜。比如 .mp4 文件里面可能是 H.264,也可能是 H.265,甚至可能是 AV1。
先把这个关系焊死在脑子里,后面所有讨论才有根基。
2. 封装格式的三个核心功能
一个视频容器(Container)要干三件事:
第一,打包:把视频流、音频流、字幕、章节信息等塞进一个文件。
第二,同步:记录每一段视频和每一段音频的"时间戳",让播放器知道"这帧画面应该和第 3 秒的那段声音同时播"。
第三,索引:提供快速定位能力,让你能拖拽进度条,瞬间跳到 15 分 20 秒。
不同容器的差异,本质上就是这三件事的实现方式不同。下面逐个拆解。
3. MP4 ------ 点播的王者
3.1 历史定位
MP4 源于 Apple 的 QuickTime 容器,由 MPEG 组织在 2001 年标准化,全称 MPEG-4 Part 14。它是目前互联网视频分发事实上的标准容器。
3.2 内部结构
MP4 的数据组织单位叫 Box(盒子),每个 Box 包含类型、长度和数据。所有数据都以结构化方式存放在这些盒子里。
关键的结构是 moov Box,里面存着所有音视频流的描述信息和时间戳索引表。播放器要解码任意时刻的画面,必须先读到 moov。
致命问题:moov 默认写在文件末尾。这意味着如果 MP4 文件没有下载完整,moov 丢失,整个文件就无法播放。
解决方案 :faststart(也叫 moov 前置)。编码器把 moov 提前写到文件头部,让播放器一打开文件就能获取索引,边下边播。现在几乎所有 Web 场景的 MP4 都必须做 faststart。
3.3 支持什么编码
-
视频:H.264 最主流,H.265/AV1/VP9 也支持
-
音频:AAC 最主流,MP3/FLAC/Opus 也支持
-
字幕:支持内嵌字幕轨道,但兼容性一般
3.4 适用场景
-
✅ 视频点播、本地存储、渐进式下载播放
-
✅ 任何需要拖拽进度条的场景
-
❌ 直播(moov 机制导致必须文件完整才能播)
-
❌ 需要极强容错能力的传输场景
4. TS ------ 直播的基石
4.1 历史定位
TS,全称 MPEG Transport Stream(传输流),由 MPEG-2 标准定义。设计初衷是在不可靠的信道上传输电视信号,如地面广播、卫星电视。
4.2 为什么 TS 天生适合直播?
核心设计理念:抗丢包、抗错误、随时可加入。
TS 把数据切成固定大小 188 字节 的小包(Packet)。每个包都有独立的头部和同步字节(0x47),接收端可以在任何位置开始解析,不必等完整文件。
生活比喻:MP4 像一封完整的信,必须从头看到尾。TS 像流水线上源源不断的明信片,你随时拿起一张都能读出上面写的是什么,哪怕前几张丢了也能继续看。
TS 适合直播的五个技术特性:
-
随时可加入:观众在直播中途点进来,解码器立刻找到下一个同步字节就能开始播,不需要从头缓冲
-
抗丢包:丢一个包只影响 188 字节,画面局部出问题,不会导致整个流崩掉
-
固定包长:188 字节极小,传输延迟可控,适合 UDP 传输
-
多节目复用:一个 TS 流可以同时承载多个音视频节目,广电系统里一根线传几十个台就靠它
-
无全局索引依赖:不像 MP4 需要等 moov,TS 每个包自带时间信息(PTS/PCR),真正做到无头播放
4.3 支持什么编码
-
视频:H.264 最主流,H.265 也支持
-
音频:AAC、MP3、AC-3 等
4.4 适用场景
-
✅ 直播流传输(HLS 切片就是 TS 文件)
-
✅ 广电系统、IPTV、机顶盒
-
❌ 点播(没有全局索引,快进快退效率低)
5. FLV ------ HTTP 直播的先驱
5.1 历史定位
FLV(Flash Video)由 Adobe 为 Flash Player 设计,2000 年代中期到 2010 年代中期统治了全球在线视频。B 站早期视频、YouTube 早期视频都是 FLV。
随着 2020 年 Flash 正式退役,FLV 在浏览器播放领域已经退出历史舞台。但它在直播领域至今活跃,尤其是中国。
5.2 为什么 FLV 至今没死?
结构极简,延迟极低。
FLV 由 FLV Header + 一系列 Tag 组成。每个 Tag 就是一帧视频或一段音频,自带时间戳,简单到任何程序员都能手写解析器。
三个让 FLV 活到现在的特性:
-
低延迟:格式极简,编码后直接发,不需要等 GOP 边界,延迟能压到 1-2 秒
-
HTTP 友好:可以用 HTTP 长连接持续推送,防火墙友好,不需要特殊的流媒体端口
-
生态惯性:中国主流 CDN 和直播平台深度绑定 FLV,推流 RTMP 拉流 HTTP-FLV 至今是标配架构
5.3 支持什么编码
-
视频:H.264 最主流
-
音频:AAC、MP3
5.4 适用场景
-
✅ 低延迟直播推流和拉流(HTTP-FLV)
-
✅ 需要 HTTP 穿越防火墙的直播
-
❌ 浏览器原生播放(Flash 已死,需要 MSE 或转封装)
-
❌ 点播(早已被 MP4 取代)
6. MKV ------ 万能的自由容器
6.1 历史定位
MKV,全称 Matroska Multimedia Container(Matroska 是俄语"套娃"的意思)。它是一个开源、免费、极具扩展性的容器,始于 2002 年。
MKV 的设计哲学是:什么都往里装。
几乎所有现存的视频编码、音频编码、字幕格式都能塞进 MKV。它几乎是业界事实上的"万能容器"。
6.2 核心优势
万能封装能力 :
视频编码支持 H.264 / H.265 / AV1 / VP9 / VP8 / MPEG-4 / MPEG-2 ......几乎一切。
音频编码支持 AAC / MP3 / FLAC / Opus / DTS / TrueHD / Atmos ......无损、有损全包。
字幕支持内嵌 SRT / ASS / PGS / VobSub,还可以支持多语言、多版本。
自由与无专利限制 :
MKV 完全开源,无任何专利授权费。WebM(Google 推动的 Web 视频格式)就是 MKV 的子集。
强大的章节与元数据 :
支持章节编辑、菜单结构、多版本视频轨(导演剪辑版/剧场版)、封面图片、详细的媒体信息元数据。
6.3 缺点
-
浏览器支持有限:Chrome/Firefox 对 MKV 支持差,Web 场景几乎不用
-
移动端支持差:iOS 原生不支持 MKV 硬解,需第三方播放器
-
播放器依赖:桌面端需要 VLC / PotPlayer 等第三方播放器
6.4 适用场景
-
✅ 本地高清/无损影音存储、收藏、归档
-
✅ 多字幕、多音轨视频封装
-
✅ WebM 子集用于浏览器播放
-
❌ 在线流媒体分发
-
❌ 对兼容性有苛刻要求的分发
7. 五大格式对比总表
| 维度 | MP4 | TS | FLV | MKV |
|---|---|---|---|---|
| 设计目标 | 本地存储、点播 | 传输流、广播 | Flash 播放、直播 | 万能本地存储 |
| 结构特点 | Box 结构,moov 索引 | 188B 固定包长 | Header + Tag 序列 | EBML 扩展二进制 |
| 首屏/加入速度 | 需 moov(faststart 后快) | 极快(随时可加入) | 快 | 较快 |
| 拖拽/随机访问 | ✅ 优秀(moov 索引) | ❌ 需解析整个流 | ❌ 无内置索引 | ✅ 良好 |
| 容错/抗丢包 | 差(moov 丢则全废) | 强(包级独立) | 一般 | 一般 |
| 直播适合度 | ❌ 不适合 | ✅ 基石(HLS 切片) | ✅(HTTP-FLV 低延迟) | ❌ 不适合 |
| 编码兼容范围 | 主流编码 | 主流编码 | H.264 + AAC 为主 | 几乎全兼容 |
| 字幕支持 | 有限 | 有限 | 无 | ✅ 极强 |
| Web 浏览器支持 | ✅ 原生支持 | ❌(需 MSE 转封装) | ❌(Flash 已死) | ❌ 支持差 |
| 专利 / 开源 | 需授权 | 需授权 | Adobe 曾持有 | ✅ 完全开源 |
| 当前定位 | 点播之王 | 广电 + HLS 直播 | 中国低延迟直播 | 影音发烧友收藏 |
8. 工程选型决策指南
按场景选择
| 你的需求 | 推荐容器 | 理由 |
|---|---|---|
| 在线视频点播平台 | MP4(HLS 备选) | 兼容性最好,faststart 后边下边播 |
| 低延迟直播 | FLV(HTTP-FLV)或 TS(HLS) | FLV 延迟约 1-3 秒,TS 约 5-10 秒 |
| 广电/IPTV 系统 | TS | 行业标准,抗丢包,多节目复用 |
| 影视收藏/归档 | MKV | 万能封装,多字幕多音轨,开源免费 |
| 安卓/iOS 本地播放 | MP4 | 系统原生支持最好 |
| WebRTC 实时通话 | 无容器(裸流 RTP) | 不需要封装,直接传编码帧 |
常见架构组合
-
直播推流:RTMP 协议 + FLV 封装
-
直播分发:HLS 协议 + TS 切片
-
低延迟直播:HTTP-FLV 拉流
-
点播分发:MP4 faststart + CDN
-
多码率自适应:HLS(TS)或 DASH(fMP4)
9. 小结
| 容器 | 一句话定位 |
|---|---|
| MP4 | 点播之王,兼容性无敌,互联网视频标配 |
| TS | 直播基石,抗丢包强,广电和 HLS 的核心 |
| FLV | 直播老兵,格式极简,中国低延迟直播主流 |
| MKV | 万能容器,开源自由,影音发烧友最爱 |
选容器不是选技术先进,是选匹配场景。 MP4 把索引做到极致适合点播,TS 把容错做到极致适合直播,FLV 把简单做到极致适合低延迟,MKV 把兼容做到极致适合收藏。它们是不同时代、不同需求催生的产物,各有各的生态位。