QRTC 产品作为流媒体流量入口之一,背后有一套完整的支撑体系。而在整个体系中,核心是要保障业务场景的稳定运行,保障音画质量的正常展现,那么业务与音画质量提升的实践方法有哪些呢? 在 LiveVideoStackCon 2022 音视频技术大会上海站,七牛云资深架构师 刘诗遥,为我们详细解析七牛云 QRTC 背后的质量提升实践。
编者按: QRTC 产品作为流媒体流量入口之一,背后有一套完整的支撑体系。而在整个体系中,核心是要保障业务场景的稳定运行,保障音画质量的正常展现,那么业务与音画质量提升的实践方法有哪些呢?
在 LiveVideoStackCon 2022 音视频技术大会上海站,七牛云资深架构师 刘诗遥,为我们详细解析七牛云 QRTC 背后的质量提升实践。
以下内容根据演讲实录整理。
大家好,很开心能在这里和大家一同探讨RTC类产品质量相关的话题。
本次分享主要内容将围绕四个方面展开。首先,探索一下质量问题到底是怎样的一个问题。
1、质量问题的探索
质量问题描述起来其实很简单,无论我们是使用RTC类型的产品,还是比较常见的微信、语音通话类产品,都会存在用户在某些时候体验不佳的问题。例如视频卡顿掉线、画质模糊、声音断断续续等问题,会让用户感觉这个实时传输或者通话类的产品它是不稳定的,那么要怎样做才能改善质量问题呢?
在讨论怎么做之前,我们先思考有没有办法对这几类问题进行分类。这三类问题中,视频卡顿掉线是传输类的问题,画质模糊是画质相关的问题,声音断断续续是音质相关的问题。那么,整个问题是否就是围绕传输、画质和音质来展开的呢?
首先我们来看下WebRTC的技术框架。从WebRTC的架构图中,可知在RTC上层统一的API下,隐藏了对RTC产品的三个分类,分别是音频、视频和传输。那么,这三方面是否与上述提到的质量问题有很强的关联呢?
我们继续挖掘音质和画质背后更深层次的原因。
音频路线中从采集到播放,会经历如图所示的几个环节:在采集到音频数据后,我们首先会使用3A算法对数据进行降噪、加强、回声消除等处理,然后会对音频数据做编码、压缩进行传输。在解码前,针对传输中的问题,设置了抖动消除和丢包补偿的机制,来达到音质高保障输出的效果。因此,音质与传输有一定关联。
然后我们再来分析画质。若使用RTC产品,在网络不好时会进行动态调节,如降低码率、分辨率,这也是围绕画质、针对传输线路的调整。
通过以上分析可知,若能解决传输质量上存在的问题,可一定程度上提升音质和画质。
RTC产品涉及的环节中有一部分是与传输质量强相关的。如图,是七牛云QRTC最初搭建时的架构图,它展示了从边缘接入到服务端处理的能力。图中红线圈出的部分都与传输相关:如从用户端到边缘节点接入的网络,从服务端到服务端的传输线路,同时这部分传输会涉及服务端流媒体处理和流媒体初始的与边缘节点相关的通信线路。
我们再将传输问题细化可以分为三个问题点:服务间传输质量、接入节点的传输质量和弱网对抗。
于佳在 《七牛云QRTC自研传输协议(QRTP)对音画质量的提升》 的分享中已经为大家详细解读了七牛云是如何保障服务间传输质量的。那么,针对接入节点的传输质量和弱网对抗两部分,我们应该先聚焦在哪一部分?举个例子,接入节点的传输质量即从用户侧到接入节点这段网络的问题。这个问题分为两种情况,一种是自身的服务覆盖不足或当前线路抖动问题;另一种是客户网络有问题,即客户网络为弱网。如果我们能先保证接入节点能覆盖所有用户,那么下一步就可以重点考虑弱网对抗的问题。
2、传输质量提升的实践
因此,我们优先来解决接入节点传输质量的问题。
提升传输质量可通过以下几种方式:一种是增加足够多的接入节点以覆盖所有用户;另一种是为用户选择最适合的接入节点,且能覆盖新加入且尚未被覆盖的用户。在这两种方案中,我们更倾向于后者,这样选择的考虑是:即使我们能够提供给到用户足够多的节点,但当用户选择其中某一个节点时仍有可能会出现卡顿的情况,此时我们考虑的重点应当是如何为用户选择连接本地情况最好的节点,才能更好满足用户的需求。
这里还有另外两种提升传输质量的方式和选择:一种是增加节点以覆盖全球每个角落;另一种是在有需求的地方增加节点,在这两种方案中,我们也更倾向于后者。举个例子,选择第一种方案时,如果我们当前在非洲没有客户,那么没有人会使用在非洲建立的节点,而当我们选择第二种方案时,即我们在非洲有客户后再建立节点,若用户使用其他线路可达到百毫秒以内的延迟,甚至无需再建立新的节点。
综上,传输质量的核心挑战可分为两个点:一是为客户选择最适合的节点,二是增加有需求的节点。
接下来我们针对这两个点分别进行展开。首先是如何选择最适合的接入节点。与用户接入端连接质量最优的边缘接入节点即为最适合的接入节点。最适合的接入节点选择过程如下,首先获取当前机房和节点列表,了解线上可用的节点情况,然后对节点进行排序。我们初始产品上线时,采用的是地域就近接入的排序策略,即判断当前用户接入端IP所属哪个国家、省份、城市、运营商,然后为其配置就近接入策略默认的节点,这样可通过地域性的最近达到质量的最优。
但是这个策略有一个问题,针对以下情况:例如IP所属上海的用户连接上海本地所有的运营商的网络质量都较差,反而是连接浙江的运营商的网络质量会更好,那么此时地域就近接入排序策略就无法满足用户的需求,或无法更好提升产品的接入质量。针对以上问题,我们提出了用户接入端与接入节点相对最优策略为用户接入端提供最优质量的接入。最后,使用策略后可得到排序规则,然后对异常节点(负载过高的节点、线路不通的节点)进行过滤。经过以上三步,就完成了最适合的接入节点的接入。
继续深入展开,我们如何建立用户接入端与接入节点间的规则。这里存在三种关系:用户接入端与接入节点建立连接,排序策略保障接入质量是最优的。从这三者关系里抽象出数据指标项去标识对象内容。可用IP来标识用户接入端,此外还有国家、省份、城市和运营商,这些内容与IP强关联。接入节点是服务端的边缘性节点,同样可用类似的信息唯一地标识接入节点内容,因此用户接入端和接入节点的关系是类似的。最后,考虑如何做质量打分策略处理,与质量相关的指标有低延迟、零抖动和成功率等,这几个指标构成了初始排序的起步阶段。
建立三者模型后,为了得到对接入节点实际有效的可量化的数据,要进行一系列处理。首先,针对已有的数据模型,建立数据关系的打点。定义的数据模型包括用户接入端的数据、接入节点的数据及两者之间的关系(延迟、成功率),这些内容通过RTC SDK的数据打点上报给服务器。基于上报的埋点数据,利用质量评估公式来评估两点之间的质量好坏,然后进行纠错,处理异常数据。最后当前输出的数据能辅助未知IP下发最优节点的策略。
左侧是线上实际上报数据埋点的结构,包括了用户接入端的IP信息,国家、省份、城市、运营商四元组间的关系,接入节点的四元组关系和IP信息,以及当前两者是否建立成功、延迟大小的内容。
此外建立一个计算分数的公式,公式的核心是表示质量的好坏,分数越低,质量越好。公式中涉及到的因素有连接耗时,连接耗时与分数成正比,因此连接耗时最低时质量可能最好。因素还有连接成功次数,成功率越高时,分数越低,即质量越优。根据这个公式,可以计算质量分数。首先看第一个数据表,包含了用户接入端和边缘接入节点的统计数据,通过这个统计数据,可知用户接入端接入过哪些节点,它们彼此之间的关系如何。然后假定模型只与连接耗时单一关联,因为在这个过程中可用相同方式获取其他数据。
最后当一个同地域的未知IP进入后,可为其分配一个对其而言当前地域最优的节点,若IP有问题,也可为其分配之前接入过的最优节点。因此,通过再次统计数据,可知用户接入端所属的四元组关系(国家、省份、城市、运营商)和服务的四元组关系,彼此间哪一部分联系是最好的(分数越低,联系越好)。当用户接入端所属IP在四元组关系内时,只需下发相同地区的服务端的最优节点IP,就能给其一个最适合的边缘接入节点。
整个过程中,我们完成了用户接入端可用节点返回、用户接入端IP最优可用节点加权和异常节点过滤。左侧的数据表包含了最终得到的数据,据此可寻找用户端与边缘接入节点间的最优数据,这构成了最适合节点分配的基础规则。根据这个规则,若当前IP已接入其他节点,且接入其他地域节点时质量最佳,那么将数据进行加权,这样就可为用户选择一个最适合的节点。
客户端得到数据表后,RTC SDK内部还采取了其他优化策略。我们从两个点出发,优化客户端与最适合接入节点间的连接。首先,并行请求相同的节点列表,来解决某个边缘节点在传输过程中宕机的问题。其次,增加SDK并行连接,通过赛马机制来加速连接建立。
至此,已解决最适合节点的选择问题,继续探讨如何增加接入节点。增加接入节点与机房和节点列表有关,也与用户接入端的数据有关,如某个用户接入端或区域的所有用户接入端可能与全部接入节点的连接都较差。当前区域所有节点连接的数据都较差,构成了增加接入节点的判断逻辑。
当某个IP连接IP所属节点的质量差时,意味着这个IP可能并不归属当前区域,只是被当前设定绑定在了这个区域,将其更改到正确区域即可。但若如表格中所示,用户接入端IP连接全部节点质量都差(表格中为连接耗时都很大)时,需通过增加接入节点的方式提高传输质量。
最终得到的数据围绕着SDK的打点数据进行处理,通过统计运算可知用户接入端四元组关系(国家、省份、城市、运营商)、总的请求次数、请求过程中的最小连接耗时。这些内容构成最终增加节点的参考。
增加接入节点的参考和下发整个接入节点的策略是提升传输质量的两个策略点。为用户选取最优的边缘节点进行连接,使得质量分数越来越高,或通过增加节点让连接质量越来越好,这个过程构成了传输质量的自优化。这意味着,当某个节点接入不佳时,可自动根据参考增加节点,当新增节点上线后,用户接入的情况会自动优化,可知哪些用户连接到这个节点的质量最优,通过数据建模和数据参考过程,达到了传输质量上的自优化。
我们的产品能满足RTC产品的基础功能。在基础功能之上,我们认为传输质量是核心点,传输质量的提升可带来整体效果的提升,也发现数据是质量提升方面的优化项。至此,优化尚未结束,因为画质和音质虽然受到传输质量影响,但也受到自身问题的影响,因此还需围绕质量参考数据,研究如何继续提升质量。
3、业务场景中质量提升的实践
七牛云站在客户角度,根据客户对业务场景的质量要求,思考如何才能更好地提升业务质量。在语聊房时,会有声音嘈杂的情况,这可能是降噪方面做得不好,若有回声,就需要优化3A算法,在互动直播场景画质模糊或教育场景录制异常时,也需要进行相应的处理。这些是业务质量提升的原始需求。
七牛云比较擅长的是社交互娱场景里的直播PK、语聊房,和教育领域的监考和大小班课,首先是互动直播场景。在互动直播过程中,客户要求低延迟、线路稳定、音质高保真、画质清晰等,这些要求可归属为接入端的传输质量保障、视频画面质量保障以及转推路传输质量保障。
类似地,语聊房也有一些相关的质量要求。
教育中的监考场景要求三路监考,能做到全场留证。
课堂场景中,保障多产品相关的内容。
细化场景后,我们思考能否按照优化传输质量的方式,通过数据进行质量的提升。
传输质量数据和流媒体数据是质量数据统计的基础。此外,QoE进行了画质上和音质上的检测,是主观内容转换到客观的方式,是一种量化指标转换。MOS分转换也是量化指标转换,它是找相同的人评估相同的内容,然后打MOS分(1-5分)。最后,划分场景,通过数据指标搭建类似传输质量的策略自优化体系。
我们如何去做数据驱动。基于业务质量(QoE)的数据可构成当前音画质的基础,这是数据驱动的一部分。此外,传输质量数据是数据驱动的另一部分。
4、以质量数据为驱动的产品体系
构建音画质量的数据体系,这是最直观的数据标签。构建当前直播间的样本数据,所有的指标是最原始的数据基础,构成了音画质量的数据基础。分析这些数据,可知不同场景下(如直播互动场景)的画质要求是什么,针对不同的场景,对画质进行优化,比如是否应该保证线路可传输更多的数据,保证分辨率是恒定的,在丢包可控的情况下,保证最优的画质传输。
另外一个是传输质量的数据体系。这个图不是凭空画出来的图,而是当前机房中部分节点间的传输关系的质量统计图,构成了节点间如何通过量化数据的方式来知道节点间的传输的依据。通过这样的方式,在当前场景下,若以低延时为核心进行优化,应找到节点间传输耗时最小的线路,并用这样的线路进行传输。直播场景对画质要求较高,可以接受一定的延迟,那么要寻找节点间传输稳定,但延迟稍高的节点。这些内容构成了数据的基础。
这涉及到两部分内容,一是传输质量数据体系,二是音画质量数据体系。音画质量数据体系中分三类进行核心数据的优化和基础参考。首先是音频数据,对当前声音的好坏进行打分,然后是视频数据质量,最后是场景权重参数,不同的场景(如社交互娱场景、教育场景)带来权重的区别,划分场景的方式决定了不同场景的关注质量点不同。传输质量数据体系关注三个点:接入传输质量、机房传输质量和弱网对抗。完成传输质量的优化后,节点能覆盖所有用户,通过自研的传输协议可保证服务间的低延时和可控传输。那么接下来就要完成弱网对抗,保证客户端网络质量差时,客户可更好地使用产品。
最后,通过数据体系的搭建,形成了以质量数据为驱动的QRTC产品体系。音画质量数据、传输质量数据不是体系化的思路,不能构成当前产品上的驱动点,只是某部分优化的手段和方法。
因此,我们分三部分对产品质量进行提升。第一部分是基础数据指标,包含了接入传输质量和节点相关内容。第二部分是业务质量,包括QoE针对音质和画质方面的数据内容,以及业务场景的区分。第三部分是质量数据运营,是针对下两层数据的运营策略,在不同的场景中,对接入数据和画质数据进行区别对待,在不同场景中使质量最优,并确定自优化策略,以及在通信场景里,策略要保证最低延时,在直播场景里,策略要保障稳定的画质。这就构成了以质量数据为驱动的QRTC产品体系。
以上是本次的分享,感谢大家!