@l29ah кто у тебя за натом сидит - клиент? обесни схему нормально блядь.
потомучто если за натом сидит клиент - достаточно сделать self-reflect через ICE и дальше все само.
@l29ah кароч обесняю. интересная часть RTSP состоит из двух методов - DESCRIBE и SETUP. дескрайб просто выдает клиенту sdp, чтобы он увидел чо за дорожки и форматы умеет стримить сервер. сетуп сообщает серверу *куда* стримить свое говно. на сервере никакого ната нахуй не нужно ясное дело - ему чо сказали, туда и стримит.
на клиенте все немного сложнее. если ты сидишь на белом ойпи - просто сообщаешь номер порта, который забиндил и адрес на интерфейсе, который смотрит в инторнет. если на сером - биндишься на порт и с него же отправляешь похуй куда один пакет, шобы в нате образовалась дырка. дальше тебе надо узнать, как выглядит адрес/порт этой дырки снаружи - для этого юзается тупой демон, который сидит в белом интернете и отвечает на udp запросы, тупо отправляя в отвем адрес с которого запрос пришел. протокол называется ice.
дальше ты уже знаешь адрес/порт этой дырке и сообщаешь его серверу. поскольку это udp, то нату абсолютно похуй и все что пришло на этот порт снаружи с *любого* адреса будет стримиться тебе.
@l29ah ты тупой еблан блядь. любой udp запрос наружу дырявит нат. собственно даже любой tcp запрос наружу делает то же, но в него потом нельзя ничего долить из другого места.
@muromec Да, не знает. Починить его в общем случае нельзя. Я - разработчик прошивки говнороутера, который должен сделать чтобы всегда было збс, и пока что сосу лапу, попутно разглядывая, как работает https://github.com/maru-sama/rtsp-linux
@l29ah собственно, если ты сидишь на роутере, то тебе даже ICE не нужен - ты и так вкурсе, какой у тебя белый айпи. сделай клиенту дырку в коннтраке через какой-нибудь хак и подменяй Transport-хедер в запросе SETUP.