← Blog.backToBlog

M3U8 流媒体架构:从服务器到浏览器

8 min read

端到端流水线

  1. ——文件、摄像头或直播输入。
  2. 编码器——压成多档画质。
  3. 封装器——切成 HLS(TS/fMP4 + M3U8)。
  4. 源站——存储并提供打包对象。
  5. CDN——全球缓存分发。
  6. 播放器——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 的受控密钥服务上。