文 / Chaitanya Ekanadham 译 / Dumpling 审校 / Alex Chow
Netflix向全球超过1.17亿的会员提供视频流媒体服务。超过一半的会员居住在美国之外,这些地区对于Netflix的发展有很大的商机。为全球观众提供高质量的流媒体体验是一项巨大的技术挑战,其中很大一部分工程方面的工作是要在全球范围内部署和维护服务器,以及提供高效的传输算法用于将视频内容从这些服务器分发到用户设备。随着我们的服务迅速向具有多样观看行为的观众群扩展,运行在复杂多变的网络和性能差异显著的设备上时,针对流媒体视频采用“一刀切”式的解决方案就变得越来越不理想了。例如:
网络质量特征描述和预测
众所周知,网络质量是很难表征和预测的。尽管有一些常用的指标,例如平均带宽(average bandwidth)和往返时间(RTT)等可以用于描述网络质量。但是在流媒体领域,还有一些其他很重要且不一样的特性,例如 网络稳定性和可预测性等。收集更加丰富的网络质量特征对于分析网络状况(用于确定优化目标/分析产品改进幅度)、确定播放的初始视频质量、以及在播放期间动态调整视频质量,被证明是十分有用的。
下面几个例子是用户真实观看过程中测量到的网络吞吐量(throughput)数据。可以看到它们很嘈杂,在一个比较大的范围内波动。如果已知过去15分钟的数据,我们能否预测接下来的15分钟内的吞吐量?应该如何利用网络状态和设备性能的长期历史信息?服务器应该提供什么类型的统计数据,才能使设备做最优自适应调整?即使无法准确预测网络掉线的发生时间(这可能是各种各样的原因,例如,微波炉开启时或在经过隧道的车上播放时),给定历史数据,我们能否至少可以描述出所期望看到的网络吞吐分布?
我们正在大规模地观察这些播放记录,因此有机会生成更复杂的模型,将时域模式识别与各种环境指标相结合,从而能更准确地预测网络质量。
实际观看时测量的网络吞吐示例
网络预测的一个有效应用是在播放过程中根据网络条件动态自适应视频质量,我们将在下一节中对此进行介绍。
播放期间的视频画质自适应
为了支持不同的网络条件和设备功能,Netflix的电影和综艺节目通常被编码压缩为不同的视频画质(quality)。自适应流媒体传输算法负责在整个播放期间根据当前网络状态和设备状况进行画质自适应调整,从而选择最佳的视频流(请参见:http://yuba.stanford.edu/~huangty/sigc040-huang.pdf,我们同事在这方面的一个研究案例)。下图描述了一个视频质量自适应的示例。我们是否可以利用数据驱动的方式来确定最佳的视频质量从而优化体验质量(quality of experience)? 体验质量可以通过几种方式来综合衡量:
视频质量自适应问题的说明。将视频编码成不同画质级别(此处为3种画质:绿代表高,黄代表中,红代表低)。每个画质级别的视频被划分为固定时间长度的分片(由灰色小方块代表)。下载每个分片之前,都要对应该下载哪个画质级别的分片做个决策。
对于这些质量体验指标,我们需要仔细权衡取舍:可以激进的选择非常高画质级别的视频,但会增加重新缓冲的风险,或者我们可以选择预先加载更多视频,并以增加等待时间为代价降低重新缓冲的风险。对于某个决策,其反馈信号一般有延迟而且比较稀疏。例如,向更高质量的激进切换可能不会立即产生不良影响,但可能会逐渐耗尽缓冲区,并最终在某些情况下导致重新缓冲。在学习最优控制算法时,这种“信用分配”问题是一个众所周知的挑战,而机器学习技术(如强化学习方面的最新进展)有很大的潜力能够解决这些问题。
预测缓存(Predictive caching)
在另一个领域,统计模型也可以被用于改善流媒体传输的体验:预测用户即将播放的内容,从而在设备上提前缓存(或部分缓存),使视频播放能以更快的速度或更高的质量启动。例如我们可以利用这样一个事实,即观看特定连续剧(series)的用户很可能会播放下一个未观看的剧集。通过把他们的详细观看历史与最近的用户交互、上下文变量相结合,我们可以把这个过程抽象成一个有监督的学习问题,从而最大化缓存命中用户最终实际播放内容的可能性,同时也会考虑到缓存大小和可用带宽方面的资源约束。我们已经看到在使用预测缓存模型时,等待视频启动的时间大大减少了。
设备异常检测
Netflix在千余种不同类型的设备上运行,从笔记本电脑到平板电脑、智能电视、手机到流媒体播放器。新设备不断加入这个生态系统,而现有设备经常会更新固件并与Netflix应用程序的更新交叠。这些更新通常不会引起什么问题,但在规模非常大的条件下,用户体验出现问题的情况就很多了。例如,应用程序无法正常启动,或者播放体验会以某种方式受到限制或降级。另外,随着时间的推移,设备质量的变化趋势会逐渐累积。例如,用户界面连续的链式变更可能会缓慢降低特定设备的性能,而对于其中任何单独更改,问题并不会立即有显著影响。
检测这些变化是一个很有挑战,十分依赖人工的过程。报警系统是揭示潜在问题的有用工具,但通常很难确定将某些事情鉴定为有问题的正确标准。一个宽松的触发器最终会带来太多的误报,致使我们的设备可靠性团队进行大量不必要的人工调查,而一个非常严格的触发器又可能会漏掉真正的问题。幸运的是,我们有触发警报的历史,以及对于每个问题由人工做出的实际上是否真实可处理的判断结论,那么我们就可以用它来训练一个模型,来预测给定的一组实测环境条件最终会演化为真正的问题的可能性。
即使我们确信我们正在观察一个真正的问题,确定根本原因也常常是一个挑战。由特定接入商(ISP)或特定区域网络的质量波动导致的?或是与内部一个A / B测试或已上线的更改有关?设备制造商发布了固件更新?特定设备组或组中的某个特定机型有变更?统计建模也可以帮助我们通过控制各种协变量来确定根本原因。
通过采用预测建模来确定设备可靠性问题的优先级,我们已经看到整体警报量的大幅下降,同时保持了可接受的低漏报率,我们预计这将推动Netflix设备可靠性团队大幅提高效率。
上述问题是我们认为统计建模和机器学习方法可以解决相关技术挑战的例子,并且可以推动现有技术水平的提升,原因如下:
解决这些问题是Netflix战略的核心,因为我们需要在日益多样化的网络和设备条件下对视频进行流式分发。 (Chaitanya Ekanadham) |