Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Отправка события с публикующего клиента

...

Отправка оповещения о статусе аудио/видео в потоке: заглушено/не заглушено

Оповещения об изменении состояния аудио отсылаются следующим образом, при вызове функций Stream.muteAudio() и Stream.unmuteAudio():

...

Code Block
languagejs
themeRDark
    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(), например

Code Block
languagejs
themeRDark
stream.sendData({"number":33,"string":"hello",boolean:true});

Отправка события подписчикам потока с сервера

В сборке WCS 5.2.944 добавлена возможность отправки события всем подписчикам потока с сервера по REST API. 

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

  • HTTP: http://test.flashphoner.com:8081/rest-api/stream/event/send
  • HTTPS: https://test.flashphoner.com:8444/rest-api/stream/event/send

Здесь:

  • test.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /stream/event/send - используемый REST-метод

REST-методы и статусы ответа

REST-метод

Пример тела REST-запроса

Статусы ответа

Описание

/stream/event/send

Code Block
languagejs
themeRDark
{
 "streamName":"test",
 "payload":{
  "number":33,
  "string":"hello",
  "boolean":true
 }
}

200 - OK

404 - Stream not found

500 - Internal server error (bad JSON)


Отправить данные всем подписчикам потока


Параметры

Имя параметра

Описание

Пример

streamNameИмя потокаtest

payload

Данные в формате JSON

{"number":33,"string":"hello","boolean":true}

Если поток опубликован на сервере, но не имеет ни одного подписчика, запрос вернет 200 OK, но событие никому не будет отослано

Получение события на стороне подписчика

...

Code Block
languagejs
themeRDark
    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);
    }).play();

В сборке WCS 5.2.942 и сборке WebSDK 2.0.168 добавлен тип STREAM_EVENT_TYPE.DATA для получения данных в формате JSON, отосланных функцией stream.sendData() или REST запросом /stream/send/event

Code Block
languagejs
themeRDark
    session.createStream({
        name: streamName,
        display: remoteVideo
        ...
    }).on(STREAM_EVENT, function(streamEvent) {
        switch (streamEvent.type) {
   previewStream =           case STREAM_EVENT_TYPE.DATA:
                console.log(JSON.stringify(streamEvent.payload));
                break;
        }
    }).play();

Получение события, связанного со входящим потоком микшера

Начиная со сборки 5.2.966, подписчик, играющий выходной поток микшера, получает события, связанные с одним из входящих потоков микшера. При этом в объект payload добавляется поле streamName, чтобы показать, к какому именно потоку относится событие

Code Block
languagejs
themeRDark
    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
languagejs
themeRDark
    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
languagebash
themeRDark
add app-rest-method MyAppKey sendStreamEvent
add app-rest-method MyAppKey StreamEvent

...

Оповещение о заглушенном аудио/видео

Если аудио или видео было заглушено, бэкенд-сервер получит событие sendStreamEvent

Code Block
languagejs
themeRDark
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
languagejs
themeRDark
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
languagejs
themeRDark
URL:http://localhost:8081/apps/EchoApp/sendStreamEvent
OBJECT:
{
  "nodeId" : "qg4BeHzYSAtkhUkXgnSMEUZpsshaLPL5@192.168.0.39",
  "info" : """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"
}

...

Также бэкенд-сервер получит событие StreamEvent для каждого подписчика этого потока

Code Block
languagejs
themeRDark
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
  }
}