События onmuted и onunmuted

alexanderY

Member
Добрый день.
Хочу уточнить, есть ли возможность отловить момент, когда удалённый стрим замьютил звук или видео (вызвал функцию muteAudio, например).
Пока что решением видится только отсылка этого события вручную через data-channels или любым другим способом.
Для лучшего понимания контекста объясню, зачем это нужно: если кто-то из участников конференции замьютил своё видео, другие участники видят просто черный прямоугольник. Хочется заменить его на фотографию (аватарку) участника.
 

Max

Administrator
Staff member
Добрый день.

muteAudio и muteVideo - это функции, которые выполняются только на клиенте. Сервер о них не знает.
Поэтому да, нужно передать подписчикам сигнальную информацию, которая скажет им, что публикуемый поток muted.
Для этого можно воспользоваться функцией:
Code:
Participant.sendMessage();
В Room API
Например, можно отправить служебное сообщение:
Code:
participant.sendMessage('local:muted');
Далее получить его на подписчике и обработать, подменив на аватар.

Кроме этого есть другой вариант, наверное более сложный.
В последних версиях API и сервера мы добавили поддержку снапшотов. Т.е. со стрима можно снять снапшот и получить в PNG Base64.
Здесь можно скачать пример. Т.е. в результате получаете снимок публикуемого видеопотока в PNG. Возможно можно его проанализировать средствами JS и убедиться что он черный. И по этой информации, заменить на аватар.
 

alexanderY

Member
Спасибо. Как раз первый вариант я сейчас и реализую. Точнее - уже почти закончил. Сейчас возникло небольшое затруднение. Если видео стрима замьючено (т.е. слышно аудио, но вместо картинки черный прямоугольник). Зритель обновляет страницу, подключается к комнате, получает список стримов, запускает их. Но звука нет.

То есть, событие STREAM_STATUS.PLAYING срабатывает. В DOM появляется элемент video. Но звука нет. Однако, если публикующий сделает unmuteVideo, то звук с изображением появляются. Это ожидаемое поведение?
 

alexanderY

Member
Похоже, что проблема касается только тех случаев, когда публикующий - Firefox. Не могу повторить, если публикуется из Хрома.
 

Max

Administrator
Staff member
То есть, событие STREAM_STATUS.PLAYING срабатывает. В DOM появляется элемент video. Но звука нет. Однако, если публикующий сделает unmuteVideo, то звук с изображением появляются. Это ожидаемое поведение?
Нет. Звук и видео включаются / отключаются отдельно. Поэтому поведение некорректное.
Другое дело, что Firefox или другой браузер может синхронизовать аудио и видео при воспроизведении и не играть одно без другого.
Мы оформим это поведение как баг. Если оно исправляемо, попробуем исправить.
 

alexanderY

Member
Спасибо. Вопрос вдогонку. Знаете ли вы какой-либо "железный" способ понять (на стороне браузера), что такой-то стрим воспроизводит аудио и/или видео?
Я имею в виду, что человек может понять это, просто взглянув на страницу и/или послушав, есть звук или нет. Сейчас активно тестируем наше приложение, и периодически так получается, как в случае выше: по всем признакам стрим есть — а по факту нет.
 

Max

Administrator
Staff member
Такого теста пока нет. Теструем визуально. Можно получить статистику входящего видео, но она не даст гарантии, что видео отображается.
Для видео единственный вариант - получить картинку из video-элемента и ее анализировать. Пока этим не занимались.
 
Top