...
REST-методы и статусы ответа
REST-метод | Пример тела REST-запроса | Статусы ответа | Описание | |||||||
---|---|---|---|---|---|---|---|---|---|---|
/stream/event/send |
| 200 - OK 404 - Stream not found 500 - Internal server error (bad JSON) | Отправить данные всем подписчикам потока |
Параметры
Имя параметра | Описание | Пример |
---|---|---|
streamName | Имя потока | test |
payload | Данные в формате JSON | {"number":33,"string":"hello","boolean":true} |
Если поток опубликован на сервере, но не имеет ни одного подписчика, запрос вернет 200 OK, но событие никому не будет отослано
...
В сборке WCS 5.2.942 и сборке WebSDK 2.0.168 добавлен тип STREAM_EVENT_TYPE.DATA для получения данных в формате JSON, отосланных функцией stream.sendData() или REST запросом /stream/send/event
Code Block | ||||
---|---|---|---|---|
| ||||
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(); |
Получение события, связанного со входящим потоком микшера
Начиная со сборки 5.2.966, подписчик, играющий выходной поток микшера, получает события, связанные с одним из входящих потоков микшера. При этом в объект payload
добавляется поле streamName
, чтобы показать, к какому именно потоку относится событие
Code Block | ||||
---|---|---|---|---|
| ||||
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(); |
Определение статуса потока при подключении к потоку
При подключении к потоку, подписчик может определить, заглушена аудио/видео дорожка в потоке или нет, при помощи методов Stream.getAudioState() и Stream.getVideoState() в обработчике события STREAM_STATUS.PLAYING:
Code Block | ||||
---|---|---|---|---|
| ||||
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; |
Определение статусов входящих потоков при подключении к выходному потоку микшера
Начиная со сборки WCS 5.2.1011, при подключении подписчика к выходному потоку микшера, он получает набор событий STREAM_EVENT на каждый входящий поток микшера, если хотя бы в одном из них аудио или видео было заглушено. При этом порядок получения этих событий не гарантируется и не зависит от порядка добавления потоков в микшер.
Обработка события на бэкенде
Для того, чтобы обработать событие об изменении состояния потока на бэкенде, к приложению должны быть добавлены методы sendStreamEvent и SreamEventStreamEvent
Code Block | ||||
---|---|---|---|---|
| ||||
add app-rest-method MyAppKey sendStreamEvent add app-rest-method MyAppKey StreamEvent |
...
Оповещение о заглушенном аудио/видео
Если аудио или видео было заглушено, бэкенд-сервер получит событие sendStreamEvent
Code Block | ||||
---|---|---|---|---|
| ||||
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"
} |
Также бэкенд-сервер получит событие StreamEvent для каждого подписчика этого потока
Code Block | ||||
---|---|---|---|---|
| ||||
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" } |
Оповещение о данных, переданных подписчикам
Если подписчикам потока были отправлены данные со стороны публикующего клиента или с сервера, бэкенд-сервер получит событие sendStreamEvent
Code Block | ||||
---|---|---|---|---|
| ||||
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" : "info9906b2b0-9c28-11eb-8d20-75f877676678", "type" : "data", "payload" : { "count" : 23 }, "origin" : "https://wcs:8888" } |
...
Также бэкенд-сервер получит событие StreamEvent для каждого подписчика этого потока
Code Block | ||||
---|---|---|---|---|
| ||||
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" : "audioMuteddata", "infopayload" : { "count" : 23 } } |