首页/云/云网络与负载均衡速查/HLS 音视频的缓存策略
云 DNS 与 CDN49 条

HLS 音视频的缓存策略

音视频点播按文件类型分策略:m3u8 索引文件用短 TTL 或不缓存,ts/fmp4 切片带序号可用长 TTL。直播的 m3u8 频繁变化需秒级 TTL 配合;切片一经生成不再变化,适合长期缓存。

索引短缓存切片长缓存

HLS 音视频由两类文件组成:m3u8 索引文件(播放列表)与 ts 或 fmp4 切片文件。索引会随录制或直播不断更新,必须短 TTL 甚至不缓存;切片一经生成内容就固定,文件名带序号天然不可变,适合长 TTL。把两类文件用同一套缓存策略,是音视频加速最常见的事故来源。

基本信息

m3u8 索引点播用短 TTL,直播用秒级 TTL 或不缓存
ts / fmp4 切片序号与内容绑定,可配较长 TTL
回源方式大切片依赖 Range 分片回源补齐,源站需支持 Range
验证方式分别查看索引与切片的响应头缓存策略
常见坑切片与索引用同一规则,导致播放列表长时间不更新

典型使用场景

  • 点播平台按文件类型拆分配置,提升切片命中率并降低回源
  • 直播场景给 m3u8 配秒级 TTL,保证观众及时拿到新切片
  • 长视频拖动进度条依赖 Range 请求,需要源站与 CDN 都支持分片
  • 大文件首播卡顿,通过预热把热门切片提前推到边缘
  • 活动直播结束后回收资源,避免长期占用缓存与存储

对比两类文件的缓存头

对比两类文件的缓存头
curl -sI https://cdn.example.com/vod/index.m3u8 | grep -i -E 'cache-control|age|x-cache'
curl -sI https://cdn.example.com/vod/seg-1000.ts | grep -i -E 'cache-control|age|content-length'
# 验证 Range 分片回源
curl -s -r 0-1023 -o /dev/null -w 'code=%{http_code} size=%{size_download}\n' https://cdn.example.com/vod/seg-1000.ts

文件类型与策略

文件类型建议 TTL原因
直播 m3u8秒级或不缓存内容持续追加,缓存久会卡住播放
点播 m3u8较短播放列表更新频率低于直播
ts / fmp4 切片长内容不可变,序号区分版本
封面与海报长更新频率低
直播场景把 m3u8 缓存过久会出现播放列表停滞:播放器迟迟拿不到新切片,用户看到的是画面卡住不动。
切片体积越大,Range 分片回源越重要。源站不支持 Range 时,拖动进度条会触发整片重新下载,流量与延迟同时上升。

多码率切换的影响

多码率播放会在不同清晰度的索引之间来回切换,各档的 m3u8 与切片要按同一套策略配置;某一档过期时间不一致时,切换清晰度会出现明显卡顿。

易错点

  • 直播 m3u8 设了长 TTL,播放列表不更新,观众画面卡住
  • 切片与索引用同一规则,索引被长期缓存导致点播内容一直不刷新
  • 源站不支持 Range 请求,拖动进度条回源整片文件,回源流量倍增
  • 热门直播开始前不做预热,切片首次请求集中回源压垮源站

数据来源与参考

  • 阿里云 CDN 音视频缓存文档
  • 腾讯云 CDN 音视频加速说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌