服务器 频道

点播降本增效中的播放器策略

  在点播业务中,带宽成本在总成本(转码+存储+带宽)中占据绝对的大头。B站很早就开始利用技术手段,对带宽成本进行优化。

  由于带宽成本=带宽单价*带宽用量,一般降低成本的方式有两种:

  降低带宽单价:例如使用更廉价的CDN服务。

  降低带宽用量:例如大家熟悉的编码算法优化,可以在同画质的前提下,将稿件码率进行压缩。

  之前的优化主要在服务端,而带宽消费的最终端——播放器,在成本中起到的作用,却鲜有关注。

  针对这一盲区,B站播放器团队利用数据进行了理论分析,发现播放器在带宽用量上有较大的优化空间。从2022年初至今,我们利用播放器中的端智能策略持续降本增效,至今已降低15%的点播带宽成本。这篇文章将详细介绍我们播放器策略优化中的技术手段和思考沉淀。

  1. 点播带宽中的浪费

  首先需要强调的是,降低播放器带宽成本的前提,是必须保障用户高清流畅的播放体验。用技术指标来说,就是不论降低带宽单价,还是降低带宽用量,都不能劣化用户的卡顿率、首帧时长、加载失败率以及画质。

  因此,我们的重点是识别正常播放消耗之外的带宽用量,并尽力减少浪费。

  1.1 浪费成因

  从理论上分析,浪费主要来自过多的缓存:

  整个CDN下行传输链路上的缓存节点非常多,除了播放器中用户观看所必要的缓存,还包括播放器未被播放的缓存、边缘节点缓存、源站缓存。其中播放器中未被播放的缓存,是浪费中的最大组成,也是本文关注的重点。造成播放器缓存浪费的场景有:

  提前退出

  预加载了未播放

  向后拖拽进度条

  切换分辨率

  1.2 度量播放器中的缓存浪费

  理论分析之后,我们来精准计算播放器中的缓存浪费。该用哪个指标度量呢?

  1. 首先考虑的指标是:  

  这个指标非常易懂,但在不同业务场景中,无法作为统一的评价标准。例如短播放时长的单次播放下载带宽,天然比长播放更低,但这并不意味着短播放的浪费更少。

  2. 因此我们试图兼容时长的影响,使用了第二个指标:  

  利用这个指标,我们证实了前文的观点,发现短播放的浪费确实远远大于长播放。  

  举个例子,用户观看同一个视频,缓存大小一直为5秒,比较1秒退出和5秒退出两种情况,前者的单位时长下载带宽是后者的3倍。

  不过,虽然我们可以使用单位时长下载带宽来估算成本,但这个指标并不能指出浪费的大小。另外,单位时长下载带宽指标,非常容易受稿件大小的影响,无法客观评价播放器的策略是否已经做到极致。

  3. 于是我们使用带宽冗余率,衡量用户正常播放消耗之外的带宽占比:  

  总下载带宽:指播放器应用层接收到的带宽总量。传输层的带宽浪费和优化不在本文中赘述。

  总消费带宽:指用户实际观看到的带宽量。我们用送到播放器中解码的字节数计算。没有送去播放的帧,不算入消费带宽。

  这个指标消除了播放时长、稿件码率带来的影响,长期来看只会受到用户播放行为和播放器缓存策略的影响。由于统计学的大数定律,用户的播放行为在长期来看是非常稳定的,所以我们可以用带宽冗余率来衡量播放器缓存策略的好坏。

  经过一段时间的数据开发、校准和分析,我们发现播放器中的浪费果然是巨大的。在没有预加载的场景中,带宽冗余率超过30%,而在有预加载的场景,带宽冗余率甚至能达到50%。

  2. 成本与体验是否可以兼得

  存在即意义,甚至在某种情况下是合理的。

  播放器设置固定缓存水位线的初衷,是为了抵御网络可能存在的抖动,降低卡顿风险。这在互联网诞生的早期,网络基础设施不够完善的时代,可以非常有效地提升播放体验,增大留存。

  然而,在网络基建日益完善、甚至直播都在追求低延时“0缓存”的今天,点播中过多缓存所带来成本付出,已逐渐超过体验增益。

  让我们从数据上说明这个问题。下图列出了用户的网速分布、流畅播放所需的最小缓存,以及固定的缓存水位线:  

  可以看到:

  区域A的用户缓存是过剩的,不会发生卡顿;而区域B的用户缓存是不足的,当网络抖动时,极有可能耗尽缓存导致卡顿。

  互联网早期时,由于带宽紧张、网络信号不稳定、音视频编解码技术不成熟等因素,区域B大于区域A,提高缓存长度的边际收益是显著的。

  现在,随着4G乃至5G的普及,大多数用户的带宽可以满足4K甚至8K视频的需求,区域A远远大于区域B。可以说只有极小部分的用户会需要用到大缓存。但是,这并不意味着我们可以直接降低缓存长度,因为用户对于卡顿的容忍度也在降低。

  因此,简单且固定的缓存策略已经无法满足成本与体验的双重要求了。幸运的是,我们知道一定存在那条“流畅播放所需最小缓存”线,那么就让我们用技术手段求索这条线,既减少区域A的浪费、又减少区域B的卡顿。

  3. 技术优化手段

  3.1 智能缓存策略

  我们设计实现了智能缓存策略,从网络风险和用户习惯两个角度实时决策“流畅播放所需最小缓存”。总的原则是“强网络或不稳定播放时尽量少缓存,弱网络或稳定播放时尽量多缓存”,难点是如何识别网络的强弱和用户的偏好。

  网络风险

  我们分析的网络风险考虑的主要是中长期的规律。一方面是因为瞬时网络变化难以预测,更重要的是缓存长度的控制并不能够立即带来效果。在网速突降时,即使立即升高缓存长度,当时的低网速也不能让缓存区快速充满;而在网速由低变高的场景,由于网络还未稳定,也不应该立即降低缓存。

  我们策略中使用的中长期风险有:

  1. 网速大小风险

  主要考虑历史网速的绝对值大小,以及与稿件码率的相对大小。

  该项指标描述的是当前网速是否足够支撑稿件码率的持续下载,在策略中的权重最高。

  2. 网络抖动风险

  主要考虑历史网速的抖动大小、以及网络环境切换(无网/蜂窝网络/WLAN间的切换)的次数。

  该项指标描述的是当前网速能够持续保持的概率,如果网络抖动风险太高,预测的网速也需要大打折扣。

  3. 多次卡顿风险

  主要考虑用户一段时间内连续发生多次卡顿的概率。

  该项指标描述的是用户体感上的真实感受,基于QoE评价对缓存策略进行负反馈调整,防止出现未考虑到的最坏情况。

  综上,基于网络风险的缓存可以用以下公式计算:  

  可以看到,在没有任何网络风险的播放场景(占比90%以上),仅使用最小缓存即可满足流畅播放。

  用户习惯

  上面的模型仅考虑了网速,但缓存大小的合理值还受用户习惯的影响。

  1. 缓存命中率

  主要考虑用户接下来是否会出现影响缓存命中的行为。

  我们期望用户长时间观看,这会提高缓存命中率;而未看完提前退出、拖拽进度条、手动切换分辨率等,会导致缓存浪费。

  缓存命中率指标描述的是用户当前是否达到稳定播放的状态。用户最常见的不稳定状态,就是在寻找某一特定进度位置的视频内容、或者翻看动态寻找感兴趣的内容时。

  如果用户并未表现出对内容的强烈兴趣,那上文所给的最小缓存也是浪费。而如果用户在一个视频中长时间观看时,即使历史网络很好,播放器也应该给更多的缓存,以防止可能突发的网络抖动。

  从全局角度来说,提升缓存命中率最好的方式是提高用户和内容的匹配度;而从单一模块的技术角度来说,播放器的更优解是识别出当前用户的稳定播放倾向画像,动态调整不同倾向时的最小缓存。

  2. 倍速播放

  主要考虑用户多倍速场景下快速消耗缓存的风险。

  我们将视频当前播放的速度融入网速和分辨率的计算模型中,根据播放速度来决策缓存的合理值。

  智能缓存策略总结

  最终,我们基于用户习惯缓存+网络风险缓存构建了智能缓存策略。在持续的算法迭代、AB测试之后,实现了卡顿指标基本一致的前提下,带宽成本优化10%的效果。

  3.2 智能预加载策略

  预加载在B站的竖屏模式中大规模应用,给用户提供了接近“0首帧”的流畅播放体验。

  相比于非预加载场景,预加载的主要挑战在于多下载实例的调度管理。最初的预加载实现简单粗暴:

  在点进竖屏视频时,同时启动多个视频的下载任务

  预加载视频下载任务启动时只加载很少的视频时长

  等当前视频缓存较充裕时,按照优先级依次给后面的视频增大预加载缓存

  虽然上述预加载策略可以大幅度降低首帧,但我们分析发现,卡顿和带宽消耗两项指标都不理想,尤其是带宽冗余率达到了50%以上。

  卡顿分析

  预加载场景的卡顿原因主要是带宽竞争,分为启播和播放过程中两个阶段。

  启播阶段的带宽竞争是因为进入竖屏模式时的多下载任务竞争。启播时预加载的视频越多,拉流的速度越慢,出首帧的速度甚至可能不如非预加载场景。由于B站生态中竖屏和横屏场景之间的切换较多,因此有较多竖屏播放会面对这种启播时的竞争,我们要最高优先级解决。

  播放过程中的带宽竞争是因为缺少即时暂停预加载任务的机制。网速良好时,预加载的视频会持续拉取数据,而在网速变差时,如果不能及时停止其他任务的竞争,当前视频的播放就会受到影响。

  综上,我们需要更实时、更细致、更兼容的智能策略应对网络的种种变化。

  带宽冗余分析

  主要是预加载缓存过大,且未考虑用户习惯就提前启动多个稿件的加载。

  我们的解决方案

  我们构建了预加载的智能模块,实时输入各个下载任务的网络和稿件信息、优先级、用户操作等,利用算法实时决策每个任务的实时动作。具体决策输出有:

  是否开始下载数据

  是否暂停下载数据

  目标缓存时长

  算法的整体优化思路如下:  

  网络极差时不进行预加载,减少竞争导致的卡顿

  网络极优时或播放时长短时,只预加载启播的一小段缓存,减少带宽浪费

  网络一般且播放时间长时,需要预加载更多内容,预防可能出现的网络抖动

  在实现的过程中有很多值得注意的点:

  从其他场景进入预加载场景时,不论网络好坏,都不应该立即创建过多的下载任务。必须保证当前视频顺利播放后,再按照优先级对后续的视频预加载。

  当用户不习惯竖屏场景时,应减少预加载的个数。

  暂停机制的实现需要及时生效,否则难以起到减少竞争的效果。因为播放器的下载任务一旦启动后,至少存在应用层和传输层两部分缓存,如果只暂停应用层从传输层拉取数据,传输层的socket还会继续从网络拉取数据。解决办法是给预加载的任务设置较小的socket缓存区长度。

  长时间播放时,预加载的任务需要对连接保活,保证切换到播放状态时能最快速度启动下载。

  最终通过算法上的持续优化,智能预加载策略全量上线,卡顿率降低了20%,同时结合智能缓存策略,节约了竖屏模式中20%的带宽成本,实现了鱼与熊掌兼得的效果。

  4. 播放器策略的长期监测体系

  在前述所有的优化中,改进策略都离不开数据的支持。可以说,一套长期稳定的数据监测体系,和能用技术语言解释的指标,是我们改进路上的指明灯。

  我们构建了完善的数据监测体系来观测成本和体验,按照实时性分为四大模块:

  长期指标看板:记录指标的长期走势,用于分析不同维度对关键指标的影响,提炼出问题瓶颈和可优化点。

  重要指标日报:汇总昨日各模块重要指标的变化,通知相关人员查看,并对每日级别的数据异动进行告警。

  异常指标实时告警:分钟级别的实时告警以及分析看板,支持最快发现问题、归类原因,并指派专人进行解决。

  AB实验实时分析:秒级数据查询工具,帮助研发人员快速查询实验效果,及时调整参数和验证,快速迭代算法。

  有了多层次、立体的数据监测体系,我们就可以在质量稳定可控的前提下,持续发现系统瓶颈,并利用AB实验这个工具,以小步快跑的方式,更快速地对策略进行优化。

  5. 总结与展望

  现在大多数主流互联网公司都会用到播放技术,音视频已经成为互联网的基石。其中,不论是提升播放体验,还是降低带宽成本,都需要播放器做好最后一公里的优化。

  在播放器降本增效的项目中,我们发现成本和体验是一体两面,两者共同的基石是对播放过程中风险的识别。一个好的策略,能够通过算法调优、工程优化等技术手段,将播放场景进行细分,既识别出风险较高的体验问题,又识别出风险较低的成本浪费。因此,我们撰写此文与各位同行交流学习,欢迎各位读者一起研讨合作。

  除了本文中提到的策略,播放器在音视频全链路中能做的事还有很多,包括端云一体的网络传输优化、图像增强、异常数据监测等等。在元宇宙时代,用户对码率、流畅度、时延等体验的要求会更高。让我们迎接挑战,利用技术促进业务更好地发展。

0
相关文章