直播缓存的是“正在发生的切片”,点播缓存的是“可以长期留存的完整文件”,前者追求低延迟,缓存时间以秒为单位;后者追求高命中,缓存时间以天甚至更长为单位,这个差异决定了缓存策略、回源压力、命中率和成本结构完全不同。
直播点播CDN缓存有什么区别
直播缓存像接力赛:切片一到就传
直播流通常切成HLS或FLV小块,HLS切片常见2秒到10秒,CDN边缘节点拿到一个切片后,必须在极短时间内转发给观众,然后马上丢弃或覆盖,它无法预测下一秒的内容,缓存太久只会让观众看到延迟画面,实操中,多数CDN平台对m3u8索引文件的Cache-Control常常设为max-age=2到max-age=5,对ts分片设为max-age=10左右,某主流云厂商控制台里,直播域名默认缓存过期时间就建议与切片时长对齐。
- 缓存对象:m3u8索引、ts/fMP4切片、FLV流
- 缓存时长:秒级,通常不超过一个切片周期
- 命中率:较低,大量请求需要回源到直播源站
- 回源压力:很大,尤其热门直播间
点播缓存像仓库囤货:热门文件常驻节点
点播视频是完整静态文件,边缘节点一旦缓存了某个mp4或m3u8,就可以反复响应用户请求,不用每次回源,只要文件没过期、节点存储没满,缓存就持续有效,因此点播缓存时长可以设置为数小时到数天,热门内容的边缘命中率可以达到相当高的水平,操作上,通常对mp4设置Cache-Control: max-age=86400甚至更长,对HLS点播的ts分片也可设置较长时间。
- 缓存对象:完整视频文件、分片文件、关键帧索引
- 缓存时长:小时级到天级,可配置为7天、30天
- 命中率:较高,尤其长尾内容热度集中时
- 回源压力:较小,源站带宽成本低
| 对比维度 | 直播CDN缓存 | 点播CDN缓存 |
|---|---|---|
| 缓存单元 | 秒级切片/流块 | 完整文件/大分片 |
| 典型缓存时长 | 2-10秒 | 1-30天 |
| 边缘命中率 | 低 | 高 |
| 回源次数 | 频繁 | 少 |
| 成本构成 | 带宽成本为主 | 存储+带宽,带宽占比低 |
视频CDN直播缓存策略怎么设置
HLS切片时长与缓存时长的联动
直播低延迟和流畅度本质上是矛盾的,切片越短,延迟越低,但CDN缓存碎片越多,回源越频繁,卡顿风险上升,切片越长,CDN边缘缓存更从容,但观众看到的画面延迟变大,行业共识认为3-5秒切片是目前互动直播与普通直播的平衡点,具体配置命令(以SRS为例):
hls_fragment 5; hls_window 30;
CDN侧对.m3u8设置缓存时间2-5秒,对.ts设置缓存时间等于或略大于切片时长,比如5秒或10秒,这样边缘节点在切片有效期内可以服务多个同时请求,减少回源。
低延迟直播的缓存例外
对于WebRTC或低延迟HLS(LL-HLS),切片可能短到1秒,CDN边缘缓存时间也需要压到1秒以内,实操中可在CDN控制台对特定路径/ll-hls/配置Cache-Control: max-age=1,部分CDN支持stale-while-revalidate参数,允许节点在回源期间继续提供过期内容,缓解卡顿,但会增加延迟,需要根据业务场景权衡。
点播CDN边缘节点缓存命中率为什么普遍更高
文件完整性和热度集中是根本原因
点播视频一旦发布,内容固定不变,CDN边缘节点不需要担心“未来内容”,用户观看点播有明显的热度分布:新片、热播剧、课程头几集访问量远高于冷门内容,边缘节点有限的存储空间可以只保留这些热门对象,淘汰冷门对象,因此命中率天然比直播高得多,业内专家指出,点播CDN的缓存淘汰算法(如LRU、LFU)能有效提升边缘存储利用率。
提升点播缓存命中率的三个可执行操作
- 统一URL规范:同一个视频不要出现带不同参数或大小写不同的URL,比如统一使用
/video/12345.mp4,避免?from=app1和?from=app2被当成两个对象。 - 设置合理的缓存键:在CDN控制台把Cache Key设置为忽略后的部分参数,让带不同渠道参数的请求命中同一个缓存。
- 主动预热与定时刷新:新片上线前用CDN提供的预热API,如简米云
PushObjectCache或酷番云PushUrlsCache,提前把文件推到边缘,更新替换视频时,使用刷新API,如RefreshObjectCaches,精确失效旧缓存。
排查命中率低可用命令:
curl -I "https://cdn.example.com/video/12345.mp4"
观察响应头X-Cache: HIT或Age: 3600,若X-Cache: MISS且Age: 0,说明未命中,需要检查缓存键、过期时间或是否被频繁刷新。
国内CDN直播点播缓存配置的成本和地域差异
为什么直播CDN带宽成本普遍高于点播
直播的回源频率高,边缘节点大量请求无法本地满足,需要从源站或中间层拉流,产生更贵的回源带宽,点播边缘命中后,回源带宽只消耗在缓存未命中的比例上,占比小,因此同样观看人数下,直播CDN的总带宽成本通常更高,国内CDN厂商对直播和点播带宽报价存在差异,华东、华南等热门地域的带宽单价可能高于中西部地域,具体价格因厂商和采购量不同变动较大,操作时建议在云厂商价格计算器选择“直播CDN”和“点播CDN”分别估算。
用差异化缓存规则降低整体成本
一个实用做法:对点播业务设置长缓存,减少回源;对直播业务只对热门主播的切片做短缓存,冷门直播可降低缓存时长甚至不缓存,比如在CDN配置规则里:
# 点播
location ~ .(mp4|flv)$ {
expires 7d;
add_header Cache-Control "public, max-age=604800";
}
# 直播HLS
location ~ .m3u8$ {
expires 2s;
add_header Cache-Control "public, max-age=2";
}
location ~ .ts$ {
expires 10s;
add_header Cache-Control "public, max-age=10";
}
实际配置需根据CDN服务商语法调整,此规则可直观展示两者缓存时长数量级差异。
直播CDN要把缓存当成“短跑接力”,点播CDN要把缓存当成“长期库存”,理解这个差异后,再去配缓存时长、设置缓存键、规划成本,方向就不会错,缓存策略没有万能值,只有匹配业务形态的最优解。
Q&A
直播和点播CDN缓存可以共用一个域名吗?
可以,但通常不推荐,直播的m3u8和ts需要秒级缓存,点播的mp4和分片需要小时级或天级缓存,共用域名时,CDN规则要按文件后缀或路径精细区分,稍有不慎就会让直播切片被缓存过长,导致观众看到过期画面,或者点播文件被缓存过短,回源带宽上涨,若必须共用,建议用/live/和/vod/路径隔离,分别配置缓存规则。
视频CDN直播缓存设置多长时间才不会卡顿?
没有固定值,需要看切片时长和业务类型,普通直播HLS切片5秒时,缓存5-10秒比较常见,互动直播或低延迟场景,切片1-2秒,缓存也应设为1-2秒,缓存过短会增加回源压力,过长会增加延迟,可以先从切片时长等值开始,观察卡顿率和端到端延迟,再做微调,直播CDN的边缘节点对观众请求的响应时间多数情况下可以控制在几百毫秒内,前提是缓存策略与切片联动合理。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/644270.html





