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. 子清单里的关键字段
- #EXTINF:后续分片时长(秒)。
- #EXT-X-TARGETDURATION:分片最大时长,播放器缓冲策略依赖它。
- #EXT-X-MEDIA-SEQUENCE:直播流起始序号,直播会持续增长。
- #EXT-X-ENDLIST:点播结束标记,直播通常没有。
3. 直播与点播差异
点播(VOD)清单一般稳定且有 ENDLIST;直播清单会不断更新,播放器需要轮询拉取新分片,因此直播对网络波动更敏感。
4. 为什么“能打开链接但不能播放”
- 跨域未放开,浏览器拦截分片请求。
- 签名鉴权失效,分片返回 403/401。
- 视频编码不兼容,例如某些浏览器无法硬解 HEVC。