2013-12-20 5 views
0

Как сервер, на котором работает аудиоконференция, находит, кто является активным динамиком/динамиками? Я хочу показать значок рядом с пользователями, которые в настоящее время говорят, и показать видео активного динамика.Найти активный динамик в аудиоконференции

Я думаю, что нужно что-то вроде:

  • Вычислить оценку для каждого использования на основе аудио/мощности/уровней энергии.
  • Нормализовать оценку между всеми пользователями.
  • Рассчитайте оценку на нескольких звуковых кадрах, чтобы предотвратить быстрые изменения.

Нужно ли делать вычисления на необработанном звуке или можно получить оценку из закодированных пакетов (speex/opus)? Есть ли способ извлечь эту информацию из протокола, передающего аудио (RTMP или SDP)?

В FreeSwitch есть status field для каждого участника с флагами для разговора и владельца пола. Это код, который calculates the score, но я не могу понять, как это работает.

Благодаря

ответ

0

Обычно участник, который посылает громкий звуковой поток считается "активный динамик.

Итак, вам нужно рассчитать громкость для каждого аудиопотока. Как измерять громкость зависит от кодирования вашего аудиопотока. Проверьте это question на том, как рассчитать громкость звука PCM.

+0

Должен ли я декодировать потоки или есть информация в протоколе пакетов (RTMP и WebRTC)? Как я могу нормализовать звук всех пользователей, чтобы сравнение было разумным? – pablo

+0

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

+0

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