Как воспроизвести один поток с помощью проигрывателя Multiply VLC?

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

$ vlc [path to file] --sout udp:// [destination path]

А также в пункте назначения я запускаю два проигрывателя VLC, которые воспроизводят один поток по команде:

$ vlc udp:// [source path]

Когда я запускаю первый проигрыватель, он воспроизводит видео, но когда я запускаю второй проигрыватель, первый проигрыватель останавливается, и только второй проигрыватель воспроизводит поток.

Как я могу воспроизвести один поток двумя игроками?


person BlueIceScream    schedule 12.10.2011    source источник


Ответы (2)


Я предполагаю, что путь назначения - это IP-адрес и порт плеера, то есть вы перенаправляете поток напрямую на эту конечную точку. Когда вы открываете поток на плеере, он привязывается к этому сокету и читает пакеты. После этого пакеты «ушли». Обычно игрок резервирует адрес, чтобы никакая другая программа не могла открыть там сокет, но похоже, что здесь этого не происходит, поэтому второй игрок захватывает тот же сокет и получает пакеты UDP.

Если оба игрока находятся на одном хосте, многоадресная рассылка также не будет работать. Если вам нужно поддерживать фиксированное количество игроков, вы можете позволить VLC дублировать вывод;

--sout '#duplicate {dst = rtp {mux = ts, dst = 192.168.1.10, port = 50002}, dst = rtp {mux = ts, dst = 192.168.1.40, port = 50004}}'

Если вам нужно поддерживать неизвестное количество клиентов динамически, вам нужно добавить потоковый сервер в микс. Какой из них действительно зависит от того, чего вы хотите достичь. Возможно, VLC также может работать напрямую как потоковый сервер, но я никогда не пробовал.

person koveraasen    schedule 18.10.2011
comment
--sout '#duplicate {dst = rtp {mux = ts, dst = 192.168.1.10, port = 50002}, dst = rtp {mux = ts, dst = 192.168.1.40, port = 50004}}' У этого метода есть один Проблема для меня: у меня много памяти, и я не могу использовать больше, чем у меня есть, но для дублирования пакета требуется некоторая память (потому что используется VLM, и ему нужна память). Могу ли я прочитать данные из порта в некоторый массив и отправить их нескольким плеерам vlc и очистить память массива с помощью обратного вызова из vlc? - person BlueIceScream; 13.11.2011

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

Реализация этого приложения должна быть тривиальной.

person Daniel Mošmondor    schedule 18.10.2011