一文看懂 M3U8:从文件结构到播放原理

目录

  1. 本质:一份纯文本清单
  2. 逐行拆解媒体清单
  3. 主清单与子清单的分工
  4. 播放器从拿到地址到出画面
  5. 直播与点播的差异
  6. 小结

本质:一份纯文本清单

不少人以为 m3u8 是某种视频格式,其实它只是一份 UTF-8 编码的文本清单,扩展名里的 8 正是 UTF-8 的意思。清单本身不装任何画面,它只负责记录"去哪里取数据、按什么顺序取"。

真正的影像被切成了一个个小体积的 TS 分片存放在服务器上。播放器读清单、领任务、按序取片,整个过程像在执行一张详尽的购物清单。

逐行拆解媒体清单

下面这份清单带了加密信息,我们逐行来看:

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="enc.key"
#EXTINF:7.5,
part-000.ts
#EXTINF:6.2,
part-001.ts
#EXT-X-ENDLIST

主清单与子清单的分工

当内容方提供多档画质时,会出现两级结构:主清单只登记各档画质子清单的地址与带宽参数,子清单才真正记录分片。播放器先取主清单挑一档,再去对应子清单领分片。这样的分层让换清晰度变成了"换个清单",播放不必中断。

播放器从拿到地址到出画面

  1. 请求 m3u8 地址,把返回的清单文本解析成任务表。
  2. 若清单里有 #EXT-X-KEY,先去取密钥备用。
  3. 下载最前面的几个分片,凑够起播所需的缓冲量。
  4. 解封装 TS 数据,送入解码器,画面和声音就出来了。
  5. 趁当前分片还没播完,提前去取下一批,如此循环。

想亲手走一遍完整流程?打开 M3U8Lab 在线播放器,粘贴任意地址就能观察加载节奏。

直播与点播的差异

点播清单末尾带 #EXT-X-ENDLIST,内容固定,进度条随便拖。直播清单则没有结尾标记,服务器不停追加新分片、淘汰旧分片,播放器必须定期重新拉取清单才能跟上最新进度——这也是 HLS 直播延迟的主要来源。

小结

把 m3u8 理解成一张"导航图"而非视频本身,许多疑问都会迎刃而解:清单定顺序,分片装画面,主子两级撑起多档画质。想继续深入,可以在 教程中心 找到 HLS 画质切换、卡顿排查等进阶文章。