Linux Shell: программирование VLC - PullRequest
11 голосов
/ 20 января 2012

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

cvlc test.mp3
echo "Now playing!"
sleep 200
cvlc://pause:60

Этот код продолжает запускать VLC до тех пор, пока файл не будет завершен, и, очевидно, он долженпоздно, чтобы приостановить файл.

Ответы [ 3 ]

15 голосов
/ 28 января 2012

Вам необходимо использовать интерфейс dbus VLC.

enter image description here

Теперь вы можете использовать mpris интерфейс VLC. Это стандарт для большинства игроков, таких как клементина, банши, певчая птица, спойти и т. Д.

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

dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause

Чтобы воспроизвести песню:

dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play

Обычно я использую qdbusviewer, чтобы узнать о доступном мне интерфейсе dbus.

2 голосов
/ 02 октября 2015

Dbus является односторонним, но dbus существует не во всех системах. Более распространенный метод - использовать интерфейс rc:

cvlc -I rc --rc-host localhost:11337 -d

Затем можно использовать netcat для передачи команд в сокет tcp. Например:

vlc -I rc --rc-host localhost:11337 test.mp3 -d &
echo "Now playing!"
sleep 200
echo pause | netcat localhost 11337

EDIT:

После тестирования с несколькими другими интерфейсами я обнаружил, что интерфейс oldrc принимает доменные сокеты UNIX, таким образом, следующее будет работать также без необходимости играть с брандмауэрами или беспокоиться о том, что кто-то еще в сети возится с вашим vlc экземпляр.

vlc -I oldrc --rc-unix /var/run/vlc.sock -d
echo "Now Playing!"
sleep 200
echo "pause" | netcat -U /var/run/vlc.sock
2 голосов
/ 28 января 2012

Похоже, вы можете перенаправить со стандартного ввода или именованного канала. Для более сложных вещей вы можете использовать libvlc.

http://wiki.videolan.org/Uncommon_uses

...