欢迎来到我的博客文章!所有文章都是满满的前端干货,文章简明扼要。
H5 直播的数据流向可以概括为四个阶段:
采集推流 → 服务端处理 → CDN 分发 → 拉流播放
💡 浏览器端推流较难,通常需借助 getUserMedia + WebRTC 或 MediaRecorder API。
流媒体服务器(如 SRS, Nginx-rtmp):
<video> 标签或 Canvas 上这是 H5 直播最核心的技术差异点,决定了延迟和兼容性。
机制:
服务器每隔 2~5 秒生成一个 .ts 视频片段,并更新 .m3u8 播放列表。
浏览器行为:
播放器请求 m3u8 → 解析最新片段 URL → 下载 ts 文件 → 解码播放。
缺点:
必须等一个切片下载完才能播,导致延迟累积(通常 10 秒以上)。
优化:
低延迟 HLS (LL-HLS) 可将延迟降至 3 秒左右。
机制:
服务器不切片,而是通过 HTTP 长连接,源源不断地发送 FLV 数据包。
浏览器行为:
<video> 标签不支持 FLV优点:
延迟比 HLS 低,实现简单。
缺点:
iOS Safari 不支持 MSE,无法播放(需转 HLS)。
机制:
基于 RTP/RTCP 协议,数据分片(Packet)传输,无需等待文件生成。
架构:
优点:
毫秒级延迟,支持双向互动。
缺点:
带宽成本高,服务器压力大,穿透复杂。
为什么浏览器能播直播?关键在于以下两个 API:
作用:
允许 JavaScript 动态构建媒体流,并传递给 <video> 标签。
流程:
意义:
让浏览器无需插件即可播放 HLS/FLV/DASH。
作用:
提供更底层的音视频编解码控制,性能比 MSE 更好。
现状:
正在逐步普及,配合 WebTransport 可实现更高效的低延迟直播。
| 需求场景 | 推荐方案 | 理由 |
|---|---|---|
| 大型赛事/春晚 | HLS | 兼容性最好,CDN 成本最低,延迟不敏感 |
| 电商带货/秀场 | HTTP-FLV (Android/PC) + HLS (iOS) | 平衡延迟与成本,国内主流方案 |
| 在线课堂/连麦 | WebRTC | 必须毫秒级延迟,否则无法对话 |
| 监控/安防 | WebRTC / WebSocket | 要求实时性极高,且需双向控制 |
H5 直播的本质 = 流媒体协议转换 + CDN 分发 + 浏览器 MSE 解码