Как сервер, на котором работает аудиоконференция, находит, кто является активным динамиком/динамиками? Я хочу показать значок рядом с пользователями, которые в настоящее время говорят, и показать видео активного динамика.Найти активный динамик в аудиоконференции
Я думаю, что нужно что-то вроде:
- Вычислить оценку для каждого использования на основе аудио/мощности/уровней энергии.
- Нормализовать оценку между всеми пользователями.
- Рассчитайте оценку на нескольких звуковых кадрах, чтобы предотвратить быстрые изменения.
Нужно ли делать вычисления на необработанном звуке или можно получить оценку из закодированных пакетов (speex/opus)? Есть ли способ извлечь эту информацию из протокола, передающего аудио (RTMP или SDP)?
В FreeSwitch есть status field для каждого участника с флагами для разговора и владельца пола. Это код, который calculates the score, но я не могу понять, как это работает.
Благодаря
Должен ли я декодировать потоки или есть информация в протоколе пакетов (RTMP и WebRTC)? Как я могу нормализовать звук всех пользователей, чтобы сравнение было разумным? – pablo
Если вы не придумаете сопоставимые измерения разных кодировок, я бы предположил, что вам нужно декодировать потоки в общий аудиоформат. Но код конференц-связи, вероятно, должен будет все равно декодировать все аудиопотоки, чтобы смешивать их для общего аудио-канала для отправки каждому участнику. –
Обратите внимание, что для этого подхода вам понадобится небольшая задержка между переключением, которое считается активным, так что короткий громкий шум на одном динамике не будет немедленно переключаться на них. – Kat