Публикация WebRTC по протоколу WHIP¶
Описание¶
В сборке 5.2.1816 добавлена поддержка протокола WebRTC-HTTP ingestion protocol (WHIP). Этот протокол предполагает использование стандартизированного обмена SDP для установки WebRTC соединения через HTTP POST запрос
В настоящее время WHIP поддерживается OBS начиная с версии 30, только на операционной системе Windows. Кроме обмена SDP, публикация потока по WHIP не отличается от публикации из браузера по WebRTC.
Поддерживаемые кодеки¶
Видео:
- H264
- VP8, если средство публикации его поддерживает
- H265, если средство публикации его поддерживает
Аудио:
- Opus
- G711 (PCMA, PCMU), если средство публикации его поддерживает
Схема работы¶
-
Публикующий клиент (OBS) посылает HTTP POST запрос
/rest-api/stream/publish/streamName
с SDP offer -
Публикующий клиент получает 202 Accepted с SDP answer
-
Публикующий клиент устанавливает WebRTC соединение и публикует поток
-
Зритель устанавливает Websocket соединение и отправляет команду
playStream
-
Зритель устанавливает WebRTC соединение и получает опубликованный поток
Тестирование¶
-
Для тестирования используются:
- WCS сервер - OBS 30 и новее под Windows для публикации потока - пример Player в браузере Chrome для воспроизведения потока -
В настройках OBS на вкладке Stream выбирается сервис WHIP, в поле Server вводится URL HTTP POST запроса, включая имя публикуемого потока
-
Поток публикуется в OBS
-
В браузере Chrome открывается пример Player c тестируемого сервера, в примере необходимо указать имя потока
whipStream
и нажать Play
Аутентификация при помощи заголовка Authorization: Bearer
¶
В сборке 5.2.1964 добавлена поддержка аутентификации при помощи заголовка Authorization: Bearer
В этом случае публикующий клиент (OBS) должен отправлять заголовок с указанным токеном с каждый запросом при публикации данного потока по протоколу WHIP. В качестве токена может выступать любое сочетание алфавитно-цифровых символов, например, имя потока. На стороне сервера при этом проверяется сочетание имени потока и значения токена. Если значение токена отличается от полученного при запросе /rest-api/stream/publish
, сервер вернет 409 Permission denied
Известные проблемы¶
1. OBS не поддерживает публикацию WebRTC по TCP¶
Симптомы
При активной настройке сервера ice_tcp_transport=true
поток не публикуется из OBS