Table of Contents |
---|
Описание
Как правило, для передачи WebRTC медиаданных на транспортном уровне используется UDP. С одной стороны, это позволяет снизить задержки при передаче данных. С другой стороны, в результате потерь пакетов, качество высокобитрейтных FullHD и 4K трансляций снижается даже на относительно хороших каналах.
Если необходимо обеспечить качество WebRTC-трансляций, WCS позволяет использовать TCP на транспортном уровне в соответствии с RFC 4571 и 6544.
Поддерживаемые платформы и браузеры
Chrome | Firefox | Safari 11 | Edge | |
---|---|---|---|---|
Windows | + | + |
+ | ||||
Mac OS | + | + | + | |
Android | + | + | ||
iOS | - | - | + |
Схема работы
- Браузер соединяется с сервером по протоколу Websocket и отправляет команду publish.
- Браузер захватывает микрофон и камеру и отправляет WebRTC поток на сервер через TCP.
- Второй браузер устанавливает соединение также по Websocket и отправляет команду play.
- Второй браузер получает WebRTC поток через TCP и воспроизводит этот поток на странице.
Последовательность выполнения операций (Call Flow)
...
Последовательность выполнения операций отличается от от публикации потока по WebRTC в в части установки WebRTC соединения:
1. Клиент отправляет серверу предложение локального SDP по Websocket.
2. Клиент получает SDP от сервера. В SDP указываются TCP ICE-кандидаты:
...
3. Клиент устанавливает TCP соединение на порты для аудио и видео данных, указанные в SDP, и начинает передачу медиаданных.
Аналогично, последовательность выполнения операций при воспроизведении потока будет следующей:
1. Клиент отправляет серверу предложение локального SDP по Websocket.
2. Клиент получает SDP от сервера. В SDP указываются TCP ICE-кандидаты.
3. Клиент устанавливает TCP соединение на порты для аудио и видео данных, указанные в SDP, и начинает прием медиаданных.
Настройка
Использование WebRTC через TCP включается настройкой в файле flashphoner.properties
Code Block | ||
---|---|---|
| ||
ice_tcp_transport=true |
Управление размерами буферов на прием и передачу
Размеры буферов для приема и отправки данных настраиваются при помощи следующих параметров:
...
По умолчанию, размеры буферов установлены в 1 Мб.
Использование портов
Для WebRTC через TCP используются TCP порты с номерами из диапазона, выделенного для WebRTC медиа портов
Code Block | ||
---|---|---|
| ||
media_port_from =31001 media_port_to =32000 |
Краткое руководство по тестированию
1. Для теста используем:
- WCS сервер
- веб-приложение Two Way Streaming для публикации и воспроизведения потока в браузере Chrome
...
Code Block | ||||
---|---|---|---|---|
| ||||
netstat -np | grep ESTABLISHED |
Результат Результатом выполнения будет будут следующие строки
Code Block | ||||
---|---|---|---|---|
| ||||
# Websocket session tcp 0 0 192.168.1.5:8443 192.168.1.100:60289 ESTABLISHED 7459/java # publishing stream tcp 0 0 192.168.1.5:31030 192.168.1.100:60305 ESTABLISHED 7459/java tcp 0 0 192.168.1.5:31032 192.168.1.100:60307 ESTABLISHED 7459/java # playing stream tcp 0 112 192.168.1.5:31038 192.168.1.100:60515 ESTABLISHED 7459/java tcp 0 817 192.168.1.5:31040 192.168.1.100:60517 ESTABLISHED 7459/java |
...
- 192.168.1.5 - IP адрес WCS сервера
- 192.168.1.100 - IP адрес клиента
Известные проблемы
1. WebRTC соединение не устанавливается браузером Firefox под Windows 7
Симптомы: публикация и воспроизведение не работают в браузере Firefox под Windows 7
Решение: использовать браузер Chrome под Windows 7
2. WebRTC соединение не устанавливается браузером Edge под Windows 8-10
Симптомы: публикация и воспроизведение не работают в браузере Edge под Windows 8-10
Решение:
a) обновить Windows 10 до сборки 1809 (версия Microsoft Edge 44.17763.1.0, Microsoft EdgeHTML 18.17763)
b) использовать другой браузерв некоторых браузерах (MS Edge на Windows, Chrome на Ubuntu), если на ПК используется дополнительный сетевой интерфейс (VPN)
Симптомы: публикация и воспроизведение WebRTC через TCP не работают
Решение: отключить все дополнительные сетевые интерфейсы, кроме имеющего доступ к WCS серверу.