Перенаправление широковещания на многоадресную рассылку с помощью ffmpeg - PullRequest
0 голосов
/ 14 декабря 2018

Кто-нибудь имеет опыт с этим или кто-нибудь знает, можно ли это сделать?Я знаю, что могу транслировать сохраненный видеофайл на IP-адрес UDP, и я знаю, что могу взять видеопоток и сохранить его на своем компьютере с Linux, но как я могу сделать оба одновременно?

IЯ мог бы написать сценарий для сохранения видео с входящей трансляции, а затем многоадресной рассылки, что бы мне ни понадобился UDP IP, но я не могу допустить задержки между лентами, максимум пару секунд.Есть ли способ, которым я могу сделать это одновременно?

1 Ответ

0 голосов
/ 26 декабря 2018

Вы можете написать простую программу с циклом, который начинает ждать UDP-пакеты и отправляет их содержимое в место назначения многоадресной рассылки (или использовать такой инструмент, как socat ).

Обратите внимание, чтоTTL имеет разное значение в одноадресных и многоадресных пакетах, поэтому вам придется установить TTL в соответствии с правилами порога многоадресной рассылки:

  • 0: ограничено одним и тем же хостом.Не выводится никаким интерфейсом.
  • 1: ограничено одной подсетью.Не будет переадресован маршрутизатором.
  • <32: ограничен одним сайтом, организацией или отделом. </li>
  • <64: ограничен одним и тем же регионом. </li>
  • <128: ограничено тем же континентом. </li>
  • <= 255: неограниченная область действия.Глобальный. </li>

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

Например, в Java вы должны использовать экземпляр java.net.MulticastSocket вместо экземпляра java.net.DatagramSocket, поскольку только MulticastSocket позволяет вам устанавливать TTL с помощью public void setTimeToLive(int ttl).Такой метод не существует с DatagramSocket.

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

Мы предполагаем, что вы слушаете порт1234 и хотите отправить поток данных получателю многоадресной рассылки 224.0.2.3 по тому же порту:

% socat UDP4-RECV:1234 UDP-SENDTO:224.0.2.3:1234,ip-multicast-ttl=128
...