Как разрешить 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, фильтра высоких частот и т.д.