🎬 第五章 视频基础
📄 一句话概括

封装格式的差别主要在【索引放在哪】与【能装哪些编码】——要边下边播选 TS/FLV,要通用分发选 MP4。

📝 本节和前面几节的关系

5.2.2 讲了封装里装什么,这一节讲常见的几种壳各有什么脾性。

一、MP4:通用分发的主力

MP4 是点播与分发的通用格式,几乎所有设备与平台都支持。 它的结构由一个个【盒子】(box)组成,索引放在 moov 盒里。 moov 在前在后,体验差别很大:在前可以边下边播,在后必须下完。

二、MKV:能装得最多

MKV 的结构非常灵活,能装任意多条音轨、字幕与章节。 它是本地收藏的常见选择:一部电影装七八条字幕轨毫无压力。 代价是兼容性不如 MP4——某些老设备不认。

三、TS 与 FLV:为【边来边播】而生

TS 用定长包组织数据,没有全局索引,拿到哪一段就能解哪一段。 FLV 结构极简,头之后就是一串 Tag,按顺序读就行。 两者都不依赖文件全局结构,所以特别适合直播与边下边播。

四、AVI:知道它老在哪就行

AVI 是早期格式,索引机制弱,对大文件支持差。 今天遇到 .avi,多半是老素材或老软件导出的。 处理它的思路很简单:先转成 MP4 或 MKV,再走后面的流程。

五、动手 Demo:常见封装格式怎么选

封装格式的差别,主要在【索引放在哪】与【支持哪些编码】。

rows = [("MP4", "索引(moov)可在头或尾", "点播、通用分发"),
        ("MKV", "结构灵活,能装多条流", "本地收藏、多字幕"),
        ("AVI", "结构老,索引弱", "老素材、老软件"),
        ("FLV", "头短,按 Tag 顺序读", "直播推流"),
        ("TS", "定长包,无全局索引", "直播、广播")]
for a, b, c in rows:
    print("%-5s %-22s %s" % (a, b, c))

实跑输出:

--------------------------------------------------------------------
常见封装格式怎么选
--------------------------------------------------------------------

封装格式的差别,主要在【索引放在哪】与【支持哪些编码】。

  格式     结构特点                 常见用途
  ---------------------------------------------------
  MP4      索引(moov)可在头或尾     点播、通用分发
  MKV      结构灵活,能装多条流     本地收藏、多字幕
  AVI      结构老,索引弱           老素材、老软件
  FLV      头短,按 Tag 顺序读      直播推流
  TS       定长包,无全局索引       直播、广播

  一句判断:**要边下边播,选 TS/FLV;要通用分发,选 MP4。**
  MP4 的 moov 若在文件尾部,**就得下完才能播**——这是常见坑。

一句判断:要边下边播,选 TS/FLV;要通用分发,选 MP4。 MP4 的 moov 若在文件尾部,就得下完才能播——这是常见坑。

30 秒实验

  1. 把一段直播录屏(FLV)与一段本地视频(MP4)各读一次。
  2. 比较它们的索引机制有什么不同。

常见误区

  1. 以为 MKV 比 MP4【高级】。兼容性上 MKV 反而更差。
  2. 拿 AVI 做大文件分发。它的索引机制撑不住。
自测三问(点开对答案) 1. MP4 与 MKV 的主要差别是什么? —— MKV 结构更灵活、能装更多条流;MP4 通用性更好。 2. TS 与 FLV 为什么适合直播? —— 它们不依赖文件全局结构,拿到哪段就能解哪段。 3. MP4 的 moov 放在文件尾会怎样? —— 必须下完整个文件才能开始播放。

相关笔记