关注分享主机优惠活动
国内外VPS云服务器

实时音视频通信(RTC)中你需要了解的三个关键算法

总结:拥塞控制算法包括三种拥塞控制算法。 在早期的实现中,这两种拥塞控制算法分别在发送方和接收方实现。 音频算法 音频算法是指发射端对发射信号进行的一系列回声消除、降噪、音量均衡等操作。 它包括三种算法:回声消除、噪声抑制和自动增益控制。

1.背景

实时通信(RTC)在过去两年已经成为一个新兴产业,尤其是在电子商务、教育等行业。已经成为了。 不同设备之间的直播和语音视频通话场景。 从技术角度来看,RTC并不是一项新技术。 随着智能手机的普及,RTC 出现在一对一的语音和视频通话场景中。 第一种技术方案是比较直观的。 当设备通过服务器建立呼叫连接时,最终两个设备以点对点的方式直接通信。 具体实现方法是将编码压缩后的音视频数据包通过UDP协议进行封装并发送给接收方。 接收方收到UDP数据包后,可以对其进行解压缩。 解码并播放。 这种方法的特点是简单、粗暴。 无需担心网络状态。 结果,可能会发生丢包。 尤其是当网络条件发生变化时,声音可能会消失,视频可能会卡顿,整体用户体验变差。 随着技术的发展和进步,考虑到网络状况随时可能发生变化,基于独特的技术方案,出现了几种著名的网络拥塞控制算法。 根据网络变化控制数据包的发送速度,保证网络畅通。 一些抖动造成的丢包、延迟等现象。

RTC领域最著名的就是Go。ogle 的 WebRTC。 这允许网络应用程序或站点在浏览器之间建立点对点(Peer-to-Peer)连接,以进行视频流、音频流或其他流传输,而无需使用中介。 该数据支持通过网络浏览器进行实时音频或视频对话。 WebRTC 是一个开源项目。 从功能流程来看,包括采集、编码、前后处理、传输、解码、缓冲、渲染等。 例如,预处理和后处理环节包括美化、滤镜、回声消除、噪声抑制等。 等,集合包括麦克风阵列等,传输包括拥塞控制、NetEQ等,编解码器包括VP8、VP9、H.264、H.265等。 主要是基于观点。 这里简单介绍一下WebRTC的一些重要算法:拥塞控制算法、NetEQ、Audio 3A(噪声抑制、回声消除、自动增益)。

2.拥塞控制算法

WebRTC使用GCC(Google拥塞控制), BBR 和 PCC。 这里我主要介绍一下GCC。

GCC的基本思想是预测可用带宽,控制传输速率,然后根据发送方和接收方的估计带宽来聚合传输速率。计算。 发送端带宽估计主要取决于丢包率(实际上也是延迟),接收端带宽估计取决于延迟(变化)。 例如,GCC的角色就像繁忙路口的交警。 如果前方道路上车辆过多,系统会阻止后面的车辆以防止拥堵。 当前方道路上的汽车较少时,他就会加速并超越它们。 尽快超越后面的车辆。 当然,海合会的实际执法过程比交警复杂得多。 也就是说,GCC主要依靠丢包、延迟、抖动等网络参数来估计当前可用的带宽,并控制传输速率,避免网络拥塞带来的丢包、延迟、抖动等现象。 这是一个反馈的过程。

因为WebRTC也有N采用ACK、FEC等策略来解决丢包问题。 事实上,发送方的带宽估计对少量的数据包丢失不是很敏感。 相反,接收机带宽估计对延迟抖动高度敏感。 GCC接收器通过一组算法来检测当前网络延迟是否有变化。 如果考虑并消除数据大小变化的影响后延迟增加,则可以认为网络路径拥塞,应降低码率。 否则,延迟会有所不同。 如果该值较小,则认为网络空闲,可以提高码率。 因此,当延迟抖动较大时,即使没有丢包,GCC也会进行显着的带宽调整。 也就是说,如果时延稳定,较大的值不会影响带宽估计。 相反,如果平均延迟相对较小,但存在许多较大的抖动,则估计带宽将迅速下降。

GCC算法主要是分为两种:一种是基于丢包的拥塞控制,一种是基于时延的拥塞控制。 在早期的实现中,这两种拥塞控制算法分别在发送方和接收方实现。

对于发送方来说,GCC 算法有两个主要作用。

接收接收端反馈的包信息,如丢包率、RTCP RR消息。 从接收端RTCP REMB消息中估计码率,并结合本地码率配置信息,计算出目标码率A Masu。 将目标码率 A 应用于 PacedSender 模块、RTPSender 模块和 ViEEncoder 模块等目标模块。

在接收端,GCC算法起着两个主要作用。

统计RTP数据包接收信息,如丢包数、接收到的RTP数据包最大序列号等。 等等,构造好的RTCP RR消息被发送回发送方。 对于每个到达的RTP数据包,执行基于到达时间延迟的码率估计算法以获得接收方的估计码率,并构造RTCP REMB消息并发回发送方。

可以看到GCC算法由发送方和接收方组成。同时,接收端负责生成码率反馈数据,发送端结合两种控制算法的结果得到最终的传输码率,并以此码率传输数据包。

3. NetEQ算法

NetEQ支持webRTC的两种主要音频技术。 一个核心技术和另一个核心技术是音频3A算法(AEC、ANS、AGC)。 在实时音视频通信领域,网络环境是影响音视频质量的最重要因素。 如果网络质量比较差,那么再好的音视频算法也会显得有些力不从心。 网络质量差的主要症状包括延迟、干扰、丢包和抖动,其中丢包和抖动最为常见。 抖动是指网络上数据传输的突然加快或缓慢。 丢包是指通过网络发送的数据包由于各种原因而丢失。 因此,处理丢包和抖动是实现高质量音视频体验的关键因素。

RTC语音通信部分的典型工作流程如下: 是。 :首先,发送端采集音频数据,对采集到的音频信号进行回声消除、噪声抑制、自动增益控制等预处理,然后进行音频压缩编码,封装成RTP包发送给发送端。 它通过网络发送到接收者,接收者接收数据。 最后进行RTP解包,进行去抖动、丢包隐藏、解码等操作,最后将处理后的音频数据发送给播放器进行播放。 NetEQ涉及的操作包括抖动消除、解码以及相应的音频信号处理。 简单来说,NetEQ本质上是一个音频抖动缓冲区(JitterBuffer)。 它在音频数据的接收端运行,并通过消除抖动来隐藏数据包丢失。 等待操作即可达到音频流畅播放的目的。

如何出现如上图所示的抖动现象?如图所示,在没有任何技术干预的情况下,发送方以20ms的时间间隔发送语音数据包。 由于网络延迟,由于时延的影响,数据包的到达时间并不是恒定的。 这时,如果我们直接将信号发送给播放器并播放,我们听到的声音就会出现抖动。 为了避免这种情况,通常使用抖动缓冲器技术。 移除意味着接收者建立了一个缓冲区。 当语音数据包到达接收器时,它首先进入暂时存储的缓冲区。 然后系统以平稳的速度从缓冲区中提取音频数据包并在解码后播放它们。 当然,仅仅设置缓冲区是不够的。 这是因为如果缓冲区太小,可能达不到缓冲效果。 如果太大,可能会出现音频延迟。 那么缓冲区应该有多大呢?这取决于您的具体情况。 抖动消除思想的理想状态是网络传输中每个数据包的延迟之和等于抖动缓冲器中缓冲的延迟。 因此,消除抖动的总体思路是将抖动缓冲区大小设置为当前测量的最大网络延迟大小,加上网络中每个数据包的延迟以及抖动缓冲区中缓冲所带来的延迟。 等于抖动缓冲区大小。

目前的抖动缓存控制算法包括静态抖动缓存控制算法和自适应抖动缓存控制算法。 静态抖动缓冲器控制算法意味着缓冲器大小是固定值。 此大小的数据包将被丢弃。 该算法虽然模型较小,实现起来相对容易,但在弱网条件下容易出现丢包现象。 自适应抖动缓存控制算法的缓存大小根据接收端实际接收到的网络抖动进行调整。 将报文时延与当前存储的时延信息进行比较,得到当前最大网络抖动,选择合适的网络抖动。 缓冲区大小。 该算法的优点是丢包率低,网络时延低,即使网络抖动较大,语音时延也相对较低。 NetEQ中使用的抖动消除技术是一种自适应抖动缓冲算法。

除了抖动缓冲之外,NetEQ还实现了丢包隐藏。 所谓丢包隐藏,是指当发生丢包时,会产生类似于丢失语音包的消息。 另类声音。 NetEQ的丢包隐藏技术与解码器密切相关。 在基于解码器接收到的数据进行逐帧解码过程中,解码器首先确定当前帧是否完整。 完成后,按照正常的解码过程进行。按照正常解码流程进行解码。 如果发现数据丢失,则启动专门的丢包隐藏模块进行丢包补偿。 这种校正方法比较复杂,这里就不介绍了。

4. Audio 3A 算法

Audio 3A 算法是指顺序对信号执行回声消除、降噪和音量均衡操作。 它包括三种算法:AEC(回声消除)、ANS(噪声抑制)和AGC(自动增益控制)。 音频3A在数据发送侧进行。 当发送器收集音频数据时,它在编码之前执行信号处理。 这里的信号处理主要指音频3A。 与拥塞控制算法和 NetEQ 不同,Audio 3A 算法与网络无关。 它是一种纯粹的音频信号处理算法。 目前,很多设备中的音频3A实际上是通过硬件实现的。

4.1,AEC(声学回声消除)

在典型的语音通话过程中,所说的语音不仅第一次被麦克风直接捕获,而且经过多次空间反射,然后再次被麦克风捕获,然后被麦克风采集。系统。 此时输入的音频既包括人声,也包括空间反射的回声。 如果不采取任何措施,远端听到的声音就会有回声。 来自远端的声音通过设备的扬声器播放,也可以由设备的麦克风收集。 如果您不这样做,其他人将通过设备的扬声器听到您刚才所说的内容。 这对于用户来说是非常糟糕的体验。

在现实世界的音频场景中,麦克风收集的声音是近端和远端声音的混合。 简而言之,AEC 希望混合物发出声音。 它从近端信号中去除不需要的远端信号,保留近端声音并将其传输到远端。 因此,回声消除的关键是如何区分近端和远端声音。 如果你能产生一个中和远端声音的信号,回声就可以自然消除。 它是具体的我们如何做到这一点?举个例子,考虑来自远端的声音。 声音通过设备的扬声器播放,由设备的麦克风收集,然后发送回以创建回声。 简单来说,就是三个步骤:

首先,找出扬声器信号和麦克风信号的区别。 Delay;然后,根据说话人信号估计麦克风信号中的线性回声分量,并从麦克风信号中减去线性回声分量,得到残余信号。 最后通过非线性处理将残余信号中的残余回声完全抑制。

回声消除也由三个大型算法模块组成:延迟估计、线性自适应滤波器和非线性处理。

时延估计决定了AEC的下界,线性自适应滤波器决定了AEC的上限,非线性处理决定了最终的通话体验。

4.2、ANS(噪声抑制)

所谓噪声抑制就是我们平时所说的降噪,常用的降噪耳机都是基于此。 噪声分为两类:平衡噪声和瞬时噪声。 平稳噪声频谱稳定,瞬时噪声频谱能量色散小。 利用噪声的特性,对音频数据进行逆波形处理,可以去除噪声。 噪声与音频信号不同。 降噪过程实际上涉及到频域的处理。 稳定的噪声,例如典型的空调声音、电脑风扇的声音或汽车中的风噪声,随着时间的推移变化相对缓慢,但音频是一种容易变化的信号。 根据两者的差异确定哪些信号是音频,哪些信号是降噪,然后将其去除。 关于实施噪声对策的相关资料很多,这里不再赘述。

4.3. AGC(自动增益控制)

仅使用名词解释 AGC令人困惑,但什么是自增量?利益控制? 首先,我们以实际场景中的音视频会议为例。 在现实场景中,由于不同参与者之间的距离以及每个人说话音量的差异,当设备通过麦克风采集音频数据时,如果不进行处理,距离会有所不同。 在上述情况下,均衡发射机音量尤其重要,因为从发射机听到的音量​​可能会有很大差异。 自动增益控制算法的目的是统一音频音量并减少设备和扬声器集合之间的音量差异。 由于大小和距离等因素造成的体积差异。

在3A音频处理算法中,AGC处于最后的位置。 它主要作为发送端的均衡器和压缩器,调节推送音量。 WebRTC AGC 针对各种接入设备。 提供三种模式:固定数字增益(FixedDigital)、自适应模拟增益(AdaptiveAnalog)和自适应数字增益(AdaptiveDigital)。 其中,最基本的固定数字增益模式也是AGC的核心,其他两种模式在此基础上进行扩展。 固定数字增益主要以固定增益放大信号。 最大增益不会超过配置的增益能力。 自适应模拟增益,顾名思义,允许您动态调整模拟增益。 主要工作在PC端。 自适应数字增益 智能手机和平板电脑等移动设备没有像 PC 设备那样调整模拟增益的接口。 其工作原理与自适应模拟增益类似。

5.概述

RTC字段包括音频、视频和流媒体积累了很多相关的优质算法。 引入的拥塞控制、NetEQ、音频3A算法是比较重要的。 业内有很多详细的解释。 本文主要从学习和科普的角度进行简单介绍。 有关更多详细信息,请参阅相关文章和实现 WebRTC 代码。


参考文章

WebRTC拥塞控制技术 webRTC中音频相关对 netEQwebrtc 语音引擎的 neteq 技术的研究详细说明了 WebRTC 高质量和低延迟背后的原因 - AGC

开发用户支持

如果您需要更多技术支持,请加入钉钉开发者群或关注我们的微信公众号。

更多技术和解决方案信息,请访问HaaS官网https://haas.iot.aliyun.com。

未经允许不得转载:主机频道 » 实时音视频通信(RTC)中你需要了解的三个关键算法

评论 抢沙发

评论前必须登录!