上 75gs.com、39sx.com、35bx.com或者wnshua.com 网址,可提升抖音、快手、哔哩、视频号、小红书等点赞、评论、粉丝、收藏、播放量。直播场观,直播人气,大量场观直播都可以提升!欢迎您的光临!
快手低价业务自助平台软件【75gs.com】自助下单平台抖音自助平台业务下单秒到
1. 背景
RTC(Real-time),实时通讯,是一个新兴的行业,特别是近两年电商、教育等行业直播的火爆,以及各种设备之间的音视频通话场景。从技术角度来说,RTC 并不是一个新技术,从智能手机普及以来,RTC 就已经出现在一对一的音视频通话场景中。最初的技术方案也比较直观,当设备通过服务端建立通话连接时,两个设备直接以点对点的方式进行通信。具体的实现方式是将编码压缩后的音视频数据包通过 UDP 协议包发送给接收方,接收方收到 UDP 数据包之后,就可以进行解包解码播放了。这种方式的特点是简单粗暴,不需要关心网络情况。带来的后果就是可能会出现丢包的情况,尤其是当网络情况发生变化的时候,会出现没有声音,画面卡顿等情况,因此整体的用户体验会比较差。 随着技术的发展和进步,考虑到网络情况可能随时发生变化,在原有技术方案的基础上,出现了一些比较知名的网络拥塞控制算法,它可以根据网络的变化来控制数据包的发送速率,从而平滑一些由于网络抖动而造成的丢包、卡顿等现象。
在RTC领域,最出名的就是,它可以让网络应用或站点在不需要中介帮助的情况下,在浏览器之间建立点对点的连接,实现视频流和(或)音频流或任何其他数据的传输,支持网页浏览器进行实时的语音或视频对话,是一个开源项目。从功能流程上看,包括了采集、编码、前后处理、传输、解码、缓冲、渲染等多个环节,例如前后处理环节有美颜、滤镜、回声消除、噪音抑制等,采集方面有麦克风阵列等,传输方面有拥塞控制等,编解码器方面有VP8、VP9、H.264、H.265等。这里主要站在学习的角度,简单介绍几个重要的算法:拥塞控制算法,以及音频的3A(噪音抑制、回声消除和自动增益)。
2.拥塞控制算法
拥塞控制算法有三种,GCC(),BBR,PCC,这里主要介绍GCC。
GCC 的核心思想是通过预测可用带宽来控制发送速率,结合发送端和接收端双方对带宽的估计进行综合计算。发送端的带宽估计主要取决于丢包率(实际上也有延迟),接收端的带宽估计取决于延迟(变化)。举个例子,GCC 的角色就像是繁忙路口的交警,当前方道路上车辆过多时,他会阻止后面的车辆继续行驶,防止堵车。当前方道路上车辆较少时,他会加速让后面的车辆尽快通过。当然语音视频抖音,GCC 的实际控制过程远比交警复杂。也就是说,GCC 主要依靠丢包、延迟、抖动等网络参数来估计当前的可用带宽,然后控制发送速率,避免网络拥塞导致的丢包、延迟、抖动,是一个反馈的过程。
由于有NACK、FEC等策略解决丢包问题,实际上发送端的带宽估算对于小程度的丢包并不是很敏感,相反接收端的带宽估算对时延抖动比较敏感。GCC的接收端通过一系列算法来检测当前网络时延是否发生了变化,如果时延增大,在考虑并排除数据大小变化的影响后,可以认为网络路由拥塞,需要降低码率;反之,当时延减小时,则认为网络空闲,可以提高码率。因此在时延抖动较大的情况下,即使没有丢包,GCC也会做出较大程度的带宽调整。也就是说,如果时延稳定,即使数值很大,也不会影响带宽估算。相反,如果平均时延比较小,但是抖动较多且较大,估算带宽就会很快降低。
GCC算法主要分为两部分:一部分是基于丢包的拥塞控制,一部分是基于延迟的拥塞控制。在早期的实现中,这两种拥塞控制算法分别在发送端和接收端实现。
对于发送方来说,GCC算法主要负责两件事:
对于接收端来说,GCC算法主要负责两件事:

可以看出,GCC算法是由发送端和接收端配合实现的,接收端负责产生码率反馈数据,发送端结合两种控制算法的结果得到一个最终的发送码率,并以这个码率发送数据包。
3.算法
它是音频技术中的两大核心技术之一,另一项核心技术是音频的3A算法(AEC、ANS和AGC)。在实时音视频通信领域,网络环境是影响音视频质量的最关键因素,当网络质量比较差的时候,再好的音视频算法也显得有些力不从心。网络质量差的表现形式主要有延迟、乱序、丢包、抖动,其中丢包和抖动是最常见的。抖动是数据在网络上传输的速度,丢包是网络传输过程中由于各种原因导致数据包的丢失。所以处理好丢包和抖动是获得高质量音视频体验的关键因素。
RTC音频通讯部分的常规工作流程是这样的:首先在发送端采集音频数据,对采集到的声音信号进行回声消除、噪声抑制、自动增益控制等预处理。然后进行语音压缩编码,封装成RTP包通过网络发送到接收端。接收端收到数据后进行RTP解包,然后进行抖动消除、丢包掩盖、解码等操作。最后将处理后的音频数据发送给播放器进行播放。涉及的操作包括抖动消除、解码以及相应的音频信号处理。简单来说,它本质上是一个音频抖动缓冲器(),工作在音频数据接收端,通过抖动消除、丢包掩盖等操作达到音频播放流畅的目的。
抖动是怎么产生的呢?如上图所示,在没有技术干预的情况下,发送方以20ms的时间间隔发送音频数据包,由于网络延迟等因素,数据包到达的时间并不均匀,此时如果直接将音频送到播放器播放,我们听到的声音就会有抖动。为了避免这种情况,我们通常通过抖动缓冲技术来消除,即在接收方建立一个缓冲区,语音包到达接收方后,先暂存在缓冲区中,然后系统以平滑的速率将语音包从缓冲区中取出,解码后播放出来。当然,单纯设置一个缓冲区是远远不够的,因为缓冲区设置得太小,可能起不到缓冲作用,设置太大,又可能造成音频延迟。那么缓冲区应该设置多大呢?这个要看具体情况。抖动消除思路的理想状态是,每个数据包在网络传输中的延迟与其在抖动缓冲区中缓冲的延迟之和应该相等。 因此,一般的抖动消除思路是,将抖动缓冲区大小设置为当前测量到的最大网络时延大小,且每个数据包在网络中的时延加上其在抖动缓冲区中缓冲所造成的时延之和应该等于抖动缓冲区大小。
目前抖动缓冲控制算法有静态抖动缓冲控制算法和自适应抖动缓冲控制算法。静态抖动缓冲控制算法即缓冲大小为一个固定值,超过缓冲大小的数据包将被丢弃。这种算法模型较小,实现也比较简单,但在弱网络条件下更容易丢包;自适应抖动缓冲控制算法的缓冲大小是根据实际网络抖动情况进行调整的。接收端通过比较接收到的数据包时延和当前保存的时延信息,得到当前最大网络抖动,从而选择合适的缓冲大小。这种算法的优点是网络抖动大时丢包率较低,网络时延较小时语音时延相对较小。所采用的抖动消除技术属于自适应抖动缓冲算法。
除了抖动缓冲,还实现了丢包掩盖。所谓丢包掩盖,是指在发生丢包时,生成与丢失的语音包相似的替代语音。丢包掩盖技术与解码器密切相关,在解码过程中,它首先根据收到的数据逐帧判断当前帧是否完整,如果完整,则按照正常的解码流程进行解码。如果发现数据丢失,则进入专门的丢包掩盖模块,对数据包进行补偿。这种补偿方式相对复杂,这里就不介绍了。
4.音频3A算法
音频3A算法是指在发送端对传输信号进行的回声消除、降噪、音量均衡等操作,包括AEC(回声消除)、ANS(噪音抑制)、AGC(自动增益控制)三种算法。音频3A是在数据发送端进行的,发送端在采集音频数据的时候,会在编码前进行信号处理,这里的信号处理主要指音频3A。与拥塞控制算法不同,音频3A算法与网络无关,是纯粹的音频信号处理算法,目前很多设备的音频3A其实都是通过硬件来实现的。
4.1. AEC(声学回声消除)

在正常的音频通话过程中,我们讲话的声音除了第一次被麦克风直接采集到之外,还会经过多次空间反射后再次被麦克风采集到并采集到系统中。此时音频输入中既包括我们自己讲话的声音,也包括空间反射的回声。如果不做任何处理,远端听到的声音就会有回声。还有一种情况,远端传来的声音是通过设备扬声器播放,然后被设备麦克风采集到的。如果不做任何处理,对方就能通过自己设备的扬声器听到刚才讲话的声音,这对用户体验非常差。
在真实的语音场景中,麦克风采集到的声音是混合的,这里面有近端的声音,也有远端的声音。简单来说,AEC 期望从混合的近端信号中消除掉不必要的远端信号,保留近端人声发送到远端。因此回声消除的关键就是如何区分近端和远端的声音。如果我们能产生一个信号来中和远端的声音,那么回声自然就能消除了。那么具体怎么做呢?我们以远端传来的声音经过设备扬声器播放后,被设备麦克风采集并发回产生的回声为例。简单来说,分为三个步骤:
因此回声消除也由延迟估计()、线性自适应滤波器()和非线性处理()三大算法模块组成。
延迟估计决定了AEC的下限,线性自适应滤波器决定了AEC的上限,非线性处理决定了最终的通话体验。
4.2 ANS(噪声抑制)
所谓的噪音抑制就是我们通常说的降噪,我们常用的降噪耳机就是基于此构建的。噪音分为平衡噪音和瞬时噪音两大类,稳定噪音的频谱比较平稳,瞬时噪音的频谱能量方差较小,利用噪音的特点,对音频数据添加逆波形处理就可以消除噪音。噪音不同于语音信号,降噪过程其实就是在频域上做一些处理。对于一些稳定的噪音,比如常见的空调声、电脑风扇声、车里的一些风噪,它的时间变化比较慢快手低价业务自助平台软件【75gs.com】自助下单平台抖音自助平台业务下单秒到,但是语音是一个可变的信号,通过这两者的区别我们就可以判断哪些信号是语音,哪些是降噪,然后去除。关于噪音抑制的相关资料有很多,就不详细介绍了。
4.3. AGC(自动增益控制)
AGC 这个词从定义上看,不太好理解。那什么是自动增益控制呢?我们可以以现实场景中的音视频会议为例。现实场景中,不同的参会人员距离不同,说话音量也不同,设备通过麦克风采集音频数据时,如果不做任何处理,远端听到的音量就会有很大差异。因此,在上述场景中,发送端音量的均衡就显得尤为重要。自动增益控制算法的目标就是统一音频音量,缓解由于设备采集差异、扬声器音量、距离等因素造成的音量差异。
在3A音频处理算法中,AGC位于最后的位置,它主要起到发送端均衡器和压缩器的作用,调整推送音量大小。AGC针对不同的接入设备提供了三种模式:固定数字增益()、自适应模拟增益()和自适应数字增益()。其中固定数字增益模式是最基本的增益模式,也是AGC的核心,另外两种模式都是在此基础上扩展而来。固定数字增益主要以固定的增益对信号进行放大,最大增益不超过设定的增益能力。自适应模拟增益,顾名思义,可以动态调整模拟增益,主要工作在PC端。自适应数字增益是为了满足智能手机、平板设备的需求,这些移动终端没有类似PC端的调整模拟增益的接口,其工作原理与自适应模拟增益类似。
5. 总结
RTC领域积累了很多与音频、视频、流媒体相关的优质算法,我们介绍的拥塞控制和音频3A算法是其中比较重要的,业界也有很多深入的讲解,本文主要从学习和科普的角度做一些简单的介绍,更详细的内容可以参考相关文章和代码实现。
参考文章 音频相关语音引擎技术研究中的拥塞控制技术 详解高音质低延迟背后——AGC开发者支持