前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >看高清视频,如何做到不卡顿?

看高清视频,如何做到不卡顿?

作者头像
AI科技大本营
发布2020-06-16 16:30:35
2.8K0
发布2020-06-16 16:30:35
举报

作者| 阿里文娱高级无线开发工程师 去疾

编辑 | 屠敏

5G时代,从生产端到播放端,超高清音视频将成为主流,如何让播放更加“智能”,让用户随时随地都有流畅观看体验,既“高清”又“不卡”?

本文将详解优酷“智能档”的是什么、为什么以及落地效果,尤其是如何突破“传统自适应码率算法”的局限,解决视频观看体验中高清和流畅的矛盾,并以 “热综热剧”等场景为蓝本,一睹“大项目”背后的视频播放实践。

本文主要分为四部分:

  1. 背景:智能档是什么、有什么?
  2. 挑战:传统自适应码率理论与播放实践的碰撞
  3. 实践:清晰度策略优化迭代过程——整体框架建设,从数据中分析和学习
  4. 总结:优酷智能档的成果和新技术的应用

优酷“智能档”是什么、有什么?

为了大家能够对优酷智能档有一个比较直观的了解,我这里准备了一个带宽限速条件下播放的视频。视频1是传统1080P蓝光清晰度,视频2就是今天要提到的“智能“清晰度。我们看到视频1已经开始卡了,视频2还在继续播放,但清晰度角标已经变为超清了。

视频1

视频2

好,刚刚播放的是《长安十二时辰》张小敬追捕狼卫的一段视频,是在带宽限速的情况下播放的,大致是在 1.5Mbps 左右。在这样的条件下左侧使用 1080P清晰度,当画面变化较大,对应的码率也波动较大的时候,发生了卡顿,而且提示是否要切换到智能播放。而右侧的“智能”清晰度则在这种情况下,发现了网络不足以支撑蓝光,降级变成了超清,避免了卡顿,然后在这段播过去之后又重新恢复到蓝光。

▐ 优酷“智能档”简介

看完这段视频,我们来明确一下,关于智能档的几个基本问题:

1) 什么是智能档,这个大家刚刚也都看到了,智能档是一种新的清晰度选项。

2) 为什么要有智能档?我们可以从两个角度回答:

  • 让播放体验更加智能。例如,用户在一个不确定的网络环境下,不知道什么清晰度最合适,选择高清晰度,卡了;选择低清晰度,画质体验又不好。优酷智能档就是要解决这个选择问题,智能匹配最合适的清晰度,避免用户自己反复去尝试;
  • 避免播放卡顿。例如刚才的《长安十二时辰》视频,在网络限速或者更常见的4G下,网络波动大,智能档实时地调节清晰度,在保证用户观看更高清晰度的情况下,避免播放卡顿。

3) 是如何实现的呢?这就要提到自适应码率技术,根据网络环境和播放过程中的状态,去实时决策选择最合适的清晰度。

▐ 自适应码率技术

自适应码率这项技术,早在 2002 年前后就已经被人提出,大致在 2010 年开始在互联网领域得到应用,逐步走向成熟。关于自适应码率的技术方案,一般由两部分构成:

  • 第一部分协议框架:支持多个不同码率的清晰度传输和播放,约定服务器端、客户端的;
  • 第二部分算法策略:更具体地确定什么状态下匹配哪种码率、哪种清晰度更好。

在协议框架上,苹果较早提出了 HLS 的方案。后来 MPEG 专家组提出行业标准DASH;除此之外,微软、Adobe等公司也有技术方案,但设计上比较类似,大同小异。

在算法策略上,是百花齐放。过去几年,学术界涌现出不少相关论文,比如右侧列表中所示,归纳起来分为4类:

第一类,基于网速预测,根据网速带宽和码率的大小进行选择;

第二类,基于播放器的buffer来判断决策;

第三类,引用一句话网络名言“小孩子才做选择,我全都要”,即融合前面两种因素;

第四类,更高级和领先的,将近几年的人工智能领域的技术引进来,根据机器学习、神经网络模型来选择清晰度。

▐ 自适应码率技术的工作流程

自适应码率技术在从生产到播放的整个链路,分成5步:

第一步,原始的视频资源文件,它可能只有一个比较高的清晰度;

第二步,生产端对视频进行转码和切片,根据播放需要,转码成不同清晰度的码流。一般清晰度越高,码率越高,文件越大。每个码流都切分成时间对齐的分片,一般是10s;

第三步,在转码和切片之后,经过 CDN 节点在网络上进行分发;

第四步,各自适应码率的算法按策略选择需要的清晰度;

第五步:客户端下载这个清晰度的分片文件,进行播放。

▐ 自适应码率算法:基于带宽速率

看完框架链路,我们再来看算法策略,先是最简单的基于带宽的策略。

这类算法的原理很简单,就是基于过去一段时间的网络下载速度,对网络情况做预测,如果比视频某一个清晰度的码率大,那么就可以选择这个码率,否则只能尝试更低清晰度。右上角图中列出了4种算法,都是基于速度进行判断的,清晰度和网速变化是正相关。

这个算法简单直接,缺点是如果过去网速高,对网络的预估又过于自信,网络波动落差大时,就无法下载完预期的清晰度内容,容易卡顿。

另外,清晰度受网络波动影响大,网络一波动,就会频繁的切换清晰度,这相当于忽略掉播放器中buffer的作用。

▐ 自适应码率算法:基于Buffer

基于buffer,就是播放器的缓冲区还能播多长时间来选择。这种方式直接放弃速度,只看 buffer,没数据可播时才会卡。当buffer 低时,选择最低清晰度,buffer随播放进度和下载进度一点点变化,清晰度不会有太大波动。

缺点是buffer的变化相对缓慢,会丧失对网络变化判断的灵敏性。比如用户网络换环境立刻变好了,但是 buffer 涨到最高清晰度的区间是需要一个过程的。

一个典型的案例就是 BBA 算法,我们可以右侧这张图,横轴是 buffer,纵轴是清晰度码率,它们之间维持一个线性关系,buffer越高清晰度越高,直到达到最高的清晰度;同时为了保证不卡顿,最低清晰度也要攒够一定的buffer,才开始考虑换更高的清晰度。

▐ 自适应码率算法-MPC

这类算法有一个里程碑式的进步,给出一个 QoE 的公式化定义。QoE就是体验质量,包含清晰度、卡顿时间、清晰度切换3个因素。一旦确立好QoE 的计算公式,在网络状况完全确定的情况下,我们就可以将自适应码率算法转化为一个求最大值的数学问题。

但是网络状况完全确定需要“上帝视角”。一般情况下,网络波动是可完全预测的,在一个较短时间内,我们认为网络波动会比较小,后面网络情况和前面已经统计到的速度存在一定关联性,所以上面的这种求全局最大值的就可以退化成为一种局部的计算,并尝试通过局部累加,达到近似全局最优解,这好比是从一个全局的动态规划变成一个局部的贪心思路。

所以它的具体决策过程是:

第一步,根据过去的情况,判断网络质量,预测速度;

第二步,生成未来N片,比如5片,将所有可能的清晰度组合做列表;

第三步,逐一尝试,找出所有可选项中 QoE 最大的组合;

第四步,将选择中下一片清晰度作为本次清晰度选项,每个分片选择时都依次类推。

▐ 自适应码率算法-基于机器学习

机器学习就是为计算机提供大量数据,让计算机基于这些数据进行计算,在特定领域做出判断,并针对判断给出评定标准,告知机器判断是否正确、准确,经过反复大量的学习过程,提高计算机判断能力的准确性。

强化学习是机器学习的一种,是针对一个过程该如何做决策的学习。

如下图,机器人学习养花,看见花要枯死了,选择用水浇花,获得一个正向的奖励;如果看到花快被淹死了,还去浇花,那么就只能得到惩罚,此外还可以根据情况考虑是否施肥、打药,训练机器人把花养好。

近年比较火的机器学习方式就是深度神经网络。我们可以将“养花过程中机器人的动作” 理解为一个非常复杂的数学函数,输入是花的状态,输出是应该浇水还是施肥的决策选择,花是否养好作为不断调整函数内参数的依据,一旦参数调整好,这个函数就可以给出准确决策,神经网络就相当于这个复杂的函数,具体的一个模型实例就相当于这个函数里所需的所有系数。

我们做清晰度选择的例子和养花的过程很像,输入是过去的网速情况、buffer情况等,输出是清晰度的选择。

2017年开始有论文提出类似的方案,优点是用大量的数据去训练,训练好了就相当一个“经验丰富”的人,它看过很多历史网络变化的数据和选择结果、知道遇到特定的情况应该如何选择。弊端是太“高深莫测”,可解释性不强。

▐ 业界应用情况

国外的视频产品,Youtube 和 Netflix的手机客户端都有对自适应码率技术的应用。在国内,早在两年前,优酷就在做类似尝试,但最初的清晰度选项叫做“自动”,在起播时帮用户选择一个合适的清晰度,但是播放过程中如果网络有波动它不会变。随着优酷技术体系不断升级,现在优酷能够通过“智能”选项,随时随地的根据网络情况进行清晰度选择和必要的切换。

实际应用中的挑战

自适应码率技术的理论虽好,在大规模实践中,却屡屡碰壁,归纳起来有如下的挑战:

▐ 实际应用中的挑战:起播处理

起播的典型挑战是:

  1. 典型策略:环境未知,如何避免卡顿;
  2. 网络环境良好的状态下,如何提升清晰度。按照学术界的算法论文,起播时为了避免卡顿,都是从最低清晰度开始,但实际尤其对于没有使用过同类产品的用户,10s的模糊不能被接收的;
  3. 起播速度:如何快速播放。为了高清和起播后不卡顿,多加载一会儿,行不行?不行!快速起播是良好播放体验的开始。

所以我们要遵循的原则是:

  1. 如果网络足够好,起播就提供高清晰度;
  2. 为了避免卡顿和起播太慢,必须在网络差的情况,适当地选择低清晰度;
  3. 不能为清晰度选择而给播放带来太大的额外开销。

优酷是如何解决的?

首先,根据视频是否为首次播放进行分类。不是首次播放的,可参考前一次播放的清晰度;是首次播放的,参考播放服务的请求耗时。在连播情况下,既然可以用上一次播放的清晰度,也可以利用上一次的播放中的速度信息,更确切知道当时的网络情况;

其次,我们发现请求耗时的区分度并不大。播放器也在进行一个网络质量评估的项目,这样就引入了网络评分机制,作为清晰度的一项参考;

最后,秒播项目也全面铺开,在播放前下载一个分片。一方面下载过程提供了速度信息,另一方面我们也需要结合分片的清晰度进行选择,避免起播清晰度频繁波动。

▐ 实际应用中的挑战——网络情况预测

第二个挑战就是对网络情况的判断,即对带宽的预测;虽然不少论文都提到了根据历史下载速度求平均值,对当前或接下来速度做预测,但是关于细节基本都避而不谈。

网速非常重要,它是对当前网络判断最直接的数据来源,也是保证升降档快速灵活的一个关键因素。

速度预测的难点是网络情况是实时变化的,不同环境变化形式和方向都不同。例如,上图中就是截然不同的两种网络条件,第一个网速高且稳定,第二个网速在极速波动。所以预测速度的原则是尽量保守、尽量平缓,吸收掉波动情况,即对过去一段时间的速度取平均值。平均值的计算方式,可以结合上图的两种情况来看:

一是,传统算数平均数和调和平均数的方式;

二是,将对过去速度预测的误差考虑进去,也是robustmpc方案中提到的,更适合我们的需求。

那么,只有速度预估就够了吗?当然不是。由于网速是可随时波动的,实际网速也可能达不到预测速度,所以我们需要兜底方案。这里采用的是超时,即在预期的时间内,如果当前清晰度分片下载不完,将自动调整,避免 buffer 消耗后发生卡顿。

超时设置也需要精心考量,超时意味着当前分片如果下载不完就要丢弃,那么已下载完成的部分是不能用来播放的,否则就会出现同一视频内容用两种不同的清晰度重复播放。所以buffer较小时,不适合超时,否则容易增加卡顿。

什么情况设置超时呢?预期超时是用来解决问题的,首先是选择清晰度预期它能下载完,如果下载不完,我们可以用更低清晰度来替代。我们要保证现有的buffer足够这两个清晰度下载完成的时间,此外要尽量留足时间,让当前清晰度的下载能够在较小的波动下完成,避免频繁切带来的网络浪费和不好体验。

体验衡量

随着智能档的推广和应用,我们也需要考虑带宽成本,行业通用解决方案是使用 PCDN,在播放允许的情况下,避免直接向成本较高的CDN服务器请求转而找到成本较低,但质量不太稳定的节点,这样就会引起速度的波动。

这个问题如何解决?首先,PCDN 调度的原则,是将 buffer 趋于划分为三段:第一段是buffer较低的情况,为了避免卡顿保证服务质量,会直接走CDN;第二段是部分从CDN下载,部分使用质量较差的P2P节点;第三段是buffer较高的情况,卡顿风险低,直接断开CDN,只使用P2P。

简单来说,为了保证智能档用户有稳定体验,我们在节点切换的过程中,始终保持使用一个较高的速度,比如使用连接CDN时的速度,如果 P2P的速度比 CDN的速度高,我们可以使用这个更高的速度,当质量较差的节点满足不了当前速度时,buffer就会降低,迫使PCDN逐步切换回高质量的节点,这样就做到了和 PCDN结合的自适应调整,做到了速度的相对稳定。

▐ 实际应用中的挑战——其它

在实践过程中面临的挑战,如何衡量智能档的体验,如何评价效果。

学术论文的衡量标准是看QoE,它包含了对清晰度质量、卡顿和清晰度波动的因素。但它是单一值,两次不同的播放,QoE一个高一个低,说明前一个体验更好,但是无法知道差的原因,是卡顿太多还是清晰度太低?所以单一值,不利于我们衡量真实效果,也不利于明确优化方向。

所以,我们最终通过和实际业务目标相结合,整体看全盘数据,同时将卡顿率、高清晰度的播放时长占比拆开来看。卡顿率高了,要想办法降卡顿,策略上要相对保守;如果高清晰度少了,就要适当调整策略,让用户更容易升到高清晰度。

此外,播放的体验好不好需要多维度考量,除以上两个关键指标外,我们也增加了其它维度数据,比如,使用智能档用户的播放量占比、一次播放的清晰度切换频次,高buffer降档的反常体验发生比率等。

实际上,我们在实践的过程中遇到的挑战还不止这些,比如倍速播放的情况,4G下考虑流量的问题等。受时间和篇幅的限制,就不一一展开了。

智能档的设计、实现与优化迭代

以上介绍了自适应码率技术的一般原理和挑战,接下来从整体分析,优酷智能档是如何设计的,又是如何优化。

▐ 优酷智能档的整体结构设计

智能档的整体框架分为上下两部分,下层是客户端,上层是服务器端。

第一,清晰度选择的控制器是在客户端,包含一个策略引擎,支持多种策略实现运行,为策略的运行提供了统一接口;控制器需要与播放器内核的数据源处理部分打交道,从播放器内核获取到视频的基本信息,比如支持几个清晰度、每个清晰度码率多少,有多少个分片、每个分片多大,同时也从播放器收集当前的播放状态,比如当前的buffer 状态;此外,客户端还需要从下载器那里得到各分片的下载速度,从全局的网络监测模块感知当前的网络质量情况,最后执行策略,输出下一个清晰度,通过内核交由下载器去下载,进而播放;

第二,智能档的控制器每次播放后会收集整个决策过程中的输入/输出信息,并上报到服务器端,服务器端用这个数据做统计、分析、优化,然后进一步改进策略,形成一套完整的闭环的数据体系。

▐ 策略实现-多策略支持

结合前面算法论文中的理论,我们先后尝试过实现四种策略:

第一种:Pattaya 是我们最早尝试的一种策略,将单独基于速度的一类策略,后来也引入了基于 buffer 策略,不断根据数据情况增加一些经验规则进去,也是早期进行链路调试的一个策略;

第二种:基于强化学习的策略;

第三种:实现和调试了基于 MPC 思路的策略;

第四种:根据经验创造出来的,基于下载尝试和超时的SBit策略。

我们以 AB Test 的形式分桶开启各个策略,观察效果逐步优化,最终形成一套统一策略,包含起播/Seek决策、播中决策、超时处理、卡顿处理等几个关键组成部分。

▐ 数据体系建设-信息的收集与解析

上面提到四类策略,在衡量效果时,我们提到了一些关键指标,相关的统计数据在上线之初就进行了支持。那么,这四类策略是不是上线就表现良好,表现不好的原因是什么,这就需要对每一次播放数据的输入和输出都有详细记录,如图中的数据结构。

第一步,早期我们考虑一次播放的决策数据量比较大,同时还不具备这种批量数据处理分析的能力,主要是以日志的方式打出来;

第二步,我们了解到阿里云的数据工场能够提供这样一种能力,通过自定义 UDF 解析结构复杂的编码数据,并且通过一般的编程语言以实现插件的形式,完成各式各样的分析,这样我们就将客户端上每次播放的所有相关的输入和输出,按照一定的格式组织起来,进行压缩、编码通过埋点渠道报上来,需要分析的时候在数据平台上解码分析。

上图,是一个经过编码的智能档播放信息,报到服务器端之后,我们通过数据平台对立面的信息进行解析。当然这张图立面只画出了其中一部分信息,包含原始的输入速度、预测的速度、播放器buffer的变化情况,这样整个智能档的决策过程就尽收眼底。

▐ 数据体系建设-优化应用

当完整数据体系建立之后,我们就可以进行优化。下面以卡顿优化为例,我们是这样操作的:

第一步,当版本发布后,观察整体的大盘数据,发现卡顿超出预期,我们会分析用户用例,对卡顿情况有初出认知。

第二步,基于已知信息做分类规则,比如,是起播就卡,还是播了很久之后才卡;是因为网络差,清晰度降底都还会卡,还是在策略上有优化的空间?

第三步,根据规则将所有发生过卡顿的播放数据做聚合分析,知道每种可能情况的占比,有针对性分优先级的去解决和处理问题;

不只卡顿,还是其它像高清晰度没有达到预期,都可以用这种方式进行分析。这些数据除了分析这些问题以外,还有利于我们对整个优酷用户播放过程有一个更全面的了解,比如说他们的网络情况分布等。

▐ 智能档的应用推广

在智能档完成设计、实现、优化,我们希望它能够在更多的场景上得到应用。智能档最初是在手机两端上率先完善和放量,其次是iPad端。在过去一年,我们也在iKu OTT 等客户端场景下投入使用。

这里面需要强调是大型直播场景,比如双11猫晚、近期的义演直播《相信未来》,直播和点播场景有差异:

第一、直播要求低延迟,比如看球赛,不能隔壁进球了,这里还在射门。所以这个特点就决定了端上播放器不能有太多buffer,智能档的决策需要做适当的调整,更多的从网速上获取信息;

第二、直播是实时性的,生产端生产出视频流是实时进行的,而且通常的直播时长比一集电视剧时间还要长,所以存在技术风险,这时候智能档就有了用武之地。

和直播场景有关的第一个问题是流量控制,某一场直播开始前,会预估流量,但实际可能因为某个节目特别火爆,新用户源源不断地涌进来。在服务器流量压力大时,智能档可以通过实时下发配置适当的调整用户的清晰度,例如,必要情况下,降低一个清晰度,实时缓解服务器带宽和流量压力。这是传统清晰度所做不到的,传统清晰度可能从进入直播间到看完就固定在一个清晰度码率上。

另外一个常见问题是直播时,在生产端可能会出现某一路流转码失败,智能档发现问题后,可以直接标记这路流不可用,在后面的播放切到其它相近的清晰度时,保证整体直播效果不会受到太大的影响。

智能档的应用总结及未来

在过去一年,优酷智能档已经逐渐走向成熟:

  1. 优酷智能档在过去一年的建设过程中,覆盖了移动端约30%的播放量,甚至比播放某些传统的清晰度播放量都高;
  2. 从智能档内的各个清晰度播放时长来看,能够让用户在90% 以上的时间观看比较高的清晰度,同时保持着比一般清晰度更低的卡顿率,尤其在 4G 网络下,能够做到传统清晰度的一半;
  3. 智能档为优酷整体的播放体验优化提供了工具,也在直播等场景成为了技术保障的必要手段;
  4. 最重要的,经过过去一年的优化,获得了用户的认可。

对于未来,主要有两点思考:

  • 随着 5G 的发展,越来越多的用户将移动蜂窝网络下观看视频,智能档会得到更多应用。可能大家要问了,5G网速那么快,还需要智能档吗?这里我想到了一句话,"What Andy gives Bill takes away",“安迪比尔定律”,这里面 Andy 是 Intel 的 CEO, Bill就是比尔盖茨了。意思是无论 Intel的 CPU 造的多么先进,都会被新的 Windows 系统消耗掉。回到播放场景,网络技术是在发展,但人们对高清视频的需求也在不断提高,所以智能档是必要的;
  • 另外,一定会出现新的手段,让自适应码率技术的效果更好。比如今天提到的Pensieve,利用强化学习来进行清晰度选择。这个原作者在 2019 年又发表了一篇新论文,大致内容是他又改进了算法模型,开始在 Facebook 进行实验,这是个未来的方向,现在的可解释性等等问题应该都会逐步得到解决。

参考文章

  • J. Jiang, V. Sekar, andH. Zhang. 2012. Improving Fairness, Efficiency, and Stability in HTTP-basedAdaptive Video Streaming with FESTIVE. In CoNEXT.
  • T.Y. Huang et al. 2014.A Buffer-based Approach to Rate Adaptation: Evidence from a Large VideoStreaming Service. In SIGCOMM. ACM.
  • X. Yin, A. Jindal, V.Sekar, and B. Sinopoli. 2015. A Control-Theoretic Approach for Dynamic AdaptiveVideo Streaming over HTTP. In SIGCOMM. ACM.
  • Mao, H., Netravali, R.,and Alizadeh, M. 2017. Neural adaptive video streaming with pensieve. InProceedings of the ACM SIGCOMM 2017 Conference. ACM.
  • L. De Cicco, V.Caldaralo, V. Palmisano, and S. Mascolo, “ELASTIC: a client-side controller for dynamic adaptive streamingover HTTP(DASH),” in Packet Video Workshop (PV), 2013.
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档