TURN server¶
Описание¶
TURN сервер используется для установки WebRTC соединения и передачи медиатрафика, если брандмауэр блокирует обмен по UDP между клиентом и сервером
Возможны следующие варианты использования TURN сервера совместно с WCS-сервером:
-
Использование внешнего TURN сервера. Данный вариант подходит корпоративным пользователям с развитой инфраструктурой, а также пользователям, предпочитающим разделять выполняемые задачи по серверам.
-
Использование внутреннего TURN сервера, встроенного в WCS. Данный вариант подходит малым предприятиям и пользователям, предпочитающим решения "из коробки".
Поддерживаемые платформы и браузеры¶
Chrome | Firefox | Safari | Chromium Edge | |
---|---|---|---|---|
Windows | ✅ | ❌ | ❌ | ✅ |
Mac OS | ✅ | ❌ | ✅ | ✅ |
Android | ✅ | ❌ | ❌ | ✅ |
iOS | ✅ | ❌ | ✅ | ✅ |
Использование внешнего TURN-сервера¶
При использовании внешнего TURN сервера трафик через доступные TCP-порты проходит следующим образом:
Установка и настройка TURN-сервера на CentOS 7¶
-
Скачайте и установите turnserver
Для компиляции из исходных текстов можно воспользоваться следующим руководством -
Создайте файл конфигурации
turnserver.conf
Пример конфигурационного файлаturnserver.conf.default
находится в директории/usr/local/etc
. Можно переименовать его вturnserver.conf
или создать новый файл
Ниже приведен пример минимального конфигурационного файла:
- Как видно из этого примера, для работы TURN-сервера необходимысертификат и приватный ключ
Если TURN-сервер установлен на том же сервере, что WCS-сервер, то можно воспользоваться сертификатами WCS-сервера.
Если TURN-сервер установлен на другом сервере, то можно воспользоваться openssl, чтобы сгенерировать сертификат и приватный ключ:
-
ОБЯЗАТЕЛЬНО: В конфигурационном файле TURN-сервера должна быть включена авторизация и указаны пользователи для авторизации (первые три строки примера конфигурационного файла).
-
Запустите turnserver
Соединение с использованием внешнего TURN-сервера¶
При создании сессии c помощью Flashphoner WebSDK необходимо передать параметр mediaOptions
, в котором следует указать параметры TURN-сервера. Ниже приведен пример создания такой сессии:
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:192.168.0.1:3478?transport=tcp', 'credential': 'password1', 'username': 'username1' } ], "iceTransportPolicy": "relay"}})
Использование внутреннего TURN-сервера¶
При использовании внешнего TURN сервера трафик через доступные TCP-порты проходит следующим образом:
Браузер клиента устанавливает TCP-соединение на порт встроенного TURN сервера (по умолчанию 3478), затем встроенный TURN соединяется по UDP, используя заданный диапазон портов, на локальный интерфейс WCS. Таким образом, с точки зрения клиента медиатрафик идет через TCP-туннель, а с точки зрения WCS ничего не изменяется, трафик идет через UDP-порты.
Побочный эффект данной схемы в том, что медиатрафик от клиента до WCS-сервера идет по TCP, что может серьезно улучшить качество HD трансляций с высоким битрейтом.
Настройка внутреннего TURN-сервера¶
Внутренний TURN сервер настраивается при помощи следующих параметров в файле flashphoner.properties:
Параметр | Значение по умолчанию | Описание |
---|---|---|
turn_ip |
ip |
Внешний IP адрес встроенного TURN сервера (по умолчанию совпадает с ip ) |
turn_ip_local |
ip_local |
Внутренний адрес встроенного TURN сервера, используется для привязки порта (по умолчанию совпадает с ip_local ) |
turn_port |
3478 | TCP порт встроенного TURN сервера |
turn_password |
coM77EMrV7Cwhyan | пароль на доступ к TURN серверу (имя пользователя всегда flashphoner ) |
turn_media_port_from |
36001 | Начало диапазона UDP портов, используемых TURN для пропуска медиатрафика при подключении к WCS |
turn_media_port_to |
37000 | Окончание диапазона UDP портов |
turn_media_ports_auditor_interval |
5000 | Интервал проверки занятых портов в миллисекундах |
turn_media_ports_auditor_max_attempts |
3 | Количество проверок, освобожден ли порт |
turn.server_channel_receive_buffer_size |
1048576 | Размер буфера на прием данных в байтах |
turn.server_channel_send_buffer_size |
1048576 | Размер буфера на передачу данных в байтах |
Соединение с использованием внутреннего TURN-сервера¶
Как и для внешнего TURN сервера, при создании сессии c помощью Flashphoner WebSDK необходимо передать параметр mediaOptions
, в котором следует указать параметры встроенного TURN-сервера:
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:test.flashphoner.com:3478?transport=tcp', 'credential': 'coM77EMrV7Cwhyan', 'username': 'flashphoner' } ]}})
Если UDP-порты закрыты брандмауэром, браузер не может установить WebRTC соединение по UDP. В этом случае необходимо в mediaOptions
указать параметр "iceTransportPolicy": "relay"
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:test.flashphoner.com:3478?transport=tcp', 'credential': 'coM77EMrV7Cwhyan', 'username': 'flashphoner' } ], "iceTransportPolicy": "relay"}})
для того, чтобы медиатрафик пошел через TURN сервер.
Краткое руководство по тестированию¶
- Для теста используем:
- WCS сервер с активированным встроенным TURN сервером
- веб-приложение Firewall Traversal Streaming в браузере Chrome
-
iptables
для закрытия UDP портов на сервере -
Закройте UDP порты на внешнем сетевом интерфейсе WCS сервера
Здесь
ens192
- внешний сетевой интерфейс WCS сервера. -
Откройте приложение Firewall Traversal Streaming, укажите в поле
ЗдесьTURN server
test.flashphoner.com
- адрес WCS сервера-
3478
- порт встроенного TURN сервера -
Настройте перенаправление медиа трафика
- если UDP порты на WCS сервере открыты, снимите переключатель
Force relay
-
если UDP порты на WCS сервере закрыты, установите переключатель
Force relay
-
Нажмите
Connect
, введите имя потокаtest
и нажмитеPublish
. Начнется публикация потока через встроенный TURN сервер
Известные проблемы¶
1. Некоторые браузеры не поддержкивают работу через TURN сервер¶
Браузеры Microsoft Legacy Edge и Mozilla Firefox не поддерживают работу через TURN сервер
Симптомы
При попытке установить соединение через TURN сервер публикация/воспроизведение не работают
Решение
Использовать браузер Chrome или его производные