WebRTC Android:来自 phone 发言人的声音通过 phone 麦克风进入会议并引起回声
WebRTC Android: sound from phone speaker is going into conference through phone mic and causing echo
在某些移动设备(如摩托罗拉 One Power - Android 10、Redmi Note 5 Pro - Android 7.1.2)中,来自 phone 扬声器的声音通过phone 麦克风并引起回声。仅当 Phone 扬声器处于开启状态时才会出现此回声问题。
我用过MODE_IN_COMMUNICATION AudioManager模式:
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"));
我们将不胜感激解决问题的任何帮助或指导。
有些手机无法进行硬件回声消除,即使他们宣传它可用。 Redmi 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() - Checkout official android example on googlesource.com
Android AudioManager 它提供对音量和铃声模式控制的访问。
首先使用isMicrophoneMute()
方法判断麦克风是否打开。
借助 getDevices()
找出所有连接的音频设备,这将有助于确定哪个麦克风用户想要静音
检测到目标麦克风后,使用 setMicrophoneMute()
将麦克风设置为静音
在某些移动设备(如摩托罗拉 One Power - Android 10、Redmi Note 5 Pro - Android 7.1.2)中,来自 phone 扬声器的声音通过phone 麦克风并引起回声。仅当 Phone 扬声器处于开启状态时才会出现此回声问题。
我用过MODE_IN_COMMUNICATION AudioManager模式:
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"));
我们将不胜感激解决问题的任何帮助或指导。
有些手机无法进行硬件回声消除,即使他们宣传它可用。 Redmi 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() - Checkout official android example on googlesource.com
Android AudioManager 它提供对音量和铃声模式控制的访问。
首先使用isMicrophoneMute()
方法判断麦克风是否打开。
借助 getDevices()
找出所有连接的音频设备,这将有助于确定哪个麦克风用户想要静音
检测到目标麦克风后,使用 setMicrophoneMute()