【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

如何利用播放器节省 20% 点播成本?

火山引擎-赵春波

  • 2023-09-20
    北京
  • 本文字数:5927 字

    阅读完需:约 19 分钟

如何利用播放器节省 20% 点播成本?

点播成本节省的点其实涉及诸多内容,例如 CDN、转码、存储等,而利用播放器降本却是很多客户比较陌生的部分。火山引擎基于内部支撑抖音集团相关业务的实践,播放器恰恰是成本优化中最重要和最为依赖的部分。


火山引擎的视频团队做了份数据统计,在一个很经典的视频业务中,我们在 2022 年至 2023 年大约 1 年半的时间里,针对这个业务进行了 33 次成本优化点,其中 13 次是播放器主导的优化,其余的有 12 次也是需要播放器强配合的优化也就是说在这个业务里,75% 的成本优化是直接或间接由播放器参与,可见客户端对成本优化的关键作用。


最终我们在很多实践中也发现,通过播放器的优化可以为点播业务节省 20% 甚至更多的成本,本篇内容便将聚焦在播放器层面如何节省成本这一主题上。

一、点播成本构成


在视频点播的成本构成中,有很明显的二八原则:

  • CDN 带宽成本占绝对的大头,80% 都是带宽成本;

  • 其次是存储和转码成本,二者占不到 20%;

  • 额外还有一些其他的周边的成本,比如日志处理的数据成本、AI 处理的成本。


我们可以将成本的优化理解成“置换”,在点播的成本优化中,就存在 2 种“置换关系”:


第 1 种置换关系是“成本项之间的置换”,指的是「带宽-转码-存储」之间的置换。



上图是 H.264 升级到 H.265 编码格式的例子,265 的压缩率相对比 264 要优 20%-40%,所以带宽、存储上 265 是大幅度减少;但是 265 的计算复杂度要复杂很多,所以转码成本大幅度升高。而这个图不是一个等边三角形,带宽成本要远大于转码和存储成本,所以这个置换是非常划算的


第 2 种置换是“成本和体验的置换”,我们一般说是“跷跷板效应:



例如:

  • 我们增大缓存时长,对应体验上「卡顿率」就会降低,但是成本会增加;

  • 抖音小视频 feed 流场景,我们做预加载,这时候首屏感会更顺滑,但对应的成本是增加的;

  • 降低码率,那么体验上感到清晰度变差了,而成本就是减少的;

  • 跷跷板中间支点是技术,我们通常是希望固定体验、降低成本,依靠技术来支撑。


所以我们总在说降成本,那降的到底是什么呢?我们这里用一个很简单的乘法公式来表示:


在过去,“单价”是非常明显的因素,大家往往选择在采购环节尽量的压低单价; 而“用量”上通常会被认为是无法改变的业务因素。但“用量”实际上是包含 2 类,一类是正常用量,确实是比较难改变的业务因素,但另一类是“浪费”,是可以被优化的。所以如何识别出浪费、降低浪费,是播放器降本的关键点


那么造成浪费的因素有哪些呢?



例如在视频播放过程中,会包括“已播放的数据”,和“未播放但已经缓存的数据”,如果用户中途离开播放,那其中“已缓存的数据”都是浪费了。所以我们定义“浪费”是“已经缓存了、但不需要的字节数”。


从理想上来说,没有浪费是最好的;但往往业务中,浪费是非常大的,大于 30%是很常见的。常见的可能带来的浪费包括了:

  • 未播放离开

  • 向后拖拽

  • 切换档位

  • 清晰度溢出(举例:很小的手机屏幕播放 4K 的内容,肉眼感知不到清晰度的区别)


二、播放器的成本优化方法


针对上述的浪费我们进行了如下的具体优化方法:

(一)缓存的浪费



承接上图的播放器缓存示意图,如果用户播放过程中离开了,那么深灰色是浪费部分。很容易就想到我们减少深灰色的部分的大小,比如把播放水位降低 1/3(也就是图中浅黄色的部分减少掉),不去缓存,那么浪费就明显的减少了。


这个就是静态水位的思路,通过减少缓存水位来减少浪费。


但是,静态水位是很难抉择的,水位大了浪费多,但是水位太小了,卡顿就会明显的增加。


这里有个马太效应,从原理上,缓存的本质是为了对抗网络的抖动的。网络稳定好时,只需要很少的缓存就足够了,但是网络好时缓存会填充的很快,大部分时间都是饱和的。反之,波动大的网络,需要更多的水位,但总的上限也有限,无法提供有效的缓存。


为此我们实现了的动态水位算法,我们根据一些因素来动态的决策缓存水位的大小

  1. 探测用户的网络速度和稳定性,对稳定性高、速度快的,我们减少缓存;对网络速度差、稳定性差的网络,就增大缓存,这样在网络抖动时就能够有更大的缓存空间使用;

  2. 根据用户的播放行为,通过数据分析道,视频观看的前期,用户离开的比例会更高,观看的后期,离开的比例就会降低,所以前期的缓存水位小一些,后期的缓存水位大一些;

  3. 一些其他的因素,但目的是在每次播放时决策出一个尽量合理的缓存水位,来平衡卡顿和浪费。


决定了缓存水位大小之后,还有个细节点就是 Range 请求。



Range 是 http 协议的一个请求头,默认是“0-请求”,表示请求完整文件。


左侧的图示意,如果是单独发一个“0-请求”,那么 CDN 服务端就会持续的返回整个文件,如果在中途断开,从服务端视角来说,这些数据已经发送过去了,无论客户端是否需要,都已经计费了,就构成了浪费。


在上图,我们分成 3 段来发 Range 请求,中途断开时,是可以停止掉最后一段,那么浪费就大幅度减少了。同样,静态的 Range 是很难抉择的,Range 拆分的太细会引起卡顿的提升;Range 过大了成本节省的效果又不够了。


这里我们引入目标水位的概念,就是刚刚讲的动态水位算法所决策出来的水位大小。


播放器 Range 请求的应遵循两个原则:

1. 将当前视频尽快缓存到目标水位。

2. 控制 Range 拆分的大小,避免太小的 Range 拆分。



上图是动态水位算法+动态 Range 拆分的效果示意图:


横轴代表时间线。纵轴上图是视频下载的大小,蓝色块代表一个 Range 请求;下图是缓存的大小,橙色的折线表示缓存随着视频文件下载和播放时间的波动情况,横着的虚线是目标水位。


我们从左到右,分析下目标水位和 Range 的关系:

  • 第 1 条竖红线,决策出来第一条目标水位 1,是启播水位,启播时的 Range 会略大于后面的 2 个 Range;

  • 第 2 条竖红线,是判断出一次水位提升,有可能是检测到网络波动,会提高目标水位到水位 2,同时做一次略大的 Range 请求来达到目标水位;

  • 第 3 条竖红线,是再次提升目标水位,到水位 3,有可能是因为观看时长增加到阈值,判断离开概率较小,所以保持高水位;

  • 后续的播放,在目标水位 3 随着时间波动,Range 大小也会稳定些。


从最终效果上看,在任意一个时间点离开,都能够保障相对合理的浪费。


我们在不同业务上实践了很多次动态水位+动态 range 的 AB 实验,在体验指标持平或更优的前提下,带宽降低 8%。

(二)预加载的浪费


在类似于抖音这种 feed 流下滑的场景,会提前加载好下面的视频,能够使滑动更顺畅,我们 叫“零首帧”效果,里面作用最大的就是预加载。


一般的预加载是固定几个视频,每个视频固定的大小。为了得到更好的预加载效果,会尽量多、尽量大的做预加载,也就构成了浪费。



我们做的“精准预加载策略”,在“时机、大小、个数”上做精细化的优化:

  • 时机上:对预加载也进行切片,这样可以区分出来一部分是紧急的,其他是不紧急的。比如图里,标记 P0 的是要最优先下载的,然后可以做预加载,预加载标记 P1 的部分,然后是当前视频的缓存水位,之后可以选择是否要预加载 P3 的部分。

  • 大小上:每个视频也会结合视频的长度、头大小、码率等因素计算出来需要预加载的大小

  • 个数上:按照 feed list 中的优先级依次预加载后续 N 个视频(动态计算),也会结合用户本身的行为(比如快速滑动)来动态决策。


AB 实验证明,能够提升预加载利用率 5%,对应流量成本降低约 0.8%。

(三)清晰度的浪费


现在的主干场景是在移动端看视频,大家都会有启播选档的策略,就是在播放启动时,决定所需要的清晰度,一般是跟随网速、码率来决策的。

经常大家面临的场景是,在竖屏里播放横屏视频时,实际上在很窄的一个空间里进行播放,这个时候,如果依然使用完整的清晰度,那么肉眼是看不出来的清晰的。而且,通常情况下小窗播放时用户的主要关注度也并不是画面清晰度,所以就产生了实际上的清晰度浪费。


我们对应的解决策略叫“窄屏低清”,就是识别出来显示区域很窄时,播放低清晰度的视频(比如 360P),当需要横屏时,再快速的切换为正常的清晰度。这里如果是 mp4 格式播放,需要转码也做些配合,支持 mp4 的帧对齐和平滑切换。


在很多应用中都是很常见的,也有常见的小窗播放,多个业务的 AB 实验都能有 3% 以上的成本收益;

另外清晰度上还有个很棒的能力,是客户端超分。随着客户端超分能力的优化,现在很大一部分机型在客户端向上超分一个档位是完全没问题的,耗电可以忽略。


对应节省成本的策略是“降档超分”,就是分发的清晰度向下降一档,然后再通过客户端超分降主观清晰度补回来。在国内当前的机型条件下,大部分业务能够有 6~8% 左右的成本收益

(四)异常流量的浪费


我们根据「播放器日志是否可以识别」、「是否是正常流量」把流量分成了 4 类。


在非常多的业务中会发现第三种情况:流量有异常浪费,比如有部分视频码率过高,可能是没转码,或者转码模版用错了。我们开始时会认为“这些都是很明显的失误,业务层小心点不就行了么?”,但后来我们做成了单独的异常流量分析模块。我们跟业务尝试分析原因,发现业务总是复杂的:

  • 业务场景很复杂,包括短视频、长视频、主页视频、广告视频等;

  • 研发的迭代通常会带来些历史问题;

  • 并不是所有的人员都需要持续的感知成本,只要有一个环节漏掉了,那么就可能会造成很大浪费。


这里还有个问题点,如果是体验问题或者 bug,总会有用户保障,来及时发现。但成本问题,用户基本是无法发现的,发现时就比较晚了。


我们是通过端到端的日志分析来发现和避免这些浪费的。原理很简单:

  • 在客户端对日志染色;

  • cdn 日志里记录的,区分是否是播放器产生的、是否是我们点播的域名;

  • 对两头的日志进行比对和分析。


不仅如此,这里还有个副产物,是通过这些日志分析,识别到业务真实是被盗链了,然后做盗链的治理。

三、数据挖掘成本优化空间


以上是火山引擎是实际业务服务过程中探索出的优化方案,但优化是不是有上限的,优化到什么水平可以达到成本和体验的平衡,更多的能力是通过数据能力持续的挖掘出来的。


先从结果上来看,我们成本优化后通常会有 2 个报告:

1、AB 实验报告,里面会分析对 QoE 的体验影响多少,对成本优化的影响多少,比如图中的人均播放时长增加多少,成本降低多少;做成本的 AB 实验,依赖一个工具——客户端成本指标。

2、价值回溯文档,用于核算真实收益有多少,一般发生在完整上量之后,比如 1 个月或 2 个月后。关键结果叫“万分钟播放成本”,这个对应的依赖的工具是“成本评估公式”。

(一)客户端成本指标



这张图从左往右是视频点播的数据流向。想要建设好成本埋点,有 2 个难点:


1、成本拟合。因为真实的计费数据是左侧 CDN 的计费日志,在右侧的客户端侧实际上是没有成本数据的,所以我们需要把数据缓存层的对成本的埋点尽量的拟合,使之尽量的对应到 CDN 的计费日志。这个过程是非常艰难的,我们通过了大量的离线校验。


2、提升可解释率。业务动作比较复杂(播放、预加载、拖拽、重播等等),举个例子,重复播放,播放层是记录 2 遍播放时长的,但是因为有缓存,真实的网络请求只有 1 遍。我们想要两份数据尽量对齐、可解释,就需要涵盖住尽量所有的业务场景。


我们当前达到了“可解释率达到 95%”,也就是说比如服务端 CDN 产生了 100Gbps 的带宽,客户端的日志能够拟合解释清楚 95%。


虽然还不到 100%,但日常来做成本优化、成本归因已经足够了。


下图是成本指标进入 AB 实验后的结果:


图:核心指标


图:归因指标


成本数据进入 AB 实验有什么用呢?有 2 点:


1、快速判断客户端的成本变化结果。大部分成本优化的能力都是伴随着策略的,不同策略有不同的结果置换关系,我们需要通过实验来确定效果。假设没有客户端的成本数据的话,我们就需要用不同的 CDN 域名来实验,这是很低效的,并且域名带宽的波动也会引起成本的波动。而在客户端成本指标进入了 AB 实验之后,大部分场景都直接看报表数字就可以了。


2、机制上可以防蜕化。业务的产品经理、分析师等角色也日常会关注到实验数据的,当成本数据也进入实验后,这些角色也可以关注到成本的变化,这样就能够防退化了。举个例子,版本升级时,只要经历了 AB 实验,就很难有成本退化的问题。

(二)成本评估公式


“成本评估公式” ,本质是一种单位成本的衡量方法。



我们叫“万分钟播放成本”,分子是点播的 IT 成本,分母是点播视频消费时长。


从技术侧来看,分子是“CDN、存储、转码等各种成本的加和”,分子是播放的时长。


这个公式很简单,但为什么要这么做呢?


因为涉及到成本优化,就会跟采购、财务团队打交道,采购、财务看到的都是每月的账单,业务用量每个月都在上下波动,导致账单每个月也都在波动。万分钟播放成本是单位成本,就可以刨除掉业务用量的影响因素,来衡量成本是否真的优化了。


拿其中的万分钟 CDN 成本来举例:


万分钟 CDN 成本的影响因子会涉及到价格、码率、浪费率、带宽流量比。


举一个真实的例子:有个客户反馈成本增加了,但是客户自己的业务用量在波动,不太好判断是什么情况。我们拆解分析万分钟 CDN 成本的具体影响因子,就发现了万分钟 CDN 成本确实是涨了 11%,主因是“码率”涨了 8%,“浪费率”增加了 5%。

四、总结和展望

(一)建标准


在服务业务的过程中,大家经常会面临一个问题,还能再降多少?极限是多少?


这些问题是很难回答的,因为每个业务的场景都不同,举例缓存浪费中,每个业务的客户中断离开的模型可能都不一样,那么建设统一的标准就很难了。


火山引擎目前通过 3 种方式来建设标准:

  1. 通过排名获取标杆:将类似场景的业务进行排名,对齐当前技术做的最好的,可以作为一种标准;

  2. 离线的实验来模拟:我们做了成本的自动化测试平台,设计测试 case,测试出来不同的参数的成本结果是多少,最后总结分析出来极限是多少;

  3. 通过“理论公式”来推算“标准” :举例通过“视频播放时长、中途离开比例”的关系,然后推算出理论的优化空间有多少。

(二)做顾问


面对的业务越来越多,降本的能力也越来越多时,就会遇到效率问题:功能这么多,应该用哪些?每个业务的场景也不一样,那么策略参数应该怎么配置呢?


万分钟播放成本分析和策略推荐


解决方法是做顾问。如上图所示,其是我们的一个万分钟 CDN 成本与理想万分钟成本的一个差异分析表,我们给计算出了对应的差异,然后再给出可以补足差异的策略或功能推荐。


当然,这个表只是一个总结概览,更多的内容我们会整理成“顾问服务报告”,把各个点的差异、业务分析、解决方法与业务逐一的讨论分析。总之,万分钟播放成本是一个非常简单、容易落地、价值很大的工具,大家计算下万分钟播放成本,如有调优的诉求,非常欢迎来与火山引擎交流。火山引擎视频点播https://www.volcengine.com/product/vod



本文作者简介

赵春波,火山引擎视频点播产品负责人。十余年视频相关研发和产品经验。目前主要负责火山引擎视频点播的产品工作,支撑抖音、西瓜等业务的点播基础技术、体验优化和成本优化等,并将这些技术能力沉淀到火山引擎,来服务更多的行业客户。

2023-09-20 09:004167
用户头像
鲁冬雪 InfoQ 策划主编

发布了 338 篇内容, 共 198.0 次阅读, 收获喜欢 271 次。

关注

评论

发布
暂无评论
发现更多内容

Aescripts StyleX for Mac激活版(AI高级视频风格化工具)

iMac小白

Aescripts StyleX下载 Aescripts StyleX插件

2024西安国际风机展|2024中国工业通风设备展会

秋硕展览

2024年中国(南京)国际生活用纸及造纸设备展会

秋硕展览

如何发现更多比特币大户钱包地址?以bitget 钱包为例

鳄鱼视界

ubuntu下docker配置:python,cuda教程。

百度搜索:蓝易云

Python Docker Linux ubuntu cuda

Minitab Express for Mac(数据分析统计软件)v1.5.0激活版

iMac小白

Minitab Express for Mac Minitab Express下载 Minitab Express破解版

草图大师SketchUp Pro 2023最新版激活安装教程

iMac小白

SketchUp Pro 2023下载 SketchUp Pro 2023破解 SketchUp Pro 2023 mac

Zebec Protocol 薪酬支付工具 WageLink 上线,掀新一轮薪酬支付浪潮

大瞿科技

Python 函数:定义、调用、参数、递归和 Lambda 函数详解

小万哥

Python 程序员 软件 后端 开发

Nik Collection 6 for Mac(PS滤镜插件套装) v6.1.0中文激活版

iMac小白

PS滤镜Nik Collection Nik Collection下载 Nik Collection插件

Studio One 6 for mac(音乐制作工具) v6.2.0完整激活版

mac

Studio One 音乐制作软件 苹果mac Windows软件

不愧是疑问解决神器(二)!你强任你强👍👍👍

控心つcrazy

JavaScript

寓言灼真知——比小说更好看的理财故事书

少油少糖八分饱

赚钱 理财 日积月累 致富 寓言

文心一言 VS 讯飞星火 VS chatgpt (118)-- 算法导论10.3 3题

福大大架构师每日一题

福大大架构师每日一题

Kubernetes多租户实践

俞凡

架构 Kubernetes 云原生

Nautilus Chain 与 Coin98 生态达成合作,加速 Zebec 生态亚洲战略进

威廉META

【运维】mysql与mongo的自动备份脚本

百度搜索:蓝易云

MySQL mongodb 云计算 Linux 运维

BOE(京东方)首个智慧医养示范社区启航 树立医养融合新标杆

科技热闻

如何发现更多比特币大户钱包地址?以bitget 钱包为例

石头财经

Bitget Wallet教程:快速寻找比特币和以太坊大户钱包地址的技巧

BlockChain先知

Animate 2024 for mac(an2024) v24.0永久激活版

mac

an 苹果mac Windows软件 Animate 2024 动画制作软件

MATLAB R2023b for Mac中文激活版(数值计算和科学编程软件)

iMac小白

MATLAB破解版 MATLAB R2023b MATLAB R2023b下载 MATLAB R2023b破解版

Nautilus Chain 与 Coin98 生态达成合作,加速 Zebec 生态亚洲战略进程

鳄鱼视界

Ableton Live 11 Suite for mac(音乐制作软件) v11.3.11永久激活版

mac

Ableton Live 11 Suite 音乐制作软件 苹果mac Windows软件

如何利用播放器节省 20% 点播成本?_字节跳动_InfoQ精选文章