有个很常见问题是:“为什么需要机器学习来提高流媒体质量?”
这是一个非常重要的问题,在这篇文章中,Netflix描述了视频流所面临的一些技术挑战,以及如何通过统计模型和机器学习技术来克服这些挑战。
Netflix现在在全球拥有超过11700万名会员。超过一半的成员居住在美国以外的地方,为全球观众提供高质量的流媒体体验是一项巨大的技术挑战。其中很大一部分是在全球范围内安装和维护服务器所需的工作,以及用于将内容从这些服务器流式传输到用户设备的算法。随着Netflix迅速扩展到具有不同观看行为的观众,在具有各种功能的网络和设备上运行,流媒体视频的“一刀切”解决方案变得越来越不理想。
举个例子:
移动设备上的查看/浏览行为与智能电视上的不同
蜂窝网络可能比固定宽带网络更不稳定
某些市场中的网络可能会遇到更高程度的拥塞
由于硬件之间的差异,不同的设备组具有不同的互联网连接能力和保真度。
Netflix需要针对这些不同的,经常波动的条件调整方法,以便为所有会员提供高质量的体验。在Netflix会实时观察网络和设备状况以及能够为每个会话提供的用户体验(例如视频质量),使Netflix能够在此领域利用统计建模和机器学习。以下是我们在设备方面面临的一些技术挑战。
网络质量特性和预测
网络质量是比较难以预测的。虽然网络支持的平均带宽和返回时间是众所周知的网络质量指标,但其他特性(如稳定性和可预测性)在视频流方面有很大差异。对网络质量进行更丰富的特性分析将有助于分析网络(用于定位/分析产品改进),确定初始视频质量/或在整个回放过程中调整视频质量(更多内容见下文)。
以下是在真实观看会话期间测量的网络吞吐量的一些示例。可以看到它们非常嘈杂并且在很大范围内波动。在最近15分钟的数据中,可以预测未来15分钟的吞吐量会是什么样的。我们如何整合有关网络和设备的长期历史信息?我们可以从服务器提供哪种数据,以让设备能够以最佳方式进行调整?即使我们无法准确预测网络丢失何时会发生(突发情况众多),我们是否至少可以特定分析吞吐量的分布我们希望看到给定的历史数据?
由于Netflix正在大规模地观察这些数据,因此有可能建立更复杂的模型,将时间模式识别与各种上下文指标相结合,以更准确地预测网络质量。
如何判断一个网络预测的APP是否有用,其中一个重要标准就是他能够帮助我们在播放期间调整视频质量,下文会具体讲述。
播放期间的视频质量自适应
电影和电视节目通常以不同的视频质量编码来支持不同的网络和设备功能。 自适应流媒体算法会根据当前网络和设备条件来调整在整个回放过程中流式传输的视频质量。下图说明了视频质量自适应的设置。 我们是否可以利用数据来确定优化体验质量的视频质量?
其实可以通过多种方式测量用户体验的质量,包括等待视频播放所花费的初始时间,用户体验的整体视频质量,播放暂停以将更多视频加载到缓冲区的次数(“rebuffer”) ,以及播放期间可察觉的质量波动量。
上面是视频质量适应问题的插图。 视频以不同的质量编码(在这种情况下有3种品质:绿色高,黄色中等,红色低)。 视频的每个质量版本被划分为固定持续时间的块(灰色框)。 决定为下载的每个块选择哪种质量。
这些指标可以相互折衷:我们可以选择积极主动并传输高质量的视频,但会增加rebuffer的风险。 或者我们可以选择预先下载更多视频,并以增加等待时间为代价来降低rebuffer风险。 用户决策的反馈信号一般是延迟的同时也会比较少。 例如,积极切换到更高质量可能不会立即产生影响,但可能逐渐耗尽缓冲区并最终导致某些情况下的rebuffer事件。 当学习最优控制算法时,这种“信用分配”问题是众所周知的挑战,而机器学习技术具有解决这些问题的巨大潜力。
预测性缓存
统计模型可以改善流媒体传输体验的另一个方式是预测用户将播放的内容,以便在用户点击播放之前将全部或者部分内容缓存在设备上,从而使视频能够更快地启动或以更高的质量启动。 例如,一直在观看特定剧集的用户很可能会播放下一个未观看过的剧集。 通过将他们的观看历史的各个方面与最近的用户交互和其他上下文变量相结合,可以将其制定为监督学习模型,通过这个学习样本,我们希望最大可能性模拟用户缓存可能性以及他最后可能在哪个内容节点上结束观看,同时注意缓存以及带宽的资源约束。 Netflix已经看到在使用预测缓存模型以后用户等待视频开始所花费的时间大幅减少。
设备异常检测
Netflix可在超过一千种不同类型的设备上运行,从笔记本电脑到平板电脑,从智能电视到手机。新设备不断进入这个生态系统,现有设备通常会更新其固件或与Netflix应用程序中的更改进行交互。这些通常没有障碍但是在很容易引起用户体验问题 - 例如,应用程序将无法正常启动,或者播放的视频质量被降级。此外,随着时间的推移,设备质量也会逐渐增加。例如,连续的UI改版可能会逐步降低特定设备上的性能。
检测这些变化是一个极具挑战同时劳动密集型的工作。Alerting frameworks 可以帮我们去抓取或者发现一些潜在问题,但是一般情况下这些潜在问题却很难被界定为是个特别实际需要去解决的问题。“liberal”触发器可能引发很多误报,导致团队进行大量不必要的手动调查,但是非常严格的触发可能会错过真正的问题。但是事实上我们可以将过往触发警报的历史,以及对应问题梳理出来。然后我们可以使用它来训练一个模型,这个模型可以用来预测在一定测量条件造成事故的可能性。
即便我们确信在观察的情况一定是个bug存在,但确定根本原因通常也很困难。发生这个事故的原因是是因为特定ISP还是特定地区的网络质量波动?是因为内部A B test?还是因为设备制造商发布的固件更新?如果可以通过统计建模还可以通过控制各种协变量来帮助我们确定根本原因。
从Netflix成功实践来看,通过采用预测建模来做设备异常检测,我们已经看到整体警报量大幅减少,同时保持可接受的低错误率,极大提高了我们团队的效率。
统计建模和机器学习方法可以大幅度改善现有技术水平,但依然会有很多困难要去客服:
数据量巨大(全球超过11700万成员)
数据是高维的,并且很难为特定问题手工制作最小的信息变量集
数据中结构异常丰富,因为本身产品带来复杂情况(例如偏好,设备硬件水平)
为了在在日益多样化的网络和设备条件下传输视频,解决这些问题将是Netflix的战略核心。
本篇文章翻译自【Netflix Techblog】,想要获取更多产品干货、技术干货,记得关注网易云信博客。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。