NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

优酷智能档的三个技术挑战和解法

  • 2019-08-12
  • 本文字数:2817 字

    阅读完需:约 9 分钟

优酷智能档的三个技术挑战和解法

在你追《长安十二时辰》时,机器学习和大数据也没闲着,一直在后台帮你选“档位”,是标清、高清还是蓝光?机器学习会根据你的网络偏好、信号强度等智能地做选择,让你不在感觉到视频卡顿。这背后的技术原理是什么?

为什么会产生卡顿?

理论上,和人饿了就没力气一样,产生卡顿和缓冲的直接原因是视频数据不足。当播放器进入“饥饿”状态,就需要等待足够多的视频数据来恢复播放。但在真实场景下,网络信号质量变差、视频码率峰值过高、网络带宽竞争等,都会导致视频缓冲。


在优酷,我们有多个技术小组都在针对各种播放场景进行技术优化。这其中就有“智能档”,它融合大数据分析、AI 机器学习等能力,通过动态化地播放与网络环境相匹配的最佳清晰度,来提升视频流畅度和观看体验。

智能档的技术原理

智能档的技术原理并不复杂,就是通过将不同码率、分辨率的视频文件,切分成 5-10s 的视频片段,并由算法实时动态决策适合播放的文件分辨率,通过动态的降低、升高观看视频的清晰度和码率,以适应复杂多变的外部网络环境,避免可能发生的视频缓冲。



难点是,如何将理论付诸实践,让用户获得丝滑顺畅的观看体验。


目前,主流的自适应播放协议以苹果公司的 HLS(2009 年起草)、MPEG-DASH 协议(2010 年起草)以及近两年推出的 CMAF 协议为主。优酷智能档在起步阶段,结合业务需求与平台特性,选择以 HLS 协议为基础协议进行自定制的扩展和平台实现。



作为一个有着近 20 年的成熟业界应用协议,智能档的算法层面也有着非常丰富成熟的学术积累,使用“Adaptive Streaming”作为关键字,在 Google Scholar 搜索引擎检索,约有 100 万左右的论文结果。这些研究成果,也基本奠定了优酷智能档的算法框架和理论依据,并为前期的快速迭代上线提供了非常大的助力。


随着智能档的产品化以及迭代加速,即使站在巨人的肩膀,我们也很快就遇到新挑战。

挑战一、高清和流畅的平衡点很难权衡

在学术界,高清与流畅的平衡往往是被转化为一个目标函数的优化过程,通过引入一个 QoE(Quality of Experience)公式,将高清晰度的观看时长、卡顿次数、不同清晰度的切换频次等进行算法拟合,使用加权计算后的结果作为衡量算法表现的依据。


通过观察以下公式的计算因子,我们可以很容易地发现,计算结果其实与视频观看时长正相关:观看视频时间越长,得分越高,而卡顿、清晰度切换等负面行为的惩罚机制会被弱化。



而 QoE 类的计算公式带来的另一个问题是,它作为一个复合评分机制,有较多的变量因素参与到计算中,因此线上 QoE 监控数据的波动变化,除了可以给出“整体的播放体验在变化”外,几乎没有其它任何信息可以提供给技术进行进一步的问题分析和优化。

技术解法:

针对上述两个问题,我们将 QoE 公式进行了时间维度的归一化调整,并建立了一系列中间技术观测指标,用来进行线上体验的监控度量、线下算法的优化。


为了更快发现问题、更贴近用户使用场景,我们分别针对升降档的频次、清晰度的变化趋势、不同清晰度的缓冲频次、观看时长等,建立了完善的中间度量指标,来准确全面地观测智能档的真实表现。


挑战二、线下算法训练与线上实际效果的差距较大

目前,业界主流的算法以 MPC 极其衍生算法为主。MPC 是一个典型的工业领域的控制算法,尤其合适在复杂多变的环境中进行自我矫正,来执行特定的任务。如路径跟随控制、自适应导航算法等,在工业界取得了非常大的成功。在智能档算法中,典型的 MPC 算法通过将带宽、视频码率、缓冲时长等因素作为模型输入,以决策选择最佳播放策略。



在摩尔定律的加持下,计算机算力的指数级提升以及 GPU 并行计算模型的成熟等,将深度学习领域推向了新的巅峰,也带来了爆炸式的应用场景增长。


在优酷,我们也积极尝试基于深度学习、线性回归等不同方向的控制算法。其中,在深度学习算法Pensieve 的基础上的改良算法,已经开始进入了测试阶段。



无论是 MPC 算法还是机器学习算法,都需要 QoE 公式作为优化的目标函数,其算法内核都需要一组超参来对输入的特征变量进行动态决策。而模型的训练优化,离不开高质量的数据积累。


数据对模型表现的重要性,对于从事机器学习相关领域研究的读者来说是不言而喻的。对于不熟悉的读者,我们可以将数据与模型的关系类比为“课本与学生”的关系,当课本中的知识错误或者脱离了实际的应用场景,那么通过学习课本而获取知识的学生,也必然在实际的环境中处处碰壁。


例如,使用 Pensieve 算法依赖的公开网络数据集训练出来的模型,在我们实际的应用中,尽管在训练阶段取得了不错的结果,但是上线后的泛化能力较差,导致播放体验差强人意。 因此,我们正在基于优酷海量用户行为数据,建立与完善一套高质量的网络模型数据集,来持续优化算法模型,提升用户播放体验。

技术解法:

针对模型算法的可解释性较差,严重依赖高质量数据训练的弊端,我们自主研发了基于规则、Buffer、MPC 等不同策略的复合模型算法,并结合在流媒体播放领域积累多年的核心技术积累,在实际应用中取得了非常好的成果,其中高清视频播放时长占比较业界算法有 5%-10%左右提升,卡顿次数下降 10%-20%左右。

挑战三、实际的用户体验需要更“智能”

任何算法策略,既需要数据喂养,以实现迭代优化,更要符合现实场景需求。智能档上线初期,我们常听到用户反馈说智能档“很傻”,或者觉得“莫名其妙”。通过对用户反馈场景的复现、日志分析排查等,我们更加意识到,智能档的策略绝不能仅停留在算法层面的”选择最优解“上。


例如,由于典型的智能档算法在优化目标函数时,总是倾向于避免缓冲、减少切换频次等来获取更高的 QoE 得分,而逐渐变得”功利“起来:它更倾向于使用一个较低的清晰度开始播放,在网络质量不太理想的场景下,更不愿意作出”乐观的“尝试,避免因为错误的判断而导致得分变低。 这就会让实际的播放体验变得较差,用户自然认为算法不够智能,因为“我的网速明明可以播 1080P,为什么要总是给我放高清”,或者“清晰度总是一会儿变模糊,一会儿变清晰”。


这些“不智能”的表现,主要是因为传统算法往往是在实验环境下构建,并且进行了问题的抽象和简化,使得通过 QoE 度量的用户体验,略显单薄。


从真实用户体验出发,我们将智能档的体验标准进行了更细致地描述:


  • 总是用符合我预期的清晰度播放,不论是“开始播放”还是“播放中快进”等;

  • 对视频清晰度有强烈诉求的用户,要避免频繁的降低清晰度;

  • 手机流量比较紧张的用户,要更多使用较低清晰度播放。

技术解法:

基于这些认知,通过建立用户偏好画像、网络度量模型、典型场景划分等手段,我们正在为不同诉求的用户提供个性化的智能策略。例如,得益于日益完善的网络度量模型以及智能档算法优化,偏好“高清”播放体验的用户已经能够在 92%的观看时间内,享受到最佳画质。而流量比较紧缺的用户,又能在流畅观影的前提下,以最合适的清晰度享受最好的观看体验。


最后,作为一个程序员,我的目标就是“没有卡顿”。当然,这更是优酷智能档的技术方向,在“不卡顿”之上,为不同用户提供差异化的最佳播放体验。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-08-12 11:463142

评论

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

视频门禁的优点及应用场景

anyRTC开发者

音视频 WebRTC RTC sdk

阿里开源:历年亿级活动高并发系统设计场景总结

Java架构师迁哥

大厂面试内幕:阿里内部整理出的5000页Java面试复盘指南,起飞

Java架构追梦

Java 架构 面试

请警惕 ES 的三大坑

悟空聊架构

elasticsearch 架构 分布式 微服务 ES

DWF低代码开发技术及其在数字化运营和运维平台建设中的应用

云智慧AIOps社区

低代码 智能运维

一个月吃透这份阿里高级专家的《Java500道面试手册》成功拿下了腾讯offer!

Java架构之路

Java 程序员 架构 面试 编程语言

备战 60 天,成功上岸滴滴后,我特地把金三银四备战资源库整理出来了

Java 程序员 架构 面试

Flink的批数据SQL

五分钟学大数据

flink 5月日更

吐血总结 | Java并发编程 72 变

Java架构师迁哥

阿里P7简历上都有哪些可以拿得出手的项目?

Java架构师迁哥

Alibaba面试官:“这该死的程序员,技术竟如此深厚!”

Java架构之路

Java 程序员 架构 面试 编程语言

GitHub连夜封杀!这份阿里 10W 字内部 Java 字面试手册到底有多强?

Java 程序员 架构 面试

外包CRUD3年,被导师一句话点醒,直接涨薪9K(Java岗)

Java架构师迁哥

突击 22 天面进腾讯,给到 32K*14 薪!全靠这份阿里面试参考指南了

Java 程序员 架构 面试 计算机

扫盲篇-什么是分布式任务调度

TASKCTL

大数据 分布式 分布式锁 分布式任务调度 zookeeper分布式锁

GitHub上标星75k+超牛的《Java面试突击版》,分享PDF离线版

Java 程序员 架构 面试

微服务注册中心:Consul——服务注册

程序员架构进阶

微服务 Consul API网关 28天写作 5月日更

发布引发的curator报错:instance must be started before calling this method

林一

dubbo zk 优雅停机

Flume自定义拦截器

大数据技术指南

大数据 5月日更

一周信创舆情观察(5.17~5.23)

统小信uos

阿里人是如何设计系统抵挡亿级流量冲击的?(全彩版小册开源)

Java架构师迁哥

关于echarts使用geo制作地图tooltip不显示问题

孤独的西北疯

高德地图只显示一个省的地图

孤独的西北疯

终于看到阿里大牛能把springboot讲的如此出神入化

Java 程序员 架构 计算机

CCF C³-04@百度丨“AI+开源”的昨天今天和明天

百度大脑

百度 AI

爱了! Alibaba技术官甩出的“阿里内部Java成长笔记”,技术人成长的标杆!

Java架构之路

Java 程序员 架构 面试 编程语言

学到了,用138个案例讲明白了Spring全家桶+Docker+MQ

Java架构师迁哥

助力秋招第三弹:Java集合框架体系详细梳理

北游学Java

Java 面试 框架 秋招

C++ 协程的近况、设计与实现中的细节和决策

Linux服务器开发

c++ 线程 后端 协程 Linux服务器开发

ThingJS粒子特效一键实现雨雪效果

ThingJS数字孪生引擎

可视化 场景应用 3D可视化 数字孪生

国家工业信息安全发展研究中心与华为联合发布《数据安全白皮书》

DT极客

优酷智能档的三个技术挑战和解法_AI&大模型_肖文良_InfoQ精选文章