2017年我加入了VIPKID,带领音视频团队探索如何更好地将实时RTC技术用于在线教育领域。我之前一直从事技术方面的优化与创新,而这次选题我特意选取了QoE方向,就是因为探索了这么多年的技术,我发现技术最重要的是为实际应用场景带来具有建设性的优化改进,而质量评价与感知系统是其中最为关键的一环。我们希望完整构建一套严谨专业客观的音视频质量评价与感知系统,从而为用户体验的优化与提升解决方案提供强有力的数据支撑。
管理大师德鲁克曾说:没有度量就没有优化,这句话用于音视频开发也非常恰当。我们在之前的开发过程中就积累了许多教训,如在优化系统时我们就曾遇见这样的问题:设计一项优化算法,设计初期我们预期该算法能将用户体验提升至新的高度,且我们也通过多种自证方式验证了其逻辑自洽,于是我们在预期成立的前提下为该算法投入资源进行开发,但在算法上线之后我们却发现其实际效果和预期存在很大的差异,该算法对于用户的主观体验没有带来改观甚至造成负面影响。这一经验令我们思考:音视频系统究竟需要一套怎样的标准才能准确客观评价算法的优劣?在设计任何音视频系统或者针对系统当中某一点进行优化时,开发者一定需要先仔细思考如何借助数据准确合理度量正在开发的算法,不仅是从实验室角度度量更应当从用户角度度量。这样无论是灰度测试还是频繁地版本迭代,甚至多个团队基于同一方向进行的优化竞争,确立好的度量标准就如一把尺子,可以准确客观衡量出算法可为用户体验带来多少提升与优化。
上图右侧饼状图展示了VIPKID用户所反映的针对产品所提出的五大关键问题(占比从高到低依次为:网络问题、设备问题、行为问题、软件问题与课件问题)对于所有RTC开发者来说,网络问题永远是一项最艰巨的挑战;而当用户数量达到一定规模时,不同软硬件平台设备、不同版本的软件适配问题也将成为一项亟待解决的重要命题。
既然存在如此多而复杂的用户痛点,那么确立一套专业客观精准高效的音视频用户体验评价体系就变得尤为重要。
视频画面的清晰度则主要使用MOS分作为评价标准,也就是从原始录像中按照每分钟1帧的方式抽取I帧图像并为其清晰度赋予MOS分值,所得到的系统分值再与用户的主观感知评价进行匹配,最终得到的分值如果低于3分那么我们就视该视频画面清晰度不佳。需要注意的是,这里的MOS分并非单纯基于肉眼感知的画面质量,而是基于综合视频编码与网络传输的参数,通过AI训练而成的一套算法为其赋分,数据主要通过录制上课视频得到。
音频方面,除了“清晰度”这样一项常见的指标之外,“声音大小”是我们根据用户反馈评价新增加的一项评价维度,这主要是因为许多用户反馈上课时感觉声音过大或者过小以至于听不清楚,发生这种情况多由于老师直播或录制课程时离话筒距离不当或录制设备不佳,也有可能是用户端的设置出现失误。我们选取老师讲话的部分并计算其音量是否合适,低于30分我们就认为该片段声音大小不符合用户体验要求;而“清晰度”则依旧使用常见的MOS赋分的形式,利用程序给目标录像片段的音频打分,低于3分我们认为该片段的音频清晰度不佳。以上是我们确立的针对在线教育所设计的一套完整评价维度,作为技术团队的KPI来使用。针对每一项,我们会有专门的团队负责优化与改进目标维度对应的算法与技术指标,以实现最优效果。
我们为统计到的卡顿情况作出了如下级别细分,其中遇到1、2级别卡顿情况的用户占比约为5%,遇到3、4、5级别卡顿的用户平均占比约为18%。这一数字在业内属于比较好的情况。
我们大概花费了两到三个月探索视频打分算法,在初期我们阅读了许多论文著作,发现业界还没有很出色的无参考视频打分算法。当时也试验过其他厂商的比较成熟的算法也没有达到理想的效果,直接用一张图片训练无法实现收敛。于是我们尝试换了一个方向,也就是从视频编码数据流当中抽取一些参数例如GOP帧宏块的大小,宏块的个数、丢包个数等以形成训练数据集,随后再使用该数据集训练打分算法模型。我们将得到的模型与人工标记做对比,最终的效果符合我们的需求,和用户主观感知结果的匹配度大概在80%,该算法模型就固定下来并被我们用于后续的关键开发活动当中。
特征提取的第一步是需要对文件进行解析,我们的线上课程视频文件基于不同的系统与格式,如mp4、flv、ts等等。再将原文件统一成H.264/H.265码流之后,码流解码程序会解析得到解码后的图像序列,该图像序列会被导入场景检测程序以生成特征提取单元;特征提取单元会在接下来的流程中被筛选,系统判断其是否超过最大序列长度,如果未超过,那么该特征提取单元会被直接输入特征提取程序以提取出有效特征;如果超过,那么该特征提取单元会被依据最大序列长度做切分以生成符合序列长度要求的多条特征提取单元,这些特征单元会被输入特征提取程序以生成我们想要的特征数据。
下图展示了训练该算法模型所需要的几项关键参数,其中包括宏块个数、帧的类型、宏块是否会丢包等。这一部分训练所消耗的算力资源是比较多的,如果想获得比较出色的训练效果,服务端强大且可靠的硬件支持必不可少。
从事音频质量评价的朋友应该不会对该声音质量评价模型感到陌生,该算法模型于2004年被提出。无论是音频还是视频,所有全参考的打分算法在线上系统都是不可用的。我们无法直接调取发端和收端的数据套用全参考算法,故面对线上音视频场景所使用的打分算法一定是单边的无参考算法。P.563就是这样一套可靠的单边算法,其不依赖发端数据,仅需收端数据即可直接运算得到评估分数。大致流程如下图中显示的那样:
首先,提取的原始数据会经由预处理后进行话音参数特征的提取与计算,所得到的参数会被归类为多种失真类型,按照不同的失真类型选取对应的话音质量模型从而得到准确客观的MOS分数。之前我们提到了评价维度里面有一项是音量大小,而P.563在预处理的过程中就会计算得到Activespeechleveladjustment这样一个参数,我们将4ms帧长下的SpeechLevel作为声音大小,取值范围是1~100,连续3帧以上超过阈值为不合格,反之则会被当成背景噪声过滤,从而我们得到了评估声音质量所需的所有关键评分。
上图展示的就是我们基于该质量感知系统制作的实时监控大盘。
下图展示了实时指标趋势跟踪,可以看到不同地区网络覆盖情况差异很大,这也是我们优化调参的重要依据。