abhishek kumar gupta
abhishek kumar gupta

Reputation: 2289

WebRTC Android: sound from phone speaker is going into conference through phone mic and causing echo

In some mobile devices(like Motorola One Power - Android 10, Redmi Note 5 Pro - Android 7.1.2), sound from the phone speaker is going into the conference through the phone mic and causes an echo. This echo issue is coming only when the Phone Speaker is in the ON state.

I have used MODE_IN_COMMUNICATION mode of AudioManager:

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

Also, used below audio constraints to create Audio Source by using createAudioSource() API of PeerConnectionFactory:

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"));

Any help or guidance in resolving the issue will be well appreciated.

Upvotes: 11

Views: 3411

Answers (3)

Ruslan Zhuravlov
Ruslan Zhuravlov

Reputation: 216

WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true)
WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(true)

Upvotes: 0

Mayur Satav
Mayur Satav

Reputation: 1102

Android AudioManager it provides access to volume and ringer mode control.

First of all find out whether microphone is on or off using isMicrophoneMute() method.

the find out all the connected audio devices with the help getDevices() which will help to figure out which mic user want to mute

Once you detect targeted mic, Sets the microphone mute using setMicrophoneMute()

Upvotes: 0

abhishek kumar gupta
abhishek kumar gupta

Reputation: 2289

Some phones can't do hardware echo cancellation, even though they advertise it's available. Redmi Note 5 is definitely one of them, take a look at https://github.com/signalapp/Signal-Android/blob/master/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java, search for HARDWARE_AEC_BLACKLIST. So, to enable WebRTC AEC, use below methods of JavaAudioDeviceModule.class

setUseHardwareAcousticEchoCanceler(false)       
setUseHardwareNoiseSuppressor(false) 

(For reference, please have a look into createJavaAudioDevice() of PeerConnectionClient.java - Checkout official android example on googlesource.com

Upvotes: 5

Related Questions