Перейти к содержанию

REST хуки уведомления

Описание работы уведомления на примере хука /StreamStatusEvent

REST хук /StreamStatusEvent относится к уведомлениям. Такие REST хуки используются для уведомления бэкенда о результатах тех или иных операций.

Например, хук StreamStatusEvent используется для передачи статусов операций, связанных с видеопотоками, такими как публикация и проигрывание.

Бэкенд сервер должен просто принимать этот хук, например, для сохранения информации о потоке в базе данных.

 

Из этой диаграммы видно, что хук /StreamStatusEvent идет по двум направлениям:

  1. На клиента - шаг 4
  2. На web-сервер - шаг 5

Пример:

POST /rest/my_api/StreamStatusEvent HTTP/1.1
Accept: application/json
Content-Type: application/json;charset=UTF-8
User-Agent: Java/1.8.0_111
Host: 192.168.1.101
Connection: keep-alive
Content-Length: 3614

{
    "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101",
    "appKey":"defaultApp",
    "sessionId":"/192.168.1.102:4388/192.168.1.101:8443",
    "mediaSessionId":"56141d10-fddc-11e6-ac3a-4d67d5b3360d",
    "name":"b4e7",
    "published":true,
    "hasVideo":true,
    "hasAudio":true,
    "status":"PUBLISHING",
    "sdp":".....",
    "record":false,
    "width":0,
    "height":0,
    "bitrate":0,
    "quality":0,
    "mediaProvider":"WebRTC"
}
HTTP/1.1 200 OK
Date: Tue, 28 Feb 2017 17:35:44 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Content-Length: 3656
Connection: close
Content-Type: application/json

{
   "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101",
    "appKey":"defaultApp",
    "sessionId":"/192.168.1.102:4388/192.168.1.101:8443",
    "mediaSessionId":"56141d10-fddc-11e6-ac3a-4d67d5b3360d",
    "name":"b4e7",
    "published":true,
    "hasVideo":true,
    "hasAudio":true,
    "status":"PUBLISHING",
    "sdp":".....",
    "record":false,
    "width":0,
    "height":0,
    "bitrate":0,
    "quality":0,
    "mediaProvider":"WebRTC"
}

Обработка ошибок

По-умолчанию, WCS не проверяет статус ответа на вызов REST хука /StreamStatusEvent. Т.е. если бэкенд вернет HTTP статус ошибки 403 или 500 или любой другой, то WCS это проигнорирует.

Чтобы WCS прореагировал на такую ошибку, нужно выставить restOnError: FAIL в настройках хука /StreamStatusEvent в объекте restClientConfig при создании подключения.

В этом случае на клиента будет отправлено отдельное событие ErrorEvent, и клиент будет оповещен об ошибке.

На шаге 6 бэкенд возвращает HTTP статус 500 Internal Error в ответ на вызов хука /StreamStatusEvent. WCS сервер на шаге 7 уведомляет клиента о возникшей ошибке.

Пример:

POST /rest/my_api/StreamStatusEvent HTTP/1.1
Accept: application/json
Content-Type: application/json;charset=UTF-8
User-Agent: Java/1.8.0_111
Host: 192.168.1.101
Connection: keep-alive
Content-Length: 3624

{
    "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101",
    "appKey":"defaultApp",
    "sessionId":"/192.168.1.102:25301/192.168.1.101:8443",
    "mediaSessionId":"e9c002d0-fde2-11e6-a2bf-c99492323844",
    "name":"dc6a",
    "published":true,
    "hasVideo":true,
    "hasAudio":true,
    "status":"PUBLISHING",
    "sdp":".....",
    "record":false,
    "width":0,
    "height":0,
    "bitrate":0,
    "quality":0,
    "mediaProvider":"WebRTC"
}
HTTP/1.1 500 Internal Server Error
Date: Tue, 28 Feb 2017 18:22:49 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8