Перейти к содержанию

Поддержка IPv6 для WebRTC

В сборке 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 кандидатам.

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

1. В чистой IPv6 системе публикация и воспроизведение WebRTC в браузере не работает

Симптомы

Публикация и воспроизведение завершается с ошибкой Failed by ICE timeout

Решение

Если узел имеет только IPv6 адрес (и localhost), не работает обмен ICE кандидатами в браузерах, событие RTCPeerConnection.onicecandidate не вызывается во всех браузерах.Используйте RTMP для публикации и RTSP, RTMP, HLS для проигрывания.