Linux Shell: программирование VLC

Есть ли способ манипулировать VLC оболочкой Linux script без script ожидания закрытия VLC.

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

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

Ответ 1

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

enter image description here

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

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

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

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

http://wiki.videolan.org/Uncommon_uses

Ответ 3

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