开篇
本文主要总结 火山引擎视频点播产品负责人赵春波《如何利用播放器节省20%点播成本》文章
日常开发人员,主要关注前两节即可。
点播成本构成
点播成本构成中的二八原则:
- CDN 带宽成本占绝对的大头,80%都是带宽成本。
- 其次是存储和转码成本,二者占不到 20%。
- 额外还有一些其他的周边的成本,比如日志处理的数据成本、AI 处理的成本。
优化方法
在点播的成本优化中,存在 2 种“置换关系”:
第 1 种置换关系是“成本项之间的置换”,指的是「带宽 - 转码 - 存储」之间的置换。例如 H.264 升级到 H.265 编码格式,265 的压缩率更优,带宽、存储大幅减少,但转码成本大幅升高。由于带宽成本远大于转码和存储成本,这种置换通常是划算的。
当文件大小(bit率)和画面质量(码率)不变前提下,想更快则进行升级编解码算法
第 2 种置换是“成本和体验的置换”,存在“跷跷板效应”。例如增大缓存时长,卡顿率降低但成本增加;抖音小视频 feed 流场景做预加载,首屏感更顺滑但成本增加;降低码率,清晰度变差但成本减少。跷跷板中间支点是技术,通常希望固定体验、降低成本,依靠技术来支撑。
低延迟意味着高成本,硬件成本:需要投入大量机器做缓存,增加宽带,人员成本:采用udp rtp quick这种低延迟协议,人员技术需要提高
跷跷板中间支点是技术,我们通常是希望固定体验、降低成本,依靠技术来支撑。
那么回归话题,如何不降低体验同时降低成本?服务器宽带是按照单价进行售卖,以技术员角度思考:我们只能压低用量实现降本增效。
播放器的成本优化方法
缓存的浪费
播放器优化讲到为了进行秒播,我们需要对帧数据进行缓存 对抗网络抖动。成本优化方案主要就是保证视频播放同时,降低缓冲区大小。
主要方案:
1.采用静态水位思路,减少缓存水位来减少浪费,但静态水位难以抉择,可能导致卡顿增加。
2.实现动态水位算法,根据用户网络速度和稳定性、播放行为等因素动态决策缓存水位大小。
探测用户的网络速度和稳定性
根据用户的播放行为,分析用户离开频率
其他考虑因素:视频的类型和内容特点,设备的性能和网络环境的历史数据,视频的热门程度。
3.优化
Range
请求
Range是http协议的一个请求头,默认是“0-请求” ,表示请求完整文件。我们可以设计成分多段发送,因素就取决于水位线。
播放器
Range
请求应遵循两个原则:将当前视频尽快缓存到目标水位;控制Range
拆分的大小,避免太小的Range
拆分。
预加载的浪费
采用“精准预加载策略”,在时机、大小、个数上做精细化优化。时机上区分紧急和不紧急的预加载部分;大小上结合视频长度、头大小、码率等计算预加载大小;个数上按优先级依次预加载后续
N
个视频,并结合用户行为动态决策。后续
N
个视频(动态计算),结合用户本身的行为,比如用户快速滑动时,动态调整预加载的个数。如果用户快速滑动,可能会增加预加载的个数;加载粒度因素:
•1) 时机上,对预加载也进行切片,这样可以区分出来一部分是紧急的, 其他是不紧急的。比如图里,标记P0的是要最优先下载的,然后可以做预加载,预加载标记P1的部分,然后是当前视频的缓存水位,之后可以选择是否要预加载P3的部分。
•2)大小上,每个视频也会结合视频的长度、头大小、码率等因素计算出来需要预加载的大小
•3)个数上:按照feed list中的优先级依次预加载后续N个视频(动态计算),也会结合用户本身的行为(比如快速滑动)来动态决策。
清晰度的浪费
-
原因:短视频一般是小窗口,当视频是1080时,以360窗口大小播放,视频高码率清晰度就浪费了。所有降低码率和清晰度,全屏播放再回调。设置多个档位,一级一级回调控。
-
采用“窄屏低清”策略,识别窄屏播放时降低清晰度,横屏时再切换为正常清晰度。
-
采用“降档超分”策略,分发低一档的清晰度,通过客户端超分弥补主观清晰度。
异常流量的浪费
-
避免防盗链和部分视频码率过高情况发生(业务太多,转码模板设置错误)。
-
主要排查方法就是cdn和客户端日志。
-
1)在客户端对日志染色,
2)cdn日志里记录的,区分是否是播放器产生的、是否是我们点播的域名。
3)对两头的日志进行比对和分析;
-
客户端成本指标
在成本拟合方面,由于真实计费数据在左侧 CDN 而客户端侧无成本数据,需要艰难的拟合过程和大量离线校验。
提升可解释率方面,指出业务动作复杂,要涵盖所有场景使数据对齐可解释,当前可解释率达 95%已能满足日常需求。客户端的日志能够较好地反映服务端 CDN 带宽产生的成本情况
成本评估公式
这个公式可以刨除业务用量的影响因素,来衡量成本是否真的优化了。
拆解其中的万分钟CDN成本
万分钟CDN成本的影响因子会涉及到价格、码率、浪费率、带宽流量比。
举一个真实的例子:
有个客户反馈成本增加了,但是客户自己的业务用量在波动,不太好判断是什么情况。我们拆解分析万分钟CDN成本的具体影响因子,就发现了万分钟CDN成本确实是涨了11%,主因是“码率”涨了8%,“浪费率”增加了5%。
参考文献
如何利用播放器节省20%点播成本火山引擎基于支撑抖音业务实践,发现通过播放器优化为点播业务节省20%甚至更多的成本,文章 - 掘金
学习资料分享 https://github.com/0voice