Как разрешить Echo в Android WebRTC аудио при подключении к нескольким аудиоканалам

Я использовал libjingle, чтобы сделать одноранговое соединение между четырьмя пользователями для совместного использования данных, а также запустить аудиоканал. Он работает нормально в большинстве случаев, но имеет проблемы с эхом от одного пользователя, что делает звонок очень неустойчивым и трудно слушать пользователей.

Я попытался добавить

this.mediaConstraints.optional.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));
this.mediaConstraints.optional.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));

Я добавляю эти ограничения в необязательные параметры, если я их добавляю в обязательном порядке, чтобы отключить вызов и выбрасывает методRenegotiationNeeded.

Я перечислил некоторые случаи, такие как:

1) Это может быть причиной того, что 1 пользователь находится в громкоговорителе (или наушник достаточно громкий), который записывает голоса в микрофон и создает эхо. (Но иногда это происходит и без этой причины)

2) Возможно, один звуковой канал зарегистрирован дважды и создает эффект реверберации с тем же каналом передачи данных пользователя. (Не могу найти, как отлаживать это, я считаю аудиоканал, и они нормальные)

3) Два пользователя находятся в одной комнате, и происходит эхо (это обычный случай, который случается, но это не проблема, поскольку это неизбежно)

Я ищу предложения или решения, если кто-то еще попал в такую проблему с помощью библиотеки Android webRTC.

implementation 'io.pristine:libjingle:[email protected]'

Библиотека, которую я подаю в суд, - это, но я также узнал, что последняя официальная библиотека webRTC обновляется в последнее время, будет ли переход на эту проблему для решения любой такой проблемы?

Последняя библиотека, которую я нашел, это:

implementation 'org.webrtc:google-webrtc:1.0.22672'

Любая помощь будет высоко оценен.

Спасибо

Ответ 1

В более WebRtcAudioUtils версиях WebRTC есть класс WebRtcAudioUtils который вы можете использовать для эхоподавления, основанного на WebRTC (AEC).

Здесь у вас есть два варианта: вы можете использовать встроенную AEC или основанную на WebRTC AEC.

//Disable built-in AEC even if device supports it
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);

или же

//Enable built-in AEC if device supports it"
 WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(false);

Я думаю, что pristine больше не поддерживает библиотеку Android Android. Поэтому я предлагаю вам использовать новые библиотеки WebRTC, размещенные Google, потому что многие исправления ошибок доступны только в новой версии библиотек WebRTC, размещенных на Google, которые на момент написания

implementation 'org.webrtc:google-webrtc:1.0.22920'

Мне нелегко было перенести мой первоначальный проект WebRTC на библиотеки WebRTC на базе Google, потому что многие классы устарели, а некоторые из них даже не в новой версии WebRTC. Вы можете проверить мой проект GitHub, который является клиентом AppRTC, где я использую встроенные библиотеки WebRTC из официального примера Android для Google OR Checkout на googlesource.com. В классе PeerConnectionClient они также используют WebRtcAudioUtils для переключения Echo, а также Noice, фильтра высоких частот и т.д.