有个很常见问题是:“为什么需要机器学习来提高流媒体质量?”
这是一个非常重要的问题,在这篇文章中,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】,想要获取更多产品干货、技术干货,记得关注网易云信博客。

Netflix如何使用机器学习来提升流媒体质量?相关推荐

  1. Netflix 如何使用机器学习来提升流媒体质量

    有个很常见问题是:"为什么需要机器学习来提高流媒体质量?" 这是一个非常重要的问题,在这篇文章中,Netflix 描述了视频流所面临的一些技术挑战,以及如何通过统计模型和机器学习技 ...

  2. Netflix:如何通过机器学习提高流媒体质量?

    如何通过机器学习来提升用户观看视频的体验?Netflix撰文,描述了通过网络质量预测,自适应码率选择,预测缓存,设备异常检测等方向进行的探索.LiveVideoStack对文章进行了摘译. 文 / C ...

  3. 英文书《用unreal来学习c++》_用机器学习来提升你的用户增长:第四步,客户流失预测

    作者:Barış KaramanFollow 编译:ronghuaiyang 正文共:8484 字 13 图 预计阅读时间:25 分钟 导读 我们通过客户分群和终生价值的预测得到了我们的最好的客户,对 ...

  4. 12种提升视频质量的方法

     点击上方"LiveVideoStack"关注我们 翻译.编辑 | Alex 技术审校 | 章琦 本文来自OTTVerse,作者为Krishna Rao Vijayanagar. ...

  5. 数据挖掘机器学习[七]---2021研究生数学建模B题空气质量预报二次建模求解过程:基于Stacking机器学习混合模型的空气质量预测{含码源+pdf文章}

    相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据挖掘机器学习---汽车交易价格预测详细版本[二]{EDA-数据探索性分析} 数据挖掘机器学习 ...

  6. 华为如何生成日志_华为应用市场AppGallery Connect开发者沙龙:全面提升应用质量...

    在繁多设备类型.机型.系统下,在复杂的网络环境下,在多样用户群和使用场景下,常规测试无法解决所有真实环境中的问题.应用发布后,发生崩溃和性能问题非常影响用户的体验.为了更高效地发现和解决问题,华为应用 ...

  7. 【实战】用机器学习来提升你的用户增长:(三、预测客户的终生价值)

    作者:Barış KaramanFollow      编译:ronghuaiyang 正文共:8484 字 13 图 预计阅读时间:25 分钟 导读 前一篇文章我们对客户进行了分群,但是我们还希望对 ...

  8. android注解的作用,Android 用注解来提升代码质量

    Android 用注解来提升代码质量 Android,注解,annotation 2018.07.13 Android 提供了一个注解的 support 包,这个注解包配合 IDE 可以用来提升我的代 ...

  9. 如何将知识引入机器学习模型提升泛化能力?

    摘要:近年来,基于数据驱动的机器学习模型开始提供可替代的方法,并在许多任务中优于纯物理学驱动模型. 本文分享自华为云社区<如何将知识引入机器学习模型提升泛化能力?>,作者:PG13 . 基 ...

最新文章

  1. Linux中/etc/resolv.conf文件简析
  2. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第1章-绪论
  3. 【小松教你手游开发】【面试必读(编程基础)】堆和栈的区别(转过无数次的文章)...
  4. 50道练习带你玩转Pandas
  5. 剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)
  6. 删除Nifi中的template
  7. java 网络编程学习笔记
  8. django 1.8 官方文档翻译: 2-5-7 自定义查找
  9. 微信新表情戒烟了!腾讯:雪茄大佬成了歪嘴战神
  10. 输出字符串引用名java_将方法名称作为字符串给出时,如何调用Java方法?
  11. MySQL的my.cnf详细配置说明
  12. tomcat source code in eclipse
  13. 【机器学习】逻辑回归 LR 算法 整理
  14. 经典问题之约瑟夫问题_C语言实现
  15. ctc decoder
  16. php deprecated,PHP Deprecated: Function eregi() is deprecated解决方法
  17. Redis中的SDS
  18. NR 5G SRB的定义和类型
  19. pytorch骚操作之梯度累加,变相增大batch size
  20. python 爬取数据(CBA所有球队数据) -爬虫

热门文章

  1. 以架构师的眼睛看世界-Architect Inside
  2. android 如何使用LaunchMode
  3. android 判断进程是否处于前台
  4. 从fragment开始向上查找实现了某个接口的parent Fragment 或者 Activity
  5. 效能改进之项目例会导入实践 1
  6. Python数值类型:小数与百分数的转换
  7. 2张表,轻松搞定你的收入问题
  8. 然之协同系统3.5(OA+CRM+CASH+TEAM)
  9. nginx的root alias 指令
  10. [C#]最简单的Base64加密解密