WebRTC安卓回声消除技术

3
我希望在安卓上实现语音和视频通话。我使用了这个示例项目作为参考:Amazon Kinesis Video Streams Android WebRTC SDK。 问题是麦克风会捕捉到远程的声音,导致极度的回声效果。 我们使用的是这个版本:
org.webrtc:google-webrtc:1.0.30039

AudioManager处于此模式:

audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(false);

这是我们尝试过但没有效果的方法:

WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);
WebRtcAudioUtils.useWebRtcBasedAcousticEchoCanceler();
WebRtcAudioUtils.setWebRtcBasedAutomaticGainControl(true);
WebRtcAudioUtils.useWebRtcBasedAutomaticGainControl();
WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(true);
WebRtcAudioUtils.useWebRtcBasedNoiseSuppressor();
WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(true);

还有这个:

audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation2", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googDAEchoCancellation", "true"));

audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googTypingNoiseDetection", "true"));

audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googAutoGainControl", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googAutoGainControl2", "true"));

audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googNoiseSuppression2", "true"));

audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googAudioMirroring", "false"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googHighpassFilter", "true"));

我真的很迷茫。如何在安卓设备上激活回声消除功能?

1个回答

2

1
仍然没有成功。还有其他我可以尝试的吗?我使用三星设备进行测试通话,在其他应用程序中都可以使用回声消除。 - prechtelm
嗨@prechtelm,请运行代码(在从Somesh的Github项目(https://github.com/TheSomeshKumar/AndroidWebRTCGradle)中设置setUseHardwareAcousticEchoCanceler(false)和setUseHardwareNoiseSuppressor(false)之后),并检查您的测试设备上是否有回声。 - abhishek kumar gupta
3
非常感谢您的建议!这对我帮助很大。我的解决方案如下:只需使用WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);WebRtcAudioUtils.setWebRtcBasedAutomaticGainControl(true);WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(true);,对于JavaAudioDeviceModule,请使用setUseHardwareAcousticEchoCanceler(false)setUseHardwareNoiseSuppressor(false)。 所有其他参数都会降低声学回声消除(AEC),或完全使AEC无法工作。(我真的不明白为什么会这样) - prechtelm
请记住与“采样率”相关的一件事。WebRtc AECM模块默认仅在“8000HZ”,“16000HZ”上提供处理。如果您正在使用“48KHz”,那么我建议您仅查看此教程,以在任何设备上进行WebRtc音频处理。不同的硬件对APM(音频处理模块)有不同的倾向性。请访问Android-Audio-Processing-Using-WebRtc - Muhammad Usman Bashir
@MuhammadUsmanBashir 感谢您的评论。完整的库 implementation 'org.webrtc:google-webrtc:1.0.32006' 是否包含 WebRtc APM? - Tomer Petel
1
@TomerPetel 如果你将使用通常被称为 音频通道音频引擎 的 AudioTrack,则可以基本上使用 APM 的 能力,它将给出您期望的结果。如果您想开发自己的 WebRtc SDK 来在 Java 层访问 APM 处理自己的数据,则可以访问我的系列文章从头开始开发 WebRtc:(https://medium.com/@BeingOttoman/compile-and-build-webrtc-library-for-android-platform-3216416263fd) , (https://medium.com/@BeingOttoman/simplest-webrtc-debugging-development-environment-for-linux-3d4e4aed54f3) - Muhammad Usman Bashir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接