HLS
HLS / m3u8 浏览器播放与诊断
解释 HLS playlist、TS/fMP4 segment、Safari 原生 HLS 和 hls.js 播放诊断。
网页能否直连
可播放
链路位置
浏览器分发格式
浏览器结论
Safari 原生,其他浏览器通常用 hls.js
一句话结论
HLS/m3u8 是网页播放里最常用的兼容方案之一。它把视频拆成 playlist 和一段段小切片,浏览器或 hls.js 按顺序下载播放。
它在视频链路里的位置
HLS 通常是最终播放分发格式,不是摄像头原始协议。RTSP、RTMP、SRT 等源流可以由服务端转成 HLS。
一个 m3u8 只是目录,真正的视频在它引用的 TS 或 fMP4 segment 里。
在浏览器项目里怎么用
Safari 可以原生播放 HLS。Chrome、Edge、Firefox 通常用 hls.js 把切片喂给浏览器的媒体能力。
前端测试时不能只看 m3u8 能不能下载,还要看子 playlist 和 segment 是否能访问。
服务端需要做什么
服务端要输出 master playlist、media playlist、segment,并设置正确 MIME type 和 CORS。
如果用于直播,还要控制切片时长、列表窗口、缓存策略和延迟目标。
常见开发场景
- 公网直播、点播、移动端播放、需要 CDN 分发的场景。
- 适合优先追求兼容性,不适合极低延迟控制。
排查顺序
- m3u8 能打开但不能播时,优先查 segment CORS、MIME type、404、鉴权和编码。
- H.265 HLS 在 Safari/iOS 更友好,但不能假设所有 Chrome/Firefox 都能播。
推荐转换路径
- RTSP/RTMP/SRT -> HLS 用于兼容播放。
- 低延迟要求高时,评估 LL-HLS 或 WebRTC。
最小可用实现
- 前端:Safari 走原生 video,其他浏览器优先 hls.js。
- 后端:生成合法 m3u8 和 segment,保证 playlist 与 segment 都能跨域访问。
开发者判断标准
HLS 不能只按名字判断是否可播,要看它在链路中承担的是源站输入、网页播放输出、低延迟会话,还是网络辅助能力。当前浏览器结论:Safari 原生,其他浏览器通常用 hls.js。落地前需要确认真实源站、是否需要服务端转换、CORS/HTTPS 策略、编码支持和延迟目标。