Поддержка IPv6 для WebRTC¶
В сборке 5.2.660 была добавлена поддержка IPv6 для WebRTC. Это привело к изменению настроек и процедуры установки соединения.
Настройка¶
По умолчанию, поддержка IPv6 неактивна. Чтобы включить эту возможность, необходимо:
-
в файле настроек flashphoner.properties указать внешний IPv6 адрес сервера и разрешить использование IPv6 кандидатов
-
в файле настроек wcs-core.properies разрешить использование IPv6 стека
Кроме того, следующие настройки IP адресов позволяют указать через запятую IPv4 и IPv6 адреса для привязки
hls.address
http.address
https.address
rtmfp.address
rtmp.address
rtsp.address
rtsp_client_address
ws.address
wss.address
Процедура установки соединения¶
Установка соединения для приема/передачи медиа трафика по WebRTC выглядит следующим образом:
-
Сервер ожидает входящих запросов
Binding request
на IPv4 и IPv6 интерфейсах. -
При получении запроса с атрибутом
USE-CANDIDATE
кандидат помечается как номинируемый, при условии, что будет полученBindind Responce
от этого кандидата
-
На каждый
Binding Request
от браузера отправляетсяBinding Response
-
Одновременно, сервер отправляет в сторону браузера
Binding Request
. При необходимости, запросы повторяются с интервалом, указанным в настройке (по умолчанию 1500 мс)
-
При получении
Bindind Response
от первого кандидата, запускается интервал ожидания других кандидатов, указанный в настройке (по умолчанию 1000 мс)
-
По истечении этого интервала, приоритетному кандидату отправляется DTLS
Client Hello
При соединении с браузером Safari, приоритет отдается IPv4 кандидатам, если только не возникает проблем в процедуре STUN-DTLS с таким кандидатом. Таким образом, в Safari, если клиент имеет два интерфейса IPv6 и IPv4, оба интерфейса работают и трафик между клиентом и сервером не заблокирован, будет использоваться IPv4. В остальных браузерах (выше приведены примеры трафика для Chrome) приоритет отдается IPv6 кандидатам.
Известные проблемы¶
1. В чистой IPv6 системе публикация и воспроизведение WebRTC в браузере не работает¶
Симптомы
Публикация и воспроизведение завершается с ошибкой Failed by ICE timeout
Решение
Если узел имеет только IPv6 адрес (и localhost), не работает обмен ICE кандидатами в браузерах, событие RTCPeerConnection.onicecandidate
не вызывается во всех браузерах.Используйте RTMP для публикации и RTSP, RTMP, HLS для проигрывания.