M3U8 / HLS
苹果发明了它,每台苹果设备都播放它,但没有一个会保存它。
.m3u8 文件是一个播放列表,而不是视频:几千字节的文本,列出了要按顺序获取的数千个小片段。这种设计就是 HLS 在每台 Apple 设备上完美运行以及“保存此文件”生成文本文档的原因。下载一个意味着获取每个段并重建一个从未存在过的文件。
2026年7月30日
系统原生即可打开
HLS 是 Apple 自己的规范,在所有地方(Safari、AVPlayer、AirPlay)都有一流的支持。系统中没有任何地方支持把直播流转换为磁盘上的文件。播放和保存是完全不同的问题。
基本信息
| 姓名 | HTTP 直播;播放列表是 UTF-8 格式的 M3U |
|---|---|
| 种类 | 流协议,以文本播放列表形式提供 |
| 扩展 | .m3u8(播放列表)、.ts 或 .m4s(它指向的段) |
| 已发表 | 2009年,苹果; 2017 年标准化为 RFC 8216 |
| 典型段长度 | 每个 2 到 10 秒 — 一小时的视频相当于数百到数千个文件 |
| 主控与媒体播放列表 | 大师列出了质量等级;每个点都指向实际片段的媒体播放列表 |
| 片段内的视频 | H.264 或 HEVC,偶尔为 AV1 |
| 直播 | 播放列表每隔几秒重新获取一次,并随着广播的继续而增长 |
目录,而不是书
在文本编辑器中打开 .m3u8,您会发现几十行:标题、一些参数和一长串地址。这就是整个文件。该视频位于其他地方,被切成每段几秒钟的片段,作为数千个独立的小文件存放在服务器上。
播放器读取列表,获取前几个片段,开始播放,并继续提前获取。当您的连接速度变慢时,它会切换到主播放列表中列出的较低质量的变体(一组不同的片段,以不同的比特率),并在片段之间进行切换,以便您看到质量变化而不是暂停。这种自适应切换是该格式获胜的原因。
这也解释了一件令人惊讶的事:根本没有单一的文件存在。你正在观看的电影不曾以一个物体的形式存在于任何地方。它是一千个片段和一套获取它们的说明。
为什么保存它会给你一个文本文件
因为你保存下来的正是这些。浏览器请求了你给的地址,收到 4 KB 的播放列表,并将它们写入磁盘。你实际观看的内容全部通过上千个独立请求到达,而保存操作对此一无所知。
正确下载 HLS 意味着执行播放器所做的操作,但下载到磁盘:读取播放列表,选择质量变体,按顺序获取每个片段,然后将它们拼接到一个容器中。最后一步称为 重新混合 - 视频和音频不会重新编码,只会重写为具有适当索引的单个 MP4,以便可以擦除结果。
有两件事让这件事比听起来更困难。段地址通常是相对的,并且每个会话都会发生变化,因此一小时前获取的列表可能已失效。并且流经常使用播放列表中引用的密钥进行加密、单独传送并在播放期间轮换。
如何把它存到设备上
仅适用于您有权保留的流媒体——您自己的录音、您自己的 IPTV 订阅、提供下载的广播公司。接下来是该机制的工作原理,而不是允许将其指向任何地方。
- 让下载引擎处理这些段
获取 1000 个文件并重新混合它们正是 FoxDL 的下载器对 HLS 源所做的工作:它遍历播放列表,并行拉取片段,然后写入一个像普通文件一样擦除的 MP4。到达的是一个文件,而不是一个文件夹。
- 有直接文件可用时就选它
许多网站同时提供 HLS 和普通渐进式 MP4。 MP4 是一种请求,一种文件,无需重建 — 在提供时始终是更好的选择。
- 接受有些无法保留的事实
受 DRM(FairPlay、Widevine)保护的流是端到端加密的,并且设计上不可下载。没有任何工具可以改变这一点,而声称可以改变这一点的人却在撒谎。
HLS 下载出错的地方
不重新混合的片段连接生成一个没有索引的可播放文件。它从头开始播放并且不会跳转。重新混合会写入修复它的索引。
现场播放列表没有尽头——它不断增长。下载一个就是录音,停止就停止,而不是文件结束就停止。
播放列表地址通常是经过签名且有时间限制的。今天早上保存的 .m3u8 经常到下午就找不到任何内容。
关于此格式的常见问题
这些信息的参考来源
- RFC 8216 — HTTP Live Streaming IETF
- HTTP Live Streaming Apple Developer