您的位置:首页 >  新闻中心 > 云通讯公告
  云通讯公告
 

【干货】实时视频提升用户体验的关键技术

来源:原创    时间:2017-05-08    浏览:0 次

随着WebRTC标准的逐步推广,实时音视频通讯技术受到越来越多公司和技术人员的关注。对于交互式音视频应用而言,稳定、低延时、通话质量清晰可靠是其基本需求。在互联网环境下,音视频的通话质量与以下因素有关:一是编码码率、帧率和分辨率等编码因素;二是网络的接入类型和接入设备性能;三是对丢包、抖动、乱序以及网络拥塞的自适应调整能力,即QoS(QualityofService,服务质量)。容联云通讯作为国内最早且通讯能力最全的PaaS服务商,在推出音视频通话这一关键能力时,更加注重保证QoS(QualityofService,服务质量),升用户体验。本文主要介绍为保证QoS,在音视频传输和处理过程中采用的关键技术。
交互式实时视频应用通常采用RTP协议进行音视频传输,RTP头部供了诸如负载类型、时间戳、序列号和同步源等信息保证基本的音视频传输需求。但与TCP不同,RTP协议底层采用不可靠的UDP传输层协议,当网络过载或拥塞,无法实现对丢包、抖动、乱序以及网络拥塞的自适应调整。与音频相比,视频传输由于所占的带宽更大,更易受到网络环境变化的影响,因此以下将以视频为例分析Qos升途径。
1、处理丢包
对与实时视频来说,网络出现丢包将直接导致接收端画面出现马赛克和花屏。有多种策略可以解决,包括:基于NACK 反馈的丢包重传,前向纠错 FEC 和参考帧选择 RPS,这些策 略通常与编解码端的容错技术(如:帧内刷新和错误隐藏)配合使用。 
    基于 NACK 反馈的丢包重传方法:接收端循环检查接收缓冲,当发现丢包后使用 RTCP NACK 反馈报文将丢包信息反馈给发送端;发送端接收 NACK 反馈并解析后从发送缓存取出对应 RTP 包,并再次发送给接收端。该方法的缺点是增大了端到端的延迟,尤其在丢包大量发生时更为明显。 
    前向纠错 FEC:FEC 机制是在接收端根据视频帧的重要性(参考帧或非参考帧)发送冗余的视频 RTP 包,在接收端如果检测到丢包则利用冗余包进行恢复,否则将冗余包丢弃。该方法的优点是视频无延迟,但发送冗余包占用了额外的带宽资源。 
    更为可行的方案是是混合 NACK/FEC 模式,接收端根据帧大小和接收时延估计可用带宽,发送端根据可用带宽、丢包和RTT等反馈计算分配保护开销(protection overhead,包 括 FEC bitrate、NACK bitrate)和视频编码码率各占的比率。具体来说,FEC 的保护级别(protection level)取决于往返时间RTT,当RTT较小时,丢包重传的延时不会导致明显的视频卡顿,因此可以相应减少 FEC 包的数量;当 RTT 较大时,时延对视频流畅度影响明显, 因此要相应增加 FEC 包的数量。此外,可以使用多帧 FEC 和结合时域分层信息的 FEC,二者 都可以在减小保护开销的同时, 供更低的渲染抖动、更低的端到端延迟和更高的视频质量。
2、拥塞控制与自适应带宽调整
拥塞控制技术的出由来已久,TCP协议栈默认实现了对网络的拥塞控制以保证可靠传输。但在一些场合TCP并不适用,如:无线传输信道,高速长距传输网络、实时通讯应用等。为此,IETFRMCAT(RTPMediaCongestionAvoidanceTechniques)工作组出了一系列针对,实时通讯应用的拥塞控制算法需求,包括:能有效控制端到端时延、能有效控制丢包、与其他应用的流共享链路带宽、能够与TCP长连接流公平竞争可用链路带宽等。Google、Cisco和Ericsson等公司相继出了各自的适用于实时交互应用的拥塞控制算法,开源工程WebRTC的内部实现采用Google出的算法:GoogleCongestionControl,简称GCC。
    GCC算法是一种混合了基于丢包和基于时延的方法,原理如下:
    发送端根据丢包调整目标带宽,具体来说:低丢包率(小于2%)时增加目标码率,高丢包率(大于10%)时减小目标码率,丢包率介于二者之间时目标码率保持不变;接收端根据时延估计最大带宽,由三个模块组成:排队时延估计、链路过载检测和最大带宽估计模块,三个模块间的关系为:当排队时延小于阈值(根据网络状态自适应调整)时,链路检测结果为underuse;当排队时延大于阈值时,链路检测结果为overuse;介于二者之间时,链路检测结果为normal;最大带宽估计模块的实现是一个表示当前链路状态(Increase、Hold、Decrease)的有限状态机,初始状态为Hold,根据链路检测结果进行状态迁移,并根据迁移后的链路状态和当前接收码率估计最大带宽remb。
    上述两个过程的结合之处:接收端计算的remb值通过RTCPREMB反馈到发送端,发送端最终的目标码率应不超过remb值。
3、关键帧请求
键帧也叫做即时刷新帧,简称IDR帧。对视频来说,IDR帧的解码无需参考之前的帧,因此在丢包C严重时可以通过发送关键帧请求进行画面的恢复。关键帧的请求方式分为三种:RTCPFIR反馈(Fullintraframerequest)、RTCPPLI反馈(PictureLossIndictor)或SIPInfo消息,具体使用哪种可通过协商确定。
4、其他
除上述几种方法外,还可以通过视频预处理模块对视频内容进行分析,如:运动复杂程度、纹理复杂程度等,与拥塞控制模块一起进行自适应帧率和自适应分辨率的调整。
    综上所述,在互联网上为实时交互式音视频应用供QoS保证仍是一项挑战,需要音视频编码器、传输、预处理等多模块的协作配合,或利用现有网络协议和设备的支持,才能供给客户更多的选择和服务保证。