Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Описание

TURN сервер используется для установки WebRTC соединения и передачи медиатраффикамедиатрафика, если брандмауэр блокирует обмен по UDP между клиентом и сервером

...

2. Использование внутреннего TURN сервера, встроенного в WCS. Данный вариант подходит малым предприятиям и пользователям, предпочитающим решения "из коробки".

Поддерживаемые платформы и браузеры


Chrome

Firefox

Safari 11

Edge

Windows

+

-


-

Mac OS

+

-

+


Android

+

-



iOS

-

-

+


Использование внешнего TURN-сервера

...

Ниже приведен пример минимального конфигурационного файла:

actionscript3
Code Block
language
themeRDark
fingerprint
lt-cred-mech
user=username1:password1
realm=flashphoner.com
cert=/usr/local/etc/turn_server_cert.pem
pkey=/usr/local/etc/turn_server_pkey.pem
pkey-pwd=qweasd

...

Если TURN-сервер установлен на другом сервере, то можно воспользоваться openssl, чтобы сгенерировать сертификат и приватный ключ:

Code Block
languageactionscript3bash
themeRDark
openssl req -x509 -newkey rsa:4096 -keyout /usr/local/etc/turn_server_pkey.pem -out usr/local/etc/turn_server_cert.pem -days 365

...

3. Запустите turnserver

Code Block
languageactionscript3bash
themeRDark
turnserver

Соединение с использованием внешнего TURN-сервера

При создании сессии c помощью Flashphoner API необходимо передать параметр mediaOptions, в котором следует указать координаты TURN-сервера. Ниже приведен пример создания такой сессии:

Code Block
languageactionscript3js
themeRDark
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:192.168.0.1:3478?transport=tcp', 'credential': 'password1', 'username': 'username1' } ], "iceTransportPolicy": "relay"}})

Известные проблемы

1) Браузер Microsoft Edge не играет потоки через TURN сервер

...

Использование внутреннего TURN-сервера

При использовании внешнего TURN сервера трафик через доступные TCP-порты проходит следующим образом:

Image Added

Браузер клиента устанавливает TCP-соединение на порт встроенного TURN сервера (по умолчанию 3478), затем встроенный TURN соединяется по UDP, используя заданный диапазон портов, на локальный интерфейс WCS. Таким образом, с точки зрения клиента медиатрафик идет через TCP-туннель, а с точки зрения WCS ничего не изменяется, трафик идет через UDP-порты.

Побочный эффект данной схемы в том, что медиатрафик от клиента до WCS-сервера идет по TCP, что может серьезно улучшить качество HD трансляций с высоким битрейтом.

Настройка внутреннего TURN-сервера

Внутренний TURN сервер настраивается при помощи следующих параметров в файле flashphoner.properties

ПараметрЗначение по умолчаниюОписание
turn_ip-IP адрес встроенного TURN сервера, должен совпадать с ip_local
turn_port3478TCP порт встроенного TURN сервера
turn_passwordcoM77EMrV7Cwhyanпароль на доступ к TURN серверу
turn_media_port_from36001Начало диапазона UDP портов, используемых TURN для пропуска медиатрафика при подключении к WCS
turn_media_port_to37000Окончание диапазона UDP портов
turn_media_ports_auditor_interval5000Интервал проверки занятых портов в миллисекундах
turn_media_ports_auditor_max_attempts3Количество проверок, освобожден ли порт
turn.server_channel_receive_buffer_size1048576Размер буфера на прием данных
turn.server_channel_send_buffer_size1048576Размер буфера на передачу данных

Соединение с использованием внутреннего TURN-сервера

Как и для внешнего TURN сервера, при создании сессии c помощью Flashphoner API необходимо передать параметр mediaOptions, в котором следует указать координаты встроенного TURN-сервера:

Code Block
languagejs
themeRDark
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:test.flashphoner.com:3478?transport=tcp', 'credential': 'coM77EMrV7Cwhyan', 'username': 'flashphoner' } ]}})

В случае, если UDP-порты не закрыты брандмауэром, браузер может установить WebRTC соединение по UDP. В том случае необходимо в mediaOptions указать параметр "iceTransportPolicy": "relay"

Code Block
languagejs
themeRDark
Flashphoner.createSession({urlServer: url, mediaOptions: {"iceServers": [ { 'url': 'turn:test.flashphoner.com:3478?transport=tcp', 'credential': 'coM77EMrV7Cwhyan', 'username': 'flashphoner' } ], "iceTransportPolicy": "relay"}})

для того, чтобы медиатрафик пошел через TURN сервер.

Краткое руководство по тестированию

1. Для теста используем:

  • WCS сервер с активированным встроенным TURN сервером
  • веб-приложение Firewall Traversal Streaming в браузере Chrome
  • iptables для закрытия UDP портов на сервере

2. Закройте UDP порты на внешнем сетевом интерфейсе WCS сервера

Code Block
languagebash
themeRDark
iptables -i ens192 -I INPUT -m udp -p udp --dport 0:65535 -j DROP

Здесь ens192 - внешний сетевой интерфейс WCS сервера.

Если данный шаг выполнен успешно, переходите к шагу 3a, если порты закрыть не удалось, то к шагу 3b

3. Откройте приложение Firewall Traversal Streaming, укажите в поле TURN server

Code Block
themeRDark
turn:test.flashphoner.com:3478?transport=tcp

Здесь

  • test.flashphoner.com - адрес WCS сервера
  • 3478 - порт встроенного TURN сервера

a) если UDP порты на WCS сервере закрыты, снимите переключатель Force relay

Image Added

b) если UDP порты на WCS сервере не закрыты, установите переключатель Force relay

Image Added

4. Нажмите Connect, введите имя потока test и нажмите Publish. Начнется публикация потока через встроенный TURN сервер.

Image Added

Известные проблемы

1) Браузеры Microsoft Edge и Mozilla Firefox не поддерживают работу через TURN сервер

Решение: использовать браузер Chrome или его производные на Windows