一、背景随着RTC使用场景越来越复杂,新特性不断增加,用户对更高清晰度的需求越来越强烈,这些都影响了RTC的性??能客户端机器。要求越来越高(分辨率越来越高,编码器越来越复杂等)。但是,机器的性能千差万别,用户的操作也是不可预测的。高级功能的使用与机器性能之间的矛盾是客观存在的。视频性能下降有什么影响?一是解决因设备性能不足和突然的性能消耗冲击(如杀毒软件)导致的用户音视频体验问题(如视频卡顿、高延迟、设备卡顿);另一个是改进了一些高级功能,例如视频超分辨率默认开启,当设备性能不足时自动关闭;三是在某些场景下降低设备功耗,比如当电脑使用电池供电时,通过关闭视频超分辨率、降低视频帧率等方式主动降低部分功耗。2.Pre-basicRTC提供性能降级机制,当性能负载过高时触发降级;性能负载下降后触发升级。一套完整的性能降级解决方案要求产品具备一些基本的降级能力,例如:支持动态修改视频分辨率和帧率,支持发布多路视频流(同播),支持SVC,支持点播发布/订阅等。2.1联播关键词:同一视频源,多种分辨率,差异化分辨率要求。所谓联播就是将一个视频源输入编码输出为多个分辨率的视频帧,在发送端对多个不同分辨率的通道进行编码。下行接收端可选择订阅任意分辨率的同源视频流。可满足多人通话场景及不同用户对解析的差异化需求。在实际应用中,联播变得更加灵活多变,其作用也越来越大。除了满足用户差异化的分辨率需求,还能有效解决下行弱网/性能问题,提升用户体验。例如,当下行用户网络通讯或性能不佳时,可以将低分辨率的视频转发给用户,保证用户流畅的观看体验。2.2SVC关键词:单码流、分层编码SVC(ScalableVideoCoding,自适应视频编码)是指一个视频码流可以分为多层(layer),在保证整个码流可解码性的情况下,这种模式下,用户可以根据层的优先级选择丢弃某些层的全部或部分片段,获得不同帧率(时间/时域)/分辨率(空间/空气域)/图像质量(质量/画质)的视频流.2.3点播发布点播发布简单来说就是让发布者知道哪些分辨率流被订阅了,哪些分辨率流没有被订阅,然后只发布那些订阅了的视频流。用户未订阅的流,即使性能或带宽好,也不会发送。通常,按需发布需要联播,但这不是必需的。按需发布的初衷是为了节省性能和带宽资源,减少不必要的资源浪费。按需发布3.常见的视频性能下降方式RTC通常会消耗大量的CPU和GPU,RTC对实时性的要求近乎苛刻(通常RTC调用要求在400ms以内,云游戏场景甚至要求在100ms以内),这对算法的处理速度和稳定性有很高的要求。单帧处理时间的长短意味着视频帧率的上限,处理时间的流畅度也会影响视频的整体体验流畅度(因为实时性要求,RTC通常不会设置太大的jitterbuffer来平滑抖动,当帧处理时间长且抖动较大时,观看者会感觉到类似视频掉帧的卡顿现象)。此外,过大的系统消耗甚至可能影响用户正常使用设备(例如:过热/操作延迟滞后等)。在视频通话过程中,可以动态调整一些参数。往往不同的视频参数对应不同的性能消耗。常见的调整参数包括视频分辨率和视频帧率。此外,你还可以调整视频处理特性(如:超清/降噪/HDR等),甚至可以在不同的编码器和档位之间切换。对于Simulcast也可以选择切流(Fallback)。3.1视频分辨率降级视频分辨率降级是指降低视频的发送分辨率。一般来说,RTC主要是指编码分辨率。对于某些特殊场景,降低视频分辨率还包括支持编码分辨率的回调。采集模块收到回调分辨率后,会主动降低采集模块的输出分辨率(但通常不会直接降低摄像头采集分辨率,因为调整采集参数会涉及重启摄像头,过程中会出现黑框切换过程,重启相机也会增加出错的概率)。该场景特效的分辨率也会相应降低,以实现利益最大化。3.2视频帧率降级视频帧率降级是指降低视频的发送帧率。一般来说,RTC主要是指编码帧率。降低帧速率是最不容易出错且最有利可图的降级方法。对于一些特殊场景,还支持编码帧率回调。采集模块收到回调后,会主动降低采集模块的输出帧率。3.3编码器降级编码器降级是指将编码器档位降级,或者换用性能更好的编码器。一般来说,编码器的编码压缩率越高,编码性能消耗就越大。因此,当系统负载较高时,可以切换到压缩率相对较低的编码器或编码齿轮,以降低性能消耗。3.4视频处理特性降级在各种业务场景中,都会有一些视频前后处理特性,主要目的是为了提高图像质量,例如:超分辨率/降噪/HDR等。当性能下降时足够好,负载不高,可以开启这些视频处理功能,提升用户体验。当系统性能出现瓶颈时,需要适当降低视频处理功能,甚至关闭功能以保证视频通话的正常进行。RTC视频性能降级方法及优缺点总结:RTC视频性能降级方法及优缺点总结4.VolcanoEngineRTC性能降级策略4.1性能降级策略概述VolcanoEngineRTC降级策略包括多种基本能力和策略:VolcanoEngineRTCVideoPerformanceDynamicDegradationStrategies概述下面介绍几种降级策略以及策略中的注意点。4.2RTC编码组织方式VolcanoEngineRTCSimulcastEncoder采用完全并行的编码方案,每个Simulcast流在不同的Pipeline上,线程之间互不影响。与WebRTCSimulcastEncoder之间的串行编码方案相比,并行编码方案效率更高,编码效率基本不受Simulcast流数的影响。对于性能降级,并行编码组织方式可以选择降级单个流,也可以选择同时降级所有流,降级方式变得更加灵活。4.3RTC联播流降级方案由于火山引擎RTC编码器采用并行方案,单个联播流的编码延迟较高。对于降级,您可以选择同时降级所有流的帧率,也可以选择只降级具有较高编码延迟的帧。率而不影响其他联播流。VolcanoEngineRTC除了可以降级单个流外,还支持联播流之间的联动。当性能不足时,可以关闭高分辨率流(Fallback),当性能恢复时,可以重新启动高分辨率流。Fallback发生时,订阅高分辨率流的用户将自动切换到订阅亚高分辨率流,并在性能恢复时切换回来。以下图为例,如果关闭720p码流,订阅720p的用户将收到分辨率最接近720p的码流,如图360p。VolcanoEngine的RTC降级偏向于画面的流畅度和画质的平衡(降级路线可以在后台配置)。4.4不同发布流之间的协调降级在流之间(例如:屏幕流/视频流)之间没有协调的情况下,会出现不同流之间同时升级和降级的问题。为了更好的解决这类问题,也为了更好的处理不同流之间的优先级问题,火山引擎RTC采用了一个集中的性能控制中心来处理不同流之间的优先级问题。以会议场景为例,我们通常认为屏幕共享的优先级高于视频流。当性能负载高的时候,我们选择优先降低视频消耗,尽可能把资源让给屏幕流。只有在视频流降级后系统负载仍然过高无法满足性能要求时,才会将屏幕流降级。典型的降级路径典型的降级路径是:先降级视频流,再降级屏幕流;升级顺序和降级顺序正好相反。4.5性能与带宽退化关系处理性能和带宽是RTC系统中最重要的两个资源。随着系统的运行,两者都在不断变化。在性能和带宽同时波动的情况下,可能会出现性能负载过高,触发降级,但同时当带宽恢复时,触发升级。因此,需要有一种机制来保证两者之间不会出现“你上我下”的问题。VolcanoEngineRTC将性能和带宽控制解耦,将性能输出作为最大约束。性能升级相当于提高水位,降级相当于降低水位。实际的性能/带宽升级和升级由一个模块处理。除了性能和带宽,VolcanoEngineRTC还支持按需发布功能。发布方将三者结合起来,采用以下方案综合决策。说明:由于性能原因,720p码流被关闭,订阅720p的用户将收到分辨率最接近720p的码流,如图360p。4.6用户性能下降用户性能在某些场景下可能成为性能瓶颈,例如多人会议或高分辨率解码。在这种情况下,如果不能有效处理,可能会导致卡顿/延迟逐渐增加等问题;volcanoengineRTC引入了针对订阅者的性能降级解决方案,并链接上行和下行。当系统负载高或解码器延时长时,用户支持动态性能降级。1)订阅者可以根据码流的优先级优先选择降级低优先级码流,尽可能保证高优先级码流的视频体验。火山引擎RTC支持API方式设置订阅流的优先级。2)对于单码流,订阅者也可以灵活配置是先降分辨率还是先降帧率(后台配置)。上图显示Client用户同时订阅了3路720p30fps的流,但流的优先级不同。Stream1是高优先级流,Stream2/Stream3是低优先级流。当客户端出现性能问题时,低优先级的Stream2/Stream3将首先降级。以上图为例,Stream2/Stream3降级为180p8fps。具有最高优先级的Stream1不会降级。在低优先级流无法降级之前,不会考虑将高优先级流降级。4.7基于CPU使用率的降级特征处理耗时(例如:编码延迟或视频处理算法耗时)的主要问题是只能监控当前特征本身的负载。如果另一条链路消耗高(不在监控范围内),整体负载过高,还是无法降级。当系统CPU占用率高时无法回退,导致设备过热,甚至严重影响用户操作。火山引擎RTC支持统一的性能降级控制方案,可以联动上下行,也可以联动视频/屏幕性能下降等,甚至可以联动音频和网络。VolcanoEngineRTC根据流量维度拆分成若干个降级单元,单元的排列可以表示优先级(优先级可配置)。enumRXPerfUnitType{kRXPerfUnitUnknown=0,//发布视频流kRXPerfVideoPubCamera=1,//发布屏幕流kRXPerfVideoPubScreen=2,//发布投屏kRXPerfVideoPubScreenCast=3,//订阅视频kRXPerfVideoSubCamera=4,//订阅屏幕kRXPerfVideoSubScreen=5,//subscribescreen};注意:一个退化单元代表一种流类型,一个流中可能有多种退化方式,比如编码、视频处理算法等。五、总结与展望5.1总结我们在会议场景中验证了上述视频性能降级策略。上线这些策略后,在线高负载时间比例持续优化,从整体9‰左右下降到5‰,用户出现高负载情况(设备发热、界面响应慢、音视频卡顿、甚至程序崩溃)或崩溃等))更少。目前的视频性能降级策略也有一些可以优化的地方,比如:基于CPU的性能降级有意外伤害。类似编译场景,当CPU总占用率高但App占用率低时,降级收益较小,但实际中可能存在这种场景;对于这种场景,应该有所区分,不仅仅是降级,Backoff是保证一定视频质量的基础。降级最低视频质量配置可以更灵活。降级到最低档时,也要结合实际的发布订阅情况执行。例如,如果用户正在订阅1080p流,此时降级到180p可能不是一个好的选择;但是如果用户订阅了360p流,此时降级到180p可能是一个不错的选择。后续将进一步探索优化,确保性能满足要求,质量损失最小。支持基于GPU的性能下降。RTC场景不仅CPU消耗大,GPU也消耗大。后续基于GPU的性能降级也将上线。5.2展望未来,VolcanoEngineRTC还将支持更多的降级策略,例如针对超分辨率/降噪特性的性能降级、编码器降级等;降级方案的完整性将进一步提高,例如根据用户设备推荐最佳视频参数;此外,利用VolcanoEngine的“数据驱动”优势,量化性能数据,探索性能与带宽深度融合方案。通过这些优化,可以更好地平衡高级功能的使用与机器性能之间的矛盾,为用户带来更好的体验。6.加入我们的火山引擎RTC,致力于在全球互联网范围内提供高质量、低延迟的实时音视频通信能力,帮助开发者快速构建语音通话、视频通话、互动直播等丰富的场景功能,并转发直播。目前已覆盖互动娱乐、教育、会议、游戏、汽车、金融、物联网等丰富的实时音视频交互场景,服务亿万用户。
