Я пытаюсь создать веб-приложение / веб-сайт, который использует WebRT C, чтобы пользователи могли общаться друг с другом.
Мне удалось заставить его работать, когда я инициализирую новый RTCPeerConnection без каких-либо параметров. Я предполагаю, что браузер автоматически выбирает некоторые серверы STUN для использования.
Но это работает только в моей локальной сети, а не когда я размещаю сайт в общедоступном c домене (например, example.com).
Это заставило меня попробовать свой собственный сервер STUN ...
Итак, теперь я инициализирую RTCPeerConnection с IP-адресом моего сервера и получаю запросы STUN.
Я использую RF C 5389 для построения сервера STUN.
Насколько я понимаю, я должен ответить на запрос STUN с IP-адресом и портом, по которому я получил запрос.
Так что это мой первый вопрос , должен ли я отвечать на различные запросы STUN с IP-адресом другого клиента или я делаю это правильно?
При создании Сервер STUN Я использовал WireShark для просмотра генерируемых ответов, и первоначально он отображал недопустимый тип сообщения для моих ответов UDP, но я получил его для отображения полей ответов STUN, поэтому я предполагаю, что мои ответы верны.
Я также проверил свой сервер STUN на этом веб-сайте , и он добавляет 2 элемента, один для TCP и один для UDP, но затем через некоторое время отображается код ошибки 701 (STUN выделение времени ожидания запроса истекло.).
Так что я не уверен на 100%, отвечает ли мой сервер STUN правильной информацией.
Я также использовал каскадера для тестирования моего сервера STUN, и он также показывает успех, но я не уверен, что он очень точный.
Публичный c URL оглушения Google для stun: stun.l.google.com: 19302 также не работает, поэтому я подумал, что, возможно, спецификация STUN изменилась.
Мой второй вопрос: Имеет ли STUN spe c изменилось или я неправильно понимаю?
Тогда у меня третий вопрос:
Я также могу общаться между двумя разными клиентами, используя веб-сокеты, используя Предварительный общий код или идентификатор.
Мне было интересно, могу ли я инициировать соединение WebRT C, используя это соединение через веб-сокет, вместо того, чтобы использовать или полагаться на STUN. Я уже делюсь предложением и ответом по соединению WebSocket, но теперь они застряли в ожидании кандидатов на ICE.
И четвертый вопрос:
Есть ли способ отладка, почему мои ответы STUN не работают (IE создает кандидатов ICE) при настройке RTCPeerConnection?
Мой сервер STUN построен на. Net с использованием класса UdpClient, если это важно.
Заранее спасибо.
Обновление: 20 марта 2020 года
Мне удалось заставить работать мое приложение при использовании сервера Google STUN, как уже упоминалось.
Это Похоже, я не добавлял кандидатов на льду на стороне клиента.
Но все равно не смог заставить все это работать при использовании моего собственного сервера STUN.
Я также проверил, размещая свой сервер STUN на хосте. c домен, таким образом, запросы должны go через inte rnet, но он все еще не работает.
Мой хост получает ледовых кандидатов, но не получает null кандидат.
Обновление: 21 марта 2020 г.
Итак, я выяснил, почему он начал работать.
Значение iceTransportPolicy в RTCPeerConnection было установлено на реле . Удаление этого полностью сделало вещи работающими, даже на моем доменном сайте publi c.
Но теперь запросы к моему собственному серверу STUN игнорируются.
Когда iceTransportPolicy имеет значение «relay», URL-адрес оглушения Google также больше не работает, не только мой STUN-сервер.
И отслеживание трафика Wireshark c, я вижу запросы STUN в обратной связи traffi c перехват, который показывает 2 интересных вещи:
- Запрос STUN не передается в inte rnet.
- Я также заметил атрибут username в запросе STUN.
Но в соответствии со спецификацией STUN c имена пользователей с STUN невозможны, поэтому как браузер достиг этого?
Обновление 2: 21 марта 2020
Я обнаружил, что мой ответ на STUN был неправильным, он возвратил ответ с указанием привязки.
I ' мы исправили его, чтобы он возвращал ответ об успешном связывании.
Но он все еще не работает.
Мне удалось просмотреть журналы chrome, и, похоже, все мои кандидаты в ICE игнорируются, и ниже приведены причины, которые я вижу в журналах:
- Отмена кандидата, потому что он не соответствует фильтру.
- AllocationSequence: порты ретрансляции отключены, пропуск.
Так что я думаю, что это немного сужает его.
Может быть, мне нужно включить определенные функции в Chrome?
Или что еще я мог упустить?