WebRTC Android:手机扬声器的声音通过手机麦克风进入会议并引起回声

问题描述 投票:0回答:3

在某些移动设备(如 Motorola One Power - Android 10、Redmi Note 5 Pro - Android 7.1.2)中,手机扬声器发出的声音通过手机麦克风进入会议并引起回声。仅当手机扬声器处于打开状态时才会出现此回声问题。

我使用了AudioManager的MODE_IN_COMMUNICATION模式:

mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

此外,使用以下音频约束通过使用 PeerConnectionFactory 的 createAudioSource() API 创建音频源:

audioConstraints = new MediaConstraints();
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googAutoGainControl", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googHighpassFilter", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));

任何解决问题的帮助或指导将不胜感激。

android webrtc microphone webrtc-android
3个回答
5
投票

有些手机无法进行硬件回声消除,即使他们宣传它是可用的。红米Note 5绝对是其中之一,看看https://github.com/signalapp/Signal-Android/blob/master/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java ,搜索 HARDWARE_AEC_BLACKLIST。 因此,要启用 WebRTC AEC,请使用 JavaAudioDeviceModule.class 的以下方法

setUseHardwareAcousticEchoCanceler(false)       
setUseHardwareNoiseSuppressor(false) 

(作为参考,请查看 PeerConnectionClient.java 的 createJavaAudioDevice() - 在 googlesource.com 上查看官方 android 示例


0
投票

Android AudioManager 它提供对音量和铃声模式控制的访问。

首先使用

isMicrophoneMute()
方法查看麦克风是否打开或关闭。

在帮助下找出所有连接的音频设备

getDevices()
这将有助于找出哪个麦克风用户想要静音

检测到目标麦克风后,使用

setMicrophoneMute()

将麦克风静音

0
投票
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true)
WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(true)
© www.soinside.com 2019 - 2024. All rights reserved.