Передача события, привязанного к потоку¶
Описание¶
В сборке 5.2.935 добавлена возможность отправки с клиента события, привязанного к публикуемому потоку, и передачи этого события всем подписчикам. В настоящее время эта возможность используется для оповещения подписчиков о том, заглушено ли аудио/видео на публикующей стороне.
Отправка события с публикующего клиента¶
Отправка оповещения о статусе аудио/видео в потоке: заглушено/не заглушено¶
Оповещения об изменении состояния аудио отсылаются следующим образом, при вызове функций 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);
}
};
Отправка данных всем подписчикам потока¶
В сборке WCS 5.2.942 и сборке WebSDK 2.0.168 добавлена возможность отправки любых данных с публикующего клиента в формате JSON всем подписчикам опубликованного потока. Для этого необходимо вызвать метод Stream.sendData()
, например
POST /rest-api/stream/event/send HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"streamName":"test",
"payload":{
"number":33,
"string":"hello",
"boolean":true
}
}
Параметр | Описание | Пример |
---|---|---|
streamName | Имя потока |
test
|
payload | Данные в формате JSON |
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);
});
session.createStream({
name: streamName,
display: remoteVideo
...
}).on(STREAM_EVENT, function(streamEvent) {
switch (streamEvent.type) {
case STREAM_EVENT_TYPE.DATA:
console.log(JSON.stringify(streamEvent.payload));
break;
}
}).play();
session.createStream({
name: streamName,
display: remoteVideo,
...
}).on(STREAM_EVENT, function(streamEvent) {
let mutedName="";
if(streamEvent.payload !== undefined) {
mutedName=streamEvent.payload.streamName;
}
switch (streamEvent.type) {
case STREAM_EVENT_TYPE.AUDIO_MUTED:
$("#audioMuted").text(true + " " + mutedName);
break;
case STREAM_EVENT_TYPE.AUDIO_UNMUTED:
$("#audioMuted").text(false + " " + mutedName);
break;
case STREAM_EVENT_TYPE.VIDEO_MUTED:
$("#videoMuted").text(true + " " + mutedName);
break;
case STREAM_EVENT_TYPE.VIDEO_UNMUTED:
$("#videoMuted").text(false + " " + mutedName);
break;
}
console.log("Received streamEvent ", streamEvent.type);
}).play();
session.createStream({
name: streamName,
display: remoteVideo,
...
}).on(STREAM_STATUS.PLAYING, function (stream) {
if (stream.getAudioState()) {
$("#audioMuted").text(stream.getAudioState().muted);
}
if (stream.getVideoState()) {
$("#videoMuted").text(stream.getVideoState().muted);
}
...
}).play;
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",
"origin" : "https://wcs:8888"
}
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"
}
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" : "data",
"payload" : {
"count" : 23
},
"origin" : "https://wcs:8888"
}
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" : "data",
"payload" : {
"count" : 23
}
}