现实中,我们要服务许许多多的用户,但每个用户的网络状况参差不齐,而他们却有一个共同的愿望,即享受较好的实时音视频服务质量。这就形成了用户“较差”的网络与接受“较好”的服务质量之间的矛盾。更准确地说,是音视频服务质量与带宽大小、网络质量、实时性之间的矛盾,而这也是实时通信的主要矛盾。
如何解决这一矛盾呢?总结起来,有以下几种方法:一是增加带宽;二是减少数据量;三是适当增加时延;四是提高网络质量;五是快速准确地评估带宽。
1. 增加带宽
在众多的解决方案中,增加带宽的方案无疑是解决音视频实时通信服务质量的根本。如果用户的带宽足够大、质量足够好,甚至可以在200ms内传输2K分辨率的视频的话,那之前所说的实时传输的矛盾就都不存在了。
但实际上,很少有用户可以拥有如此好的带宽。即使有,在多方实时通信(如音视频会议、在线教育)时,单个用户带宽的增加对整个服务质量也起不到什么作用。因为多方通信属于典型的“木桶效应”,通信服务质量的好坏是由网络最差的那个用户决定的,即木桶中最短的那块板。因此,这里所说的增加带宽,指的是所有用户带宽的增加,而不是个别用户带宽的改善。接下来了解一下增加带宽的具体方法。
5G的落地肯定会使移动网络产生质的飞越,同时也会解决实时音视频通信中带宽与服务质量的矛盾。但5G所起的作用短时间内还不太乐观,因为即使5G落地了,让所有用户使用5G也是一个较长的过程:一方面,用户升级到5G需要更换新手机;另一方面,5G要达到全国覆盖也不是短时间内可以完成的。
除了等待5G提升网络能力这种被动的方法外,还有一些变相增加带宽的方案,分为客户端方案和服务端方案。
在客户端方案中,最典型的就是WebRTC支持的选路方案——它可以按优先级选择最优质的网络连接线路。
在服务端方案中,有三种可以间接提升带宽的方法,分别是:提供更优质的接入服务,保证云端网络的带宽和质量,更合理的路由调度策略。
1) 提供更优质的接入服务,指的是图中的❶,也就是“最后一公里”问题。用户在接入服务器时,如果可以提高用户终端接入的网络质量,就相当于提高了用户的网络带宽。
目前国内存在多家网络运营商,如联通、电信、移动、长城宽带、铁通等,因此国内的网络十分复杂。一般情况下,同类型运营商(如联通)的用户相互通信时,都不会遇到什么问题,但跨运营商(如联通与电信)的用户进行通信时,网络质量就很难得到有效保障。
解决这一问题的一般办法是,让用户连接同一地区、同一运营商的接入服务器,这样就可以有效保障用户与服务器之间的连接通道。如上海的电信用户在接入时,一定要选择一台位于上海的、电信的、负载最低的服务器接入。
2 )保证云端网络的带宽和质量,指的是图3.2中的❷,即数据进入云端后,云内部的网络质量一定要好。因为云内部的带宽大小和质量是可以控制的,所以提升这部分的网络能力相对简单一些。最简单的办法是,可以购买优质的BGP网络作为云内部使用。但优质的BGP的费用也是比较高的。
3 )更合理的路由调度策略,指的是图中的❸。从图中可以看到,如果A与B两个用户要进行实时音视频通信,从A到B有很多路径可以选择,因此对于节点2如何选路是非常关键的。如果每个节点的选路(调度)都非常合理的话,那么A与B之间的通信质量就可以得到很好的保障。选路的基本原则是距离最近、网络质量最好、服务器负载最小的线路是最优质的线路。
2. 减少数据量
当网络带宽一定的情况下,为了解决实时通信的矛盾,我们必须通过减少数据量来解决这一矛盾。要知道,减少音视频数据量一定是以牺牲音视频服务质量为代价的,但这就是一种平衡。
通过减少数据量来保障音视频的实时性有哪些方法呢?这里总结了5种方法,分别是采用更好的压缩算法、SVC技术、Simulcast技术、动态码率、甩帧或减少业务。接下来就详细讨论一下这几种方法。
采用更好的压缩算法。这比较好理解,H265、AV1是最近几年才推出的编解码器,它的压缩率要比现在流行的H264高得多。在一些测试中,H265比H264提高了25%的压缩率,而AV1在veryslow模式下压缩率比H264提高了40%左右,这是相当可观的。但从实时性方面看,目前无论是H265还是AV1,其编码速度都与H264有不小的差距,要达到商用级别还需要一段时间。可喜的是,AV1已经进入Chrome的测试版中,相信其后的发展速度会超出人们的预期。
SVC技术,是减少传输数据量非常好的一种方法。其基本原理是将视频按时间、空间及质量分成多层编码,然后将它们装在一路流中发给服务端。服务端收到后,再根据每个用户的带宽情况选择不同的层下发。其好处是,可以让不同网络状况的用户都得到较好的服务质量。但它也有缺点:一是上行码流不但没减少反而增加了,所以需要上行用户配置很好的带宽;二是由于SVC实现复杂,又没有硬件支持,所以终端解码时对CPU消耗很大。
Simulcast技术。Simulcast与SVC技术类似,不过它的实现要比SVC简单得多(见下图)。其基本原理是,将视频编码出多种不同分辨率的多路码流,然后上传给服务端。服务端收到码流后,根据每个用户不同的带宽情况,选择其中一路最合适的码流下发给用户。它与SVC技术相比有以下几点不同:一是Simulcast上传的每一路流可以单独解码,而SVC做不到;二是由于Simulcast的每一路都可以单独解码,所以它的解码复杂度与普通解码的是一样的;三是由于Simulcast上传的是多路单独的流,所以上传码率要比SVC多很多。
动态码率,也是一种减少数据的方法。当网络带宽评估出用户带宽不够时,会通过编译器让其减小输出码率;当评估出带宽增大时,又会增加输出码率。这就是动态码率。如果你发现在网络抖动比较大时,某个音视频产品的图像一会儿清晰,一会儿模糊,那多半是因为其采用了动态码率的策略。
甩帧或减少业务。除了上面介绍的那些方法外,还有一种不太友好的方法,就是甩帧或关闭某些不重要的业务来减少数据量。当然,这种方法是在用户带宽严重不足的情况下才使用的,只有到了万不得已的时候才会使用这种策略。
以上就是通过减少数据量解决音视频与网络之间矛盾的方法,在上面的几种方法中,用得最多的是Simulcast和动态码率。
3. 适当增加时延
除了增加带宽、减少数据量外,适当增加延迟也可以解决部分业务质量和网络之间的矛盾。
例如,数据在网络上传输时,根据不同情况,传输速度有时快有时慢。我们将数据传输时出现的时快时慢现象称为网络抖动。如果不对网络抖动加以处理的话,它会对音视频服务质量造成严重影响:对于视频来说,网络抖动会造成频繁卡顿和快播现象;对于音频而言,则会出现断音、吞音等问题。这样的服务质量是人们无法忍受的,如何解决这一问题呢?方法其实很简单:增加时延,即先将数据放到队列中缓冲一下,然后再从队列中获取数据进行处理,这样数据就变得“平滑”了。
不过对于实时音视频直播而言,必须把延时控制在一定范围之内。那么时延范围设置为多大合适呢?通过表3.1中的指标可以知道,只要让单向延迟小于500ms,大部分人都是可以接受的。由于音视频的采集、编解码、渲染等时间是固定的,所以只要将网络时延计算出来,就可以确定缓冲区的时延了。
从上面的描述中可以知道,虽然实时通信对延迟有着极严格的要求,但通过增加适当的、小幅度的延迟是可以提升音视频质量且不影响实时通信效果的。
4. 提高网络质量
我们来看一下如何提高网络质量。提高网络质量是有默认前提条件的,即网络没有发生拥塞时才能提高网络质量,否则提高网络质量无从谈起。
在网络上,有哪些问题会对网络质量产生影响呢?其实就是三点:丢包、延迟、抖动。下面详细介绍一下这三种情况:
丢包,是网络传输过程中网络质量好坏的最重要标志,对网络的影响是最大的。优质的网络丢包率不超过2%。对于WebRTC而言,大于2%且小于10%的丢包率是正常的网络。
延迟,也是网络质量的重要指标,但与丢包相比,其对网络的影响要少一些。如果在两端之间数据传输的延迟持续增大,说明网络线路很可能发生了拥塞。
抖动,对网络质量的影响是最小的。一般情况下,网络都会发生一些抖动,如果抖动很小的话,可以通过循环队列将其消除;如果抖动过大,则将乱序包当作丢包处理。在WebRTC中,抖动时长不能超过10ms,也就是说,如果有包乱序了,最多等待该乱序包10ms,超过10ms就认为该包丢了(即使在第11ms时,乱序的包来了,也仍然认为它丢失了)。
下面我们来看一下有哪些方法可以解决上述问题(丢包、延迟、抖动)。这里总结了5种方法,分别是NACK/RTX、FEC前向纠错、JitterBufer防抖动、NetEQ、拥塞控制。
·NACK/RTX,NACK是RTCP中的一种消息类型,由接收端向发送端报告一段时间内有哪些包丢失了;RTX是指发送端重传丢失包,并使用新的SSRC(将传输的音视频包与重传包进行区分)。
·FEC前向纠错,使用异或操作传输数据,以便在丢包时可以通过这种机制恢复丢失的包。FEC特别适合随机少量丢包的场景。
·JitterBufer,用于防抖动,可以将抖动较小的乱序包恢复成有序包。
·NetEQ,专用于音频控制,里面包括了JitterBufer。除此之外,它还可以利用音频的变速不变调机制将积攒的音频数据快速播放或将不足的音频拉长播放,以实现音频的防抖动。
·拥塞控制,这部分内容很丰富,另外介绍
标签:用户,通信,抖动,带宽,实时,音视频,质量,网络,主要矛盾 From: https://www.cnblogs.com/fuqiangblog/p/16753981.html