Проблема с голосовым эхом - PullRequest
5 голосов
/ 26 февраля 2009

Я пытаюсь создать программу видеочата с помощью Adobe Flex, но с эхом существует гигантская проблема. Если участники не используют наушники, все, что они говорят, отголоски. Хуже того, они действительно могут создать положительную обратную связь, которая не прекратится, пока микрофоны не будут отключены.

Кто-нибудь нашел решение для этого на платформе Flex / Flash?

Мое программное обеспечение использует кодек Speex, и я приложил все усилия, чтобы исключить всю буферизацию (т. Е. Это живой поток, и я установил длину буфера в 0). Параметр обратной петли отключен, а функция «Использовать подавление эха» включена. Я использую сервер Red5 для потокового видео и аудио.

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

Ответы [ 8 ]

7 голосов
/ 11 марта 2009

Это известная проблема в программном обеспечении Adobe, для которой в настоящее время нет исправления.

Пока вы можете обойти эту проблему.

В вашем приложении должен быть реализован режим Push-to-Talk , чтобы пользователи могли легко переключаться в режим Push-to-Talk, если у них возникают проблемы с качеством звука.

Если все пользователи приложения имеют наушники, им не придется прибегать к Push-to-Talk .

Если ваше приложение проводит многие-ко-многим конференц-связь, может быть интересной идеей позволить пользователям запрашивать токен докладчика.

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

Подробнее об ошибке

Для получения более подробной информации см. Следующий отчет об ошибках Adobe:

Описание ошибки выглядит следующим образом:

Flash Player пока не поддерживает AEC. В Flash Player 10 beta также отсутствует поддержка AEC. Разработчикам необходим встроенный AEC для создания удобных веб-сервисов с прямой аудио- и видеосвязью без необходимости иметь гарнитуру. Согласно сайту Speex, сайт Speex поддерживает AEC. Пожалуйста, добавьте поддержку AEC для версии Flash Player 10, чтобы она подходила для коммуникационных веб-сервисов.

4 голосов
/ 26 февраля 2009

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

3 голосов
/ 06 марта 2009

У меня была такая же проблема в моей системе веб-конференций, и я не мог найти никакого решения в сети. Насколько я понимаю, «Использовать подавление эха» отменит только эхо, сделанное петлей назад. Но я сделал простое решение - не идеальное, но все же лучше, чем ничего:

every 50ms check Microphone.activityLevel

if during last 1500ms activityLevel was greater than 20
then Microphone.gain *= 0.8
1 голос
/ 09 марта 2009

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

1 голос
/ 09 марта 2009

Другим частичным решением является прекращение отправки, когда уровень входного сигнала падает ниже некоторого порогового значения. Таким образом, эхо стихнет, когда кто-то перестанет говорить.

1 голос
/ 06 марта 2009

Также Вы можете пропустить поток через фильтр нижних частот для некоторого уменьшения эхо-сигнала

0 голосов
/ 12 марта 2009

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

0 голосов
/ 10 марта 2009

1) Вы должны определить проблему - если это происходит, когда никто не разговаривает, сразу после того, как из динамиков слышен звук, или только когда много людей разговаривают одновременно и т. д ...

2) обратите внимание, что в этой области, в отличие от большинства проблем с программным обеспечением, нет ни одного решения, которое работает на 100%, скорее решение состоит из нескольких методов и обычно работает очень хорошо, но не всегда.

Таким образом, вы должны реализовать некоторые из идей выше, чтобы добавить мою в этот уважаемый список:

a) начните с настройки уровней записи, усиления и т. Д. *

b) попытайтесь вставить задержку с момента записи семплов до момента их воспроизведения. для расчета задержки используется метод проб и ошибок.

в) Есть ли у вас эквалайзер? отрегулируйте его - иногда проблема в одном частотном диапазоне, возможно, в низкоуровневом ...

если ваши усилия не срабатывают, проблема более серьезна, вам нужно либо найти ее во Flex, либо внедрить какое-то «эхоподавление». Это можно сделать просто или умно, я уверен, что где-то с открытым исходным кодом.

...