Одноранговая (P2P) связь между VoIP-клиентами?

Я ищу решение для обмена информацией с использованием (UDP или TCP) между терминалами или узлами Android, разделенными ** NAT **, предположим, что A и B - это два клиента Android.


Я работаю над "удаленным приложением VoIP", в котором клиенты напрямую общаются друг с другом.


Для реализации STUN Server и NAT Traversal я использовал STUN server программное обеспечение с открытым исходным кодом, а именно STUNTMAN.

На стороне клиента, чтобы получить Public IP: PORT от STUNTMAN, я интегрировал stun-client с открытым исходным кодом как "JSTUN», который представляет собой клиент STUN на основе Java.

В клиенте-A результаты примера ** STUNTMAN Server ** выглядят так:

stunclient --mode full --localport 9999 stun.stunprotocol.org
Binding test: success
Local address: 192.168.1.8:9999
Mapped address: 1.2.3.4:9999
Behavior test: success
Nat behavior: Endpoint Independent Mapping
Filtering test: success
Nat filtering: Address and Port Dependent Filtering

Чтобы установить одноранговую связь между клиентами Android, я установил signaling server, который точно передает сопоставленные адреса между клиентами A и B.

Но когда я попытался запустить одноранговую связь с использованием сокетов UDP или TCP, такой связи между ними не было.


Я также пробовал это решение на StackOverflow как confusion-about-stun-server и < href="https://stackoverflow.com/questions/17502818/android-ios-peer-to-peer-architecture">архитектура android-iOS-peer-to-peer. Я не могу понять, где я делаю неправильно?

  • Есть ли возможность поддерживать связь P2P для VoIP?

  • Есть ли какое-либо приложение VoIP с функцией P2P? (Изначально Skype был основан на одноранговой архитектуре.)


Мне нужен программный пример, а не ответ, основанный на теории.


person Muhammad Usman    schedule 23.10.2019    source источник
comment
Это не похоже на то, что вы делаете шаг пробивки отверстий. см. мой ответ здесь   -  person selbie    schedule 24.10.2019
comment
@selbie, я думаю, вы говорите о том, чтобы пробить дыру, такую ​​как UDP или TCP Hole Punching, в которой каждый клиент подключается к неограниченному стороннему серверу, который временно хранит информацию о внешнем и внутреннем адресе и порте. для каждого клиента. Затем этот сервер ретранслирует или передает информацию о каждом клиенте другому?   -  person Muhammad Usman    schedule 24.10.2019
comment
Ваша сигнальная служба, которая может быть SIP, веб-сервером или чем-то еще, облегчает обмен IP-адресами и портами. Затем на этапе пробивки отверстий выполняется повторная попытка пропинговать другой адрес, пока он не ответит. Это важно, потому что первый пакет не сможет достичь целевого устройства, но позволяет пройти входящим пакетам.   -  person selbie    schedule 24.10.2019
comment
@selbie Как он заявил, сигнализация sip выполняется вручную, поэтому на данный момент нет необходимости в сигнализации, в чем вопрос, что даже после того, как сигнализация завершена. Когда сокет data gram пробуется на любом ip:port, он не подключается. Я работаю с ним, и это все об этом. Сигнализация не проблема, проблема с подключением есть. Даже на том же маршрутизаторе не удается подключиться к IP: порту, возвращенному stun-сервером.   -  person Saif Ali    schedule 24.10.2019
comment
Если вы находитесь за тем же маршрутизатором, вам нужно вернуться к использованию локальных адресов-кандидатов вместо внешних адресов-кандидатов, предоставленных STUN. Потому что многие (возможно, большинство) маршрутизаторов не поддерживают привязку (внутренний узел, обращающийся к своему внешнему IP-адресу). Методология ICE решает все эти вопросы.   -  person selbie    schedule 24.10.2019
comment
@selbie Предположим, я хочу установить связь один на один между двумя клиентами A и B. Оба подключены к разным роутерам. Я получил три типа адресов-кандидатов ICE для A и B, которые являются адресами-кандидатами Host, Relay и Server Reflex. Все, что мне нужно, чтобы интегрировать ICE Server для использования TURN и STUN?   -  person Muhammad Usman    schedule 24.10.2019
comment
Нет такой вещи, как сервер ICE. Есть серверы STUN, серверы TURN и ваша сигнальная служба. Ваш сигнальный сервис, безусловно, можно использовать для обмена адресами и для координации начала/остановки пробивки отверстий. Но вам понадобится клиентский код, чтобы использовать методологию ICE для повторных попыток установления соединения.   -  person selbie    schedule 25.10.2019
comment
@selbie Спасибо за ваше драгоценное время, которое вы потратили, чтобы ответить на нашу тему. Мы внедрили сигнализацию и STUN-сервер. Пробивка отверстий UDP завершена, данные также передаются между клиентами Full Cone. Теперь нужна помощь в управлении сессиями.   -  person Saif Ali    schedule 26.10.2019