Не могу понять как работает пробивание NAT в RTSP (или как обходить правильно)? Приветствую! Пытаюсь сделать клиент-сервера RTSP протокола. Смотря логи обмена между камерой (камера выступает сервером) и клиентом (клиент сейчас VLC) вижу примерно такую картину: Есть два протокола, один транспортный (UDP), другой командный (TCP). Клиент делает по командному протоколу запрос на начало передачи данных (SETUP), где указывает свой внутренний IP и порт UDP (client_port 2200), на котором он ожидает эти данные. Сервер в ответ ему отдаёт какой-то client_port (например 5200) и server_port (например 3005) Я не могу понять, откуда сервер берёт client_port, ведь нужно, что бы клиент за NAT инициализировал передачу, но UDP в этот момент ещё не настроен. Так же что сервер выдаёт в server_port ? Мучаю гугл, но эти моменты не обсуждаются. P.S. если не за NAT, то у клиента в запросе и у сервера в ответе client_port совпадает.
Проблема, с которой вы столкнулись, связана с тем, что NAT (Network Address Translation) усложняет установление прямого соединения между клиентом и сервером в случае использования протокола RTSP.
Когда клиент делает запрос на начало передачи данных (SETUP) с указанием своего внутреннего IP и порта UDP, сервер возвращает указанный клиентом порт (client_port) и порт сервера (server_port), на котором клиент должен ожидать данные.
Однако, в случае, когда клиент находится за NAT, сервер не сможет напрямую узнать его внешний IP и порт, так как NAT переписывает адреса и порты в пакетах. Для обхода этой проблемы вам потребуется использовать технику STUN (Session Traversal Utilities for NAT), которая позволяет определить внешний IP и порт клиента через сервер STUN.
Таким образом, вы можете использовать STUN для определения внешнего IP и порта клиента и передать их серверу RTSP, чтобы установить правильное соединение через NAT.
Надеюсь, что это поможет вам разобраться с проблемой пробивания NAT в RTSP. Если у вас остались какие-либо вопросы, не стесняйтесь задавать.
Проблема, с которой вы столкнулись, связана с тем, что NAT (Network Address Translation) усложняет установление прямого соединения между клиентом и сервером в случае использования протокола RTSP.
Когда клиент делает запрос на начало передачи данных (SETUP) с указанием своего внутреннего IP и порта UDP, сервер возвращает указанный клиентом порт (client_port) и порт сервера (server_port), на котором клиент должен ожидать данные.
Однако, в случае, когда клиент находится за NAT, сервер не сможет напрямую узнать его внешний IP и порт, так как NAT переписывает адреса и порты в пакетах. Для обхода этой проблемы вам потребуется использовать технику STUN (Session Traversal Utilities for NAT), которая позволяет определить внешний IP и порт клиента через сервер STUN.
Таким образом, вы можете использовать STUN для определения внешнего IP и порта клиента и передать их серверу RTSP, чтобы установить правильное соединение через NAT.
Надеюсь, что это поможет вам разобраться с проблемой пробивания NAT в RTSP. Если у вас остались какие-либо вопросы, не стесняйтесь задавать.