Описание
В сборке 5.2.935 добавлена возможность отправки с клиента события, привязанного к публикуемому потоку, и передачи этого события всем подписчикам. В настоящее время эта возможность используется для оповещения подписчиков о том, заглушено ли аудио/видео на публикующей стороне.
Отправка события с публикующего клиента
Для отправки события на стороне клиента вызывается функция Stream.sendStreamEvent() с указанием типа события. Например, события об изменении состояния аудио отсылаются следующим образом, при вызове функций Stream.muteAudio() и Stream.unmuteAudio():
var muteAudio = function muteAudio() { if (mediaConnection) { mediaConnection.muteAudio(); sendStreamEvent(STREAM_EVENT_TYPE.AUDIO_MUTED); } }; ... var unmuteAudio = function unmuteAudio() { if (mediaConnection) { mediaConnection.unmuteAudio(); sendStreamEvent(STREAM_EVENT_TYPE.AUDIO_UNMUTED); } };
Аналогично, при вызовах Stream.muteVideo() и Stream.unmuteVideo() отсылаются события об изменении состояния видео:
var muteVideo = function muteVideo() { if (mediaConnection) { mediaConnection.muteVideo(); sendStreamEvent(STREAM_EVENT_TYPE.VIDEO_MUTED); } }; ... var unmuteVideo = function unmuteVideo() { if (mediaConnection) { mediaConnection.unmuteVideo(); sendStreamEvent(STREAM_EVENT_TYPE.VIDEO_UNMUTED); } };
Получение события на стороне подписчика
При передаче события, сигнализирующего об изменении состояния потока, подписчик получает событие STREAM_EVENT
previewStream = session.createStream({ name: streamName, display: remoteVideo, ... }).on(STREAM_EVENT, function(streamEvent) { switch (streamEvent.type) { case STREAM_EVENT_TYPE.AUDIO_MUTED: $("#audioMuted").text(true); break; case STREAM_EVENT_TYPE.AUDIO_UNMUTED: $("#audioMuted").text(false); break; case STREAM_EVENT_TYPE.VIDEO_MUTED: $("#videoMuted").text(true); break; case STREAM_EVENT_TYPE.VIDEO_UNMUTED: $("#videoMuted").text(false); break; } console.log("Received streamEvent ", streamEvent.type); });
Обработка события на бэкенде
Для того, чтобы обработать событие об изменении состояния потока на бэкенде, к приложению должны быть добавлены методы sendStreamEvent и SreamEvent
add app-rest-method MyAppKey sendStreamEvent add app-rest-method MyAppKey StreamEvent
Тогда бэкенд-сервер получит событие sendStreamEvent
URL:http://localhost:8081/apps/EchoApp/sendStreamEvent OBJECT: { "nodeId" : "qg4BeHzYSAtkhUkXgnSMEUZpsshaLPL5@192.168.0.39", "appKey" : "defaultApp", "sessionId" : "/192.168.0.83:64573/192.168.0.39:8443-a98bb891-aeaf-46a8-8fba-772e07ac035b", "mediaSessionId" : "9906b2b0-9c28-11eb-8d20-75f877676678", "type" : "audioMuted", "info" : "", "origin" : "https://wcs:8888" }
если публикующая сторона заглушит поток.
Также бэкенд-сервер получит событие StreamEvent для каждого подписчика этого потока
URL:http://localhost:8081/apps/EchoApp/StreamEvent OBJECT: { "nodeId" : "qg4BeHzYSAtkhUkXgnSMEUZpsshaLPL5@192.168.0.39", "appKey" : "defaultApp", "sessionId" : "/192.168.0.83:64573/192.168.0.39:8443-a98bb891-aeaf-46a8-8fba-772e07ac035b", "mediaSessionId" : "9fed5c50-9c28-11eb-8d20-75f877676678", "type" : "audioMuted", "info" : "" }