Запуск приложения с WebRTC в локальной сети без доступа в интернет

Я хочу использовать WebRTC в проекте, где мне нужно транслировать видео в реальном времени с одного компьютера, робота с точкой доступа Wi-Fi и USB-камерой по локальной сети на другой компьютер, контроллер для робота. Оба компьютера в данном случае одноплатные и видеопоток односторонний. Я также хотел бы, чтобы два компьютера передавали данные друг другу в обоих направлениях. Я нашел WebRTC в своем исследовании, и, похоже, у него есть обе эти функции, которые я ищу.

Судя по первоначальному тестированию с демонстрационными программами NodeJS, WebRTC кажется почти именно тем, что я ищу. Одна большая проблема, которую я пытался преодолеть, заключается в том, что по умолчанию требуется, чтобы между двумя клиентами использовался сервер онлайн-сигнализации. Я исследовал и обнаружил, что можно создать сигнальный сервер в локальной сети с третьим компьютером, но такая установка не подходит для моего проекта.

Я просмотрел другие решения и наткнулся на OpenVidu, который реализует WebRTC, но позволяет встроить сигнальный сервер в один из клиентские компьютеры (по крайней мере, это то, что я прочитал в другом сообщении о переполнении стека). Мне еще предстоит протестировать этот инструмент, чтобы увидеть, решит ли он мою проблему, но в настоящее время я заблокирован изображением докера, используемым проектом, не поддерживающим процессоры ARM, которые используются моими одноплатными компьютерами, и, следовательно, требуют специальной установки.

Прежде чем перейти к этому процессу, который может работать или не работать, я хотел спросить, есть ли другое более простое решение для запуска WebRTC без доступа в Интернет и без необходимости использования третьего компьютера в качестве сервера сигналов, или есть ли какие-либо предложения по инструментам, отличным от WebRTC, которые было бы лучше для моего приложения. Я очень новичок в этой технологии и определенно могу пропустить простое или существующее решение. Любая помощь по этому вопросу будет принята с благодарностью.

Для тех, кому интересно, используются одноплатные компьютеры NVidia Jetson Nanos.


person Andrew Euredjian    schedule 27.05.2020    source источник
comment
Вам не нужен сигнальный сервер, хотя он упрощает работу. Вы можете запустить сервер на любом из двух устройств — третий компьютер не нужен. В Интернете есть множество примеров использования NodeJS для создания сервера сигнализации. Затем вы можете использовать соединение webrtc для отправки видео и данных.   -  person Johnny Mopp    schedule 27.05.2020
comment
Не могли бы вы дать ссылку на один из этих примеров?   -  person Andrew Euredjian    schedule 27.05.2020


Ответы (2)


Решение найдено. Используя пример Google Codelabs, исправление заключалось в простом удалении стандартного ледяной сервер в конфиге. По сути, это означало изменение

const config = {
  iceServers: [
    {urls: ["stun:stun.l.google.com:19302"]}
  ]
}

to

const config = {
  iceServers: []
}
person Andrew Euredjian    schedule 29.05.2020

вы можете запустить локальный сервер TurnServer в вашей локальной сети. Это очень легко и просто. проверьте это введите здесь описание ссылки

после установки просто запустите

turnserver -p 19302

Теперь ваш файл конфигурации:

const config = {
  iceServers: [
    {urls: ["stun:<<YOUR HOST IP>>:19302"]}
  ]
}
person M.Hefny    schedule 01.12.2020
comment
Спасибо за заметку! Я не знал, что есть встроенный серверный инструмент. Через пару месяцев после этого поста мне понадобился локальный сервер Turn, и в итоге я выбрал coturn, который работал. прекрасно. - person Andrew Euredjian; 01.12.2020
comment
Вам не нужен сервер TURN в локальной сети. - person jch; 01.12.2020
comment
Я использую версию 72 .. проблема началась с Chrome и mDNS. Мне нужно отключить mDNS в Google Chrome, что больше невозможно, поэтому я попробовал TurnServer, и он отлично сработал. - person M.Hefny; 01.12.2020
comment
@jch На данный момент существует проблема с пакетом aiortc для Python, из-за которой соединение RTC не работает без указания каких-либо серверов TURN/STUN. Я столкнулся с этим несколько месяцев назад, так что, возможно, он уже исправлен. Насколько я знаю, это проблема только с библиотекой Python WebRTC, поэтому вы правы для других языков. - person Andrew Euredjian; 02.12.2020
comment
Я использую webrtc на С++, и мне пришлось отключить функцию Chrome, как я уже упоминал. но после обновления Chrome отключение этой функции невозможно, поэтому я использовал TurnServer. возможно, есть исправление, или мне следует обновить webrtc до более новой версии. Я не уверена. Я лишь упомянул свой опыт :) - person M.Hefny; 02.12.2020