2015-02-24 5 views
1

У меня есть вопрос, который очень похож на this question, но предоставленное решение не работает для меня. И на самом деле я хочу сделать что-то немного другое, так что, возможно, есть лучший способ.Обработка пакетов UDP и пересылка их в одно и то же время

Я надеюсь на отправку одноадресных пакетов UDP (видеопотока) на сервер. Сервер пересылает эти пакеты на другой компьютер. При желании, кто-то, войдя на сервер, сможет смотреть видеопоток, используя что-то вроде mplayer. Я уверен, что смогу транслировать видео как на сервер, так и на конечный пункт назначения из источника видео, но я действительно хочу, чтобы сервер контролировал это.

Первая попытка: Скачан nmap, чтобы получить инструмент ncat. Думал, что могу использовать это для загрузки и передачи байтов в mplayer и пересылки с другим процессом ncat. Я могу подключиться к mplayer, и он отлично работает, я просто не могу пересылать в одно и то же время. Если бы я использовал Linux, я бы мог использовать замену tee и process, но я ищу решение для Windows.

Вторая попытка Я нашел решение, которое могло бы подразумевать использование нескольких программ в нескольких программах в PowerShell. Но я обнаружил, что бинарный трубопровод не сработает.

Третий попыток Я попытался запрограммировать тройной исполняемый файл, который будет использовать две программы. Это было примерно так же близко, как и я, но потоки видео, казалось, немного испорчены. Я думаю, что это скорее проблема производительности, чем что-либо.

Четвертая попытка Теперь я нахожусь в точке, где я обнаружил общество, которое привело меня к вопросу, к которому я привязался. Кажется странным, но я решил, что решение для моего сервера будет пересылать пакеты в адрес назначения И пересылает пакеты другому порту на сервере, который будет использоваться с netcat или socat для подключения к mplayer. Я бы предпочел не использовать другой порт на сервере, но если это то, что я должен сделать, тогда все в порядке. Но, как я уже сказал, решение другого вопроса, похоже, не работает. Mplayer начал буферизировать, а затем остановился очень скоро.

Отклонить каждый из них в отдельном окне cmd в этом порядке. Заметьте, что я еще не пытался перенаправить на конечный компьютер, просто попытавшись заставить mplayer работать на сервере.

Сокат UDP4-СЛУШАТЬ: 5000 UDP-Datagram: 224.10.10.10: 5001

Сокат UDP4-RECVFROM: 5001, IP-надстройку членство = 224.10.10.10: 0.0.0.0, reuseaddr, вилка UDP -DATAGRAM: 192.168.16.33: 5002

ncat -l -u -p 5002 | mplayer -vo direct3d -cache 1024 -

Кажется, я получаю около 924 байт, полученных в соответствии с выходом MPlayer.

Я свеж от идей, хотя продолжу изучение о сотате. Я предполагаю, что я неправильно управляю софтом, но я не уверен, где проблема. Если кто-то может указать на мою ошибку или предложить альтернативное решение, я бы очень признателен. Благодарю.

Edit:

Я сделал еще несколько испытаний, и если я изменить второй SOCAT сделать это:

Сокат UDP4-RECVFROM: 5001, IP-надстройку членство = 224.10.10.10 : 0.0.0.0, reuseaddr, fork - | mplayer -vo direct3d -cache 1024 -

Я нахожу, что он будет воспроизводить поток из адреса многоадресной передачи. Но, по-видимому, перенаправление на одноадресный адрес на порту 5002 - это то, что не работает.

ответ

0

Хорошо, я не уверен, почему это так, но процесс netcat, который отлично работал, чтобы получать UDP-пакеты от отправителя и канала до MPlayer, здесь не работает. Я не уверен, в чем проблема.

Таким образом, вместо:

NCAT -l -u -p 5002 | MPlayer -vo direct3d -cache 1024 -

Я должен был использовать:

Сокат UDP4-RECVFROM: 5002, вилка - | mplayer -vo direct3d -cache 1024 -

Хотя у меня все еще есть одна небольшая проблема. Если закрыть MPlayer, я получаю тонну сообщений, таких как:

2015/02/24 11:14:04 Сокат [5888] Е записи (1, 0x800432e8, 986): Broken трубы

Также, если я ударил Ctrl-C из командной строки, вам понадобится несколько попыток, а затем, когда MPlayer остановится, моя клавиатура больше не работает, и мне нужно запустить новое cmd-окно.