Как надежно передать данные между двух компьютеров через NAT?
Есть задача: нужно передавать видеопоток по RTP используя gstreamer и передавать сырые данные по TCP от одного компьютера сидящего за NAT/firewall к другому компьютеру сидящему за NAT/firewall. Имеется внешний сервер с белым адресом. И хорошо бы без надобности не загружать этот сервер.
Вопрос: как решить эту проблему надежнее всего?
Будет хорошо, если это будет библиотека на python для сервера и клиентов.
Вам нужен протокол STUN - он использует внешний сервер только для установления соединения, а дальше обмен идет "точка-точка". Можете поискать его готовые реализации, либо разработать что-то самостоятельно по его подобию.
Есть gstreamer-rtsp-server, библиотека для gstreamer. В ней, если взять исходники, есть пример для rtsp/rtp proxy. На его основе можно сделать свой прокси, который будет жить на белом сервере. https://github.com/GStreamer/gst-rtsp-server/tree/...
А что из себя представляют эти сырые данные? Если мне нужно передать данные от клиента к клиенту, я это делаю через http по подписке. Udp гонять в интернете смысла большого не вижу.
Передача видео и сырых данных должна работать и из приложения, которое устанавливается у пользователя. Можно ли подключиться к VPN из приложения, не настраивая VPN на хосте пользователя?