M3U8 流媒体架构:从服务器到浏览器
8 min read
端到端流水线
- 源——文件、摄像头或直播输入。
- 编码器——压成多档画质。
- 封装器——切成 HLS(TS/fMP4 + M3U8)。
- 源站——存储并提供打包对象。
- CDN——全球缓存分发。
- 播放器——hls.js 或原生客户端渲染。
编码与打包
典型阶梯:弱网 360p 到强网 1080p/4K。封装器把每档切成数秒片段,并写媒体与主播放列表。打包教程背景:HLS 教程。
源站与 CDN 设计
- 把片段当作不可变可缓存对象。
- 直播播放列表的 TTL/禁用缓存要谨慎。
- 为浏览器播放器设置正确 Content-Type 与 CORS。
- 全站优先 HTTPS。
CORS 问题:修复 M3U8 CORS。
客户端架构
浏览器拉取主列表、选择变体(ABR)、下载片段、按需解密,并追加到 MSE 缓冲。内部原理:HTML5 M3U8 播放器如何工作。协议:HLS 如何工作。
可观测性
跟踪启动时间、卡顿比、码率切换、播放列表/片段 4xx/5xx,以及 CDN 命中率。带统计的播放器有助于开发期验流。
常见问题解答
需要专用流媒体服务器吗?
不一定——点播可以是对象存储 + CDN 上的静态文件。
打包发生在哪?
编码之后、源站/CDN 发布之前。
为什么 CDN 对 HLS 很重要?
片段非常适合作为可扩展缓存对象。
加密密钥应放哪?
放在带鉴权与 HTTPS 的受控密钥服务上。