WebRT C Android: звук из динамика телефона идет в конференцию через телефон mi c и вызывает эхо - PullRequest
6 голосов
/ 18 июня 2020

В некоторых мобильных устройствах (например, Motorola One Power - Android 10, Redmi Note 5 Pro - Android 7.1.2) звук из динамика телефона переходит в конференц-связь через телефон mi c и вызывает эхо. Эта проблема с эхом возникает только тогда, когда телефонный динамик находится в состоянии ON.

Я использовал режим MODE_IN_COMMUNICATION в AudioManager:

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

Кроме того, используются ниже ограничения звука для создания источника звука с помощью createAudioSource () API 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"));

Мы будем благодарны за любую помощь или руководство в решении проблемы.

Ответы [ 2 ]

4 голосов
/ 24 июня 2020

Некоторые телефоны не могут выполнять аппаратное эхоподавление, даже если они рекламируют его наличие. Redmi Note 5 определенно один из них, взгляните на https://github.com/signalapp/Signal-Android/blob/master/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java, найдите HARDWARE_AEC_BLACKLIST. Итак, чтобы включить WebRT C AE C, используйте следующие методы JavaAudioDeviceModule.class

setUseHardwareAcousticEchoCanceler(false)       
setUseHardwareNoiseSuppressor(false) 

(для справки, пожалуйста, посмотрите createJavaAudioDevice () из PeerConnectionClient. java - Официальный заказ android пример на googlesource.com

0 голосов
/ 29 июня 2020

Android AudioManager обеспечивает доступ к управлению громкостью и режимом звонка.

Прежде всего выясните, включен или выключен микрофон, используя метод isMicrophoneMute().

узнайте все подключенные аудиоустройства с помощью getDevices(), что поможет выяснить, какой mi c пользователь хочет отключить звук

После обнаружения целевого mi c, устанавливает отключение микрофона используя setMicrophoneMute()

...