如何解决安卓网络RTC音频中的回声,当连接到多个音频通道



我一直在使用libjingle在四个用户之间建立对等连接以共享数据并启动音频通道。 它在大多数情况下工作正常,但有一个用户的回声问题,这使得呼叫非常不稳定,难以倾听用户。

我试过添加

this.mediaConstraints.optional.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));
this.mediaConstraints.optional.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));

我在可选参数中添加这些约束,以防我在强制性参数中添加这些约束,它会断开调用并抛出重新协商需要的方法。

我列出了一些案例,例如:

1) 这可能是 1 个用户在扬声器(或耳机足够响亮)中语音在麦克风中注册并产生回声的原因。(但有时它也会在没有这个原因的情况下发生)

2)可能有1个音频通道注册两次,并创建混响效果,同一用户发送数据通道两次。(找不到如何调试,我数了音频通道,它们是正常的)

3)两个用户在同一个房间并且发生回声(这是正常情况,但这不是一个问题,因为它是不可避免的)

我正在寻找建议或解决方案,以防其他人遇到Android webRTC库的此类问题。

implementation 'io.pristine:libjingle:9694@aar'

我起诉的库是这个,但我也发现最新的webRTC官方库最近更新了,迁移到那个可以解决任何这样的问题吗?

我找到的最新库是:

implementation 'org.webrtc:google-webrtc:1.0.22672'

任何帮助将不胜感激。

谢谢

较新版本的WebRTC具有WebRtcAudioUtils类,可用于基于WebRTC的声学回声消除(AEC)。

在这里,您有两种选择,您可以使用内置的AEC或基于WebRTC的AEC。

//Disable built-in AEC even if device doesn't supports it
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);

//Enable built-in AEC if device supports it"
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(false);

我认为 Pristine 不再维护 android WebRTC 库了。因此,我建议您使用由Google托管的新WebRTC库,因为许多错误修复仅在Google托管的WebRTC库的新版本中可用,这是在撰写本文时是

implementation 'org.webrtc:google-webrtc:1.0.22920'

我很难将我的原始WebRTC项目迁移到基于Google的WebRTC库,因为许多类已被弃用,其中一些甚至不在较新版本的WebRTC中。您可以查看我的GitHub项目,它是AppRTC的客户端,我正在使用来自Google OR Checkout官方Android示例的WebRTC预构建库 googlesource.com。在PeerConnectionClient类中,他们还使用WebRtcAudioUtils来切换回声以及噪声,高通滤波器等。

最新更新