iceConnectionState: «проверка» Как исправить - PullRequest
0 голосов
/ 15 октября 2019

Я использую nodejs для приложения видеовызова, где, если пользователь A и пользователь B находятся в разных сетях, то: - iceConnectionState: «проверка» iceGatheringState: «сбор»

и потоковая передача не приходит от удаленного пользователя, а егоработает, когда оба находятся в одной сети / wifi

iceConnectionState: "проверка" iceGatheringState: "сбор"

iceConnectionState: "завершено"

1 Ответ

0 голосов
/ 17 октября 2019

Вы установили ледовые серверы, особенно сервер поворотов (или, по крайней мере, сервер оглушения)? Вы должны передать объект конфигурации в RTCPeerConnection-Constructor , который содержит поле iceServers: [{urls: 'stun:some.stun.server.address},...] Поскольку мне кажется, что процесс сбора льда проверяет сгенерированные адреса кандидатов:

  1. Он проверяет локальный адрес (например, 127.0.0.1), но, поскольку он не работает на том же компьютере, происходит сбой.
  2. Он проверяет IP-адрес ОС (например, 192.168.178.13), и этоработают, если 2 компьютера находятся в одной сети, но в разных сетях, эти локальные IP-адреса не помогают ...
  3. Он отправляет запрос STUN, спрашивая внешний сервер, с какого IP-адреса поступил этот запрос. Адрес другой, так как NAT делает свою работу. Затем он попытается соединиться с этим рефлексивным адресом. Для многих NAT это все равно не будет работать, поскольку входящие запросы без предшествующего исходящего соединения с IP будут запрещены
  4. Он отправляет запрос TURN и маршрутизирует весь разговор через сервер ретрансляции. Это должно работать почти в любом случае

Если вы не установили серверы STUN и TURN в своей конфигурации, шаг 3 и for не будут испробованы, поскольку не будет никакого рефлексивного адреса от сервера stunи не включай сервер ретрансляции адреса. Поэтому сбор льда может закончиться на шаге 2 (и будет завершен), но соединение не будет, так как 1. и 2. произойдет сбой в разных сетях

...