LINUX.ORG.RU

как стримить UDP?

 , ,


1

1

привет!

есть некоторая программа, которую я запускаю на сервере, и которая, помимо прочего, принимает опциями IP:port на который она стримит видео.

эту программу я могу запускать на локальном компе, и указывая в качестве IP:port «127.0.0.1:9010» - я могу смотреть этот стрим используя VLC.

как сделать то же самое, чтоб я запускал программу на сервере но мог смотреть стрим запуская VLC локально и указать ему IP:port ?

спасибо.

★★★
Ответ на: комментарий от pon4ik

ну… код написан мной, и скорее всего это просто UDP.

датаграммы я в сокет пишу так:

QUdpSocket vsock;

..

QHostAddress dest_video_ip = ...;
quint16 dest_video_port = ...;

..

vsock.writeDatagram(body, dest_video_ip, dest_video_port);
niXman ★★★
() автор топика
Последнее исправление: niXman (всего исправлений: 1)

как сделать то же самое, чтоб я запускал программу на сервере но мог смотреть стрим запуская VLC локально и указать ему IP:port ?

указать 0.0.0.0:9010 при запуске софтины не пробовал?

anonymous
()
Ответ на: комментарий от anonymous

пробовал. плеер не видит никакого потока…

niXman ★★★
() автор топика

В vlc можно указать хост и порт, туда нужно написать ip сервера и порт, который слушает "некоторая программа" на сервере.

anonymous
()

Если ты хочешь, чтобы IP клиента не надо было задавать на сервере, то надо либо использовать мультикаст, либо как-то передавать IP клиента на сервер по сети, либо использовать полноценный протокол вроде RTSP

annulen ★★★★★
()
Ответ на: комментарий от niXman

Мультикаст очень похож на UDP, только у него особый диапазон IP-адресов, а для получения пакетов нужно сделать join. Для Qt см. примеры https://code.qt.io/cgit/qt/qtbase.git/tree/examples/network/multicastsender и https://code.qt.io/cgit/qt/qtbase.git/tree/examples/network/multicastreceiver

annulen ★★★★★
()
Ответ на: комментарий от annulen

IP в данном слцчае это не IP клиента или сервера, а IP мультикаст-группы, сервер в нее шлет пакеты как обычный UDP, клиенты (любое количество!) джойнятся и получают

annulen ★★★★★
()
Ответ на: комментарий от niXman

Если я не ошибаюсь, vlc это сам сделает, если увидит мультикастовый IP

annulen ★★★★★
()
Ответ на: комментарий от niXman

так какой IP я должен указать sender`у?

IP и порт группы (можно выбрать от балды, если в сети нет других вещателей)

annulen ★★★★★
()
Ответ на: комментарий от niXman

Еще обрати внимание на MulticastTtlOption в примере sender’а, по-умолчанию там TTL=1, если клиент и сервер не в одной подсети то понадобится больше

annulen ★★★★★
()
Ответ на: комментарий от annulen

Но вообще кошерный роутинг мультикаста между подсетями - это уже сфера серьезного телеком-бизнеса :)

annulen ★★★★★
()
Ответ на: комментарий от niXman

Если между машинами один роутер и они в разных сетях, то 2, если больше, то на каждый роутер по единице. Экспериментально подобрать может быть проще

annulen ★★★★★
()
Ответ на: комментарий от niXman

В принцпе можно и 255 установить, но если у тебя такая большая сеть, то мультикаст-пакеты могут начать блуждать по всей

annulen ★★★★★
()
Ответ на: комментарий от niXman

Если ты собрался пускать мультикаст через интернет, то даже не думай, через провайдера не пройдет (или по шее получишь), нужен более сложный протокол

annulen ★★★★★
()
Ответ на: комментарий от annulen

эмм…

задачу я описал в топике. кратко: мне нужно на локальном компе иметь возможность видеть видео поток, который транслирует моя программа запущенная на сервере.

это мне нужно для отладки той программы. я не собираюсь стримить фильмицы ;)

niXman ★★★
() автор топика
Последнее исправление: niXman (всего исправлений: 1)
Ответ на: комментарий от annulen

вроде все сделал правильно, но плеер все равно не видит поток…

может быть хостер режет? как проверить?

niXman ★★★
() автор топика
Ответ на: комментарий от annulen

нет, сервер в ДЦ.

UDP использую потому, что такая задача.

niXman ★★★
() автор топика
Ответ на: комментарий от niXman

Если нет возможности использовать более сложный протокол вроде WebRTC, то либо гонять между двумя серверами в одном ДЦ, либо как было оставлять

annulen ★★★★★
()
Ответ на: комментарий от annulen

ну… твой ответ не говорит о том, как я могу на локальном компе увидеть видео стрим)

либо как было оставлять

оно никак не было. я вот только пытаюсь это сделать)

niXman ★★★
() автор топика
Ответ на: комментарий от niXman

оно никак не было. я вот только пытаюсь это сделатm

Указать вместо в программе вместо 127.0.0.1 внешний IP своего компа, и надеяться что в сети будет мало потерь. WiFi лучше не использовать

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от annulen

да, пока сделал так, даже работает!

но тут меня посетила мысль, завернуть UDP с сервера в SSH тунель. это позмолит совсем ничего не терять, и мои тесты буду более корректными.

я недавно создавал тут тему об этом, но там никто ничего не предложил…

niXman ★★★
() автор топика
Ответ на: комментарий от niXman

Ты можешь его в udpxy завернуть, и ssh никакой не нужен.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)

закопай -юзай hls/dash ( под nginx есть соотв модуль)

Jopich1
()
Последнее исправление: Jopich1 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.