Описание работы на примере метода publishStream
REST-метод publishStream относится к прямым вызовам, т.к. вызов этого метода инициирует клиент командой stream.publish() - попытка публикации видеопотока с веб-камеры.
Эта операция может быть авторизована, т.е. отменена либо разрешена и параметры этой операции могут быть переопределены на стороне web-сервера.
Например поле name=’stream1’ заменено на name=’stream2’, и если такая замена успешно пройдет, WCS будет публиковать уже поток с новым именем stream2.
Мы уже рассматривали метод publishStream выше, поэтому просто снова приведем последовательность вызовов:
Пример:
2 | 3 |
---|---|
POST /rest/my_api/publishStream HTTP/1.1 Accept: application/json, 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: 3611 { "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":"PENDING", "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:43 GMT Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.3.3 Content-Length: 3653 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":"PENDING", "sdp":"", "record":false, "width":0, "height":0, "bitrate":0, "quality":0, "mediaProvider":"WebRTC" } |
Аутентификация
Аутентификация проходит также, как и в случае вызова connect. Также можно передать токен или пароль, или разрешить / запретить операцию, основываясь на других параметрах.
Для работы аутентификации нужно настроить метод publishStream на этапе подключения (connect) и выставить restOnError:FAIL в конфиге restClientConfig.
Пример:
2 | 3 |
---|---|
POST /rest/my_api/publishStream HTTP/1.1 Accept: application/json, 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: 3639 { "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101", "appKey":"defaultApp", "sessionId":"/192.168.1.102:17749/192.168.1.101:8443", "mediaSessionId":"0e17ab50-fdbc-11e6-8a47-c5292ef61cc0", "name":"3a88", "published":true, "hasVideo":true, "hasAudio":true, "status":"PENDING", "sdp":".....", "record":false, "width":0, "height":0, "bitrate":0, "quality":0, "mediaProvider":"WebRTC", "custom":{ "token":"abcdef" } } | HTTP/1.1 403 Forbidden Date: Tue, 28 Feb 2017 13:44:39 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 |
Переопределение полей
Переопределение полей проходит при нормальной работе метода и возврате 200 OK.
Целью переопределения полей может являться например сокрытие реального имени потока от конечного пользователя на web-странице.
Например пользователь отправляет поток stream1, но на сервере его имя меняется на stream2.
Чтобы выполнить такое переопределение, нужно:
- Включить "restPolicy":"OVERWRITE" для метода publishStream при подключении к серверу, в restClientConfig.
- Перечислить через запятую в "restOverwrite":"" список полей, которые должны быть перезаписаны, например "restOverwrite":"name" для restClientConfig. В этом случае будет перезаписано только поле name - имя потока.
- Вернуть в теле JSON ответа 200 OK модифицированное поле name, а остальные поля вернуть такими, какими они были получены от WCS-сервера.
Пример:
2 | 3 |
---|---|
POST /rest/my_api/publishStream HTTP/1.1 Accept: application/json, 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: 3612 { "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101", "appKey":"defaultApp", "sessionId":"/192.168.1.102:12514/192.168.1.101:8443", "mediaSessionId":"abbe7e90-fdcd-11e6-9831-bd76c6e822a1", "name":"2a0c", "published":true, "hasVideo":true, "hasAudio":true, "status":"PENDING", "sdp":".....", "record":false, "width":0, "height":0, "bitrate":0, "quality":0, "mediaProvider":"WebRTC" } | HTTP/1.1 200 OK Date: Tue, 28 Feb 2017 15:50:44 GMT Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.3.3 Content-Length: 3669 Connection: close Content-Type: application/json { "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101", "appKey":"defaultApp", "sessionId":"\/192.168.1.102:12514\/192.168.1.101:8443", "mediaSessionId":"abbe7e90-fdcd-11e6-9831-bd76c6e822a1", "name":"streamChangedName", "published":true, "hasVideo":true, "hasAudio":true, "status":"PENDING", "sdp":".....", "record":false, "width":0, "height":0, "bitrate":0, "quality":0, "mediaProvider":"WebRTC" } |
Исключение полей из передачи
Этот метод работает только в одном направлении - от WCS к web-серверу. Т.е. можно исключить одно или несколько полей, которые передаются от WCS сервера к web-серверу в теле JSON запроса на шаге 2.
По-умолчанию publishStream передает весь набор полей.
Для того чтобы исключить поля, нужно перечислить исключаемые поля через запятую в настройке "restExclude":"", при установке соединения в restClientConfig.
Пример работы при исключении поля name - имя потока:
2 | 3 |
---|---|
POST /rest/my_api/publishStream HTTP/1.1 Accept: application/json, 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: 3602 { "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101", "appKey":"defaultApp", "sessionId":"/192.168.1.102:9232/192.168.1.101:8443", "mediaSessionId":"084db2f0-fdd5-11e6-9ba5-6ba06f30ad92", "published":true, "hasVideo":true, "hasAudio":true, "status":"PENDING", "sdp":".....", "record":false, "width":0, "height":0, "bitrate":0, "quality":0, "mediaProvider":"WebRTC" } | HTTP/1.1 200 OK Date: Tue, 28 Feb 2017 16:43:26 GMT Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.3.3 Content-Length: 3649 Connection: close Content-Type: application/json { "nodeId":"Hw47CFMBEchVOpBMDr29IxjudnJ1sjOY@192.168.1.101", "appKey":"defaultApp", "sessionId":"\/192.168.1.102:9232\/192.168.1.101:8443", "mediaSessionId":"084db2f0-fdd5-11e6-9ba5-6ba06f30ad92", "published":true, "hasVideo":true, "hasAudio":true, "status":"PENDING", "sdp":".....", "record":false, "width":0, "height":0, "bitrate":0, "quality":0, "mediaProvider":"WebRTC" } |