В сборке 5.2.660 была добавлена поддержка IPv6 для WebRTC. Это привело к изменению настроек и процедуры установки соединения.
Настройка
По умолчанию, поддержка IPv6 неактивна. Чтобы включить эту возможность, необходимо:
- в файле настроек flashphoner.properties указать внешний IPv6 адрес сервера и разрешить использование IPv6 кандидатов
ip_v6=2a03:b0c0:3:e0::42e:c002 ice_add_ipv6_candidate=true
- в файле настроек wcs-core.properies разрешить использование IPv6 стека
-Djava.net.preferIPv4Stack=false
Кроме того, следующие настройки IP адресов позволяют указать через запятую IPv4 и IPv6 адреса для привязки
- hls.address
- http.address
- https.address
- rtmfp.address
- rtmp.address
- rtsp.address
- rtsp_client_address
- ws.address
- wss.address
Процедура установки соединения
Установка соединения для приема/передачи медиа трафика по WebRTC выглядит следующим образом:
1. Сервер ожидает входящих запросов Binding request на IPv4 и IPv6 интерфейсах
2. При получении запроса с атрибутом USE-CANDIDATE кандидат помечается как номинируемый, при условии, что будет получен Bindind Responce от этого кандидата
3. На каждый Binding Request от браузера отправляется Binding Response.
4. Одновременно, сервер отправляет в сторону браузера Binding Request. При необходимости, запросы повторяются с интервалом, указанным в настройке (по умолчанию 1500 мс)
stun_freshness_period=1500
5. При получении Bindind Response от первого кандидата, запускается интервал ожидания других кандидатов, указанный в настройке (по умолчанию 1000 мс)
stun_wait_candidate_timeout=1000
6. По истечении этого интервала, приоритетному кандидату отправляется DTLS Client Hello
При соединении с браузером Safari, приоритет отдается IPv4 кандидатам, если только не возникает проблем в процедуре STUN-DTLS с таким кандидатом. Таким образом, в Safari, если клиент имеет два интерфейса IPv6 и IPv4, оба интерфейса работают и трафик между клиентом и сервером не заблокирован, будет использоваться IPv4. В остальных браузерах (выше приведены примеры трафика для Chrome) приоритет отдается IPv6 кандидатам.