M3U8 入门说明:结构、字段与播放机制

M3U8 是 HLS 协议使用的播放列表文本文件。播放器并不直接播放 m3u8,而是解析里面的媒体分片地址(通常是 ts 或 fmp4),按顺序拉流并拼接播放。

1. 主清单与子清单

常见场景下,一个入口 m3u8 是“主清单”,里面列出了多路码率;播放器会根据网络状况选择一个子清单继续播放。

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2400000,RESOLUTION=1280x720
high/index.m3u8

2. 子清单里的关键字段

3. 直播与点播差异

点播(VOD)清单一般稳定且有 ENDLIST;直播清单会不断更新,播放器需要轮询拉取新分片,因此直播对网络波动更敏感。

4. 为什么"能打开链接但不能播放"

5. 实际案例分析:直播流加载失败

假设你拿到一个直播地址 https://example.com/live/stream.m3u8,在浏览器里能打开看到文本内容,但播放器始终黑屏。按照以下步骤排查:

6. 进阶:理解分片加载时序

播放器加载 M3U8 时,内部时序大致如下:首先下载并解析主清单,根据带宽选择合适码率;然后下载子清单,获取分片列表;接着按顺序下载分片并解码播放。直播场景下,播放器会定时重新拉取子清单,获取新分片。理解这个时序有助于排查"为什么直播延迟越来越高"或"为什么拖动进度条后卡顿"等问题。如果子清单更新不及时,直播延迟就会累积;如果分片下载超时,播放器就会进入缓冲状态。