Тип 3 - событие¶
Описание работы события на примере StreamStatusEvent
¶
REST-метод StreamStatusEvent
относится к событиям. События происходят внутри WCS-сервера и используются для передачи статусов тех или иных операций.
Например, событие StreamStatusEvent
используется для передачи статусов операций, связанных с видеопотоками, такими как Stream.play()
и Stream.publish()
. Действительно, если мы публикуем, воспроизводим видеопоток или останавливаем его, мы должны знать его статус для того, чтобы управлять таким потоком.
Бэкенд сервер не может аутентифицировать (запретить или разрешить) событие и просто принимает его, например для сохранения информации о потоке в базе данных.
Из этой диаграммы видно, что событие StreamStatusEvent
идет по двумbнаправлениям:
- На клиента - шаг 4
- На 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
. Т.е. если web-сервер вернет HTTP статус ошибки 403 или 500 или любой другой, то WCS это роигнорирует.
Чтобы WCS прореагировал на такую ошибку, нужно выставить restOnError: FAIL
в настройках метода StreamStatusEvent
в объекте restClientConfig при создании подключения.
В этом случае на клиента будет отправлено отдельное событие ErrorEvent
, и клиент будет оповещен об ошибке.
На шаге 6 web-сервер возвращает 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"
}