Локальное соединение WebRTC застряло на "проверке" в автономном режиме - PullRequest
0 голосов
/ 20 мая 2018

Я пытался создать среду разработки для германцев, чтобы все работало локально, например, на одном компьютере в поезде без интернета.Я создал эту минимальную страницу «Hello World», которая пытается создать соединение WebRTC между двумя вещами на одной странице («создатель» и «объединитель»).Таким образом, сервер сигнализации отключается, и шаги могут быть показаны в одном синхронном журнале.Однако я не получаю обратные вызовы, ожидаемые, когда мой компьютер отключен.

<code><!doctype html>
<html>
<head>
  <meta charset="utf-8">

  <title>Offline WebRTC</title>
  <style>
  html, body {padding:0;margin:0;height:100%}
  body {box-sizing:border-box;padding:50px 0 0px;color:#ccc;background-color:#303030;}
  h1   {position:fixed;margin:0;line-height:50px;padding:0 15px;top:0;left:0;font-size:18px;width:100%;box-sizing:border-box}
  </style>
</head>

<body>
<h1>Why does this WebRTC work online but not offline?</h1>
<pre id="log">
dataChannel.onmessage = (e) => {log («Полученное сообщение:» + e.data);} log ('Создание предложения ...');pc.createOffer (). then ((e) => {log ('настройка локального описания'); pc.setLocalDescription (e);});};createOffer ();}) ();

Для воспроизведения:

  1. При подключении к Интернету откройте этот файл .html локально (должен иметь URL file://...)сервер не требуется)
  2. Обратите внимание, что он работает правильно (должен получить PONG: Hello World!)
  3. Отключить компьютер от Интернета
  4. Обновить страницу
  5. Обратите внимание, что это не происходит после iceConnectionState changed to "checking"

Дополнительная информация:

  • Отключение моего компьютера от Интернета оказывает на это другое влияние по сравнению сфлажок "offline" на вкладке сети Chrome Devtools.Установка этого флажка не влияет на возможность установления соединения.

Поэтому мой главный вопрос: как я могу открыть локальное соединение WebRTC, когда мой компьютер отключен?

Дополнительновопросы: я предполагаю, что браузер пытается общаться с кем-то в фоновом режиме, как часть шага проверки или подключения.С кем он пытается поговорить?Почему эти запросы не отображаются на вкладке сети devtools?

1 Ответ

0 голосов
/ 20 мая 2018

WebRTC собирает кандидатов от ваших локальных сетевых интерфейсов как часть процесса ICE.Если посмотреть на SDP (либо в отладчике, либо на chrome: // webrtc-interals), то в автономном режиме нет интерфейса (кроме игнорируемого интерфейса обратной связи), из которого можно собрать кандидатов, в onicecandidate нет ни одного кандидата, и вы простоотправить предложение без кандидатов.

Переход в «проверку» состояния соединения ICE выглядит как ошибка, https://w3c.github.io/webrtc-pc/#rtcicetransportstate требует удаленного кандидата для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...