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