2012-01-20 5 views
11

Czy istnieje sposób na manipulowanie VLC za pomocą skryptu powłoki Linuxa bez skryptu czekającego na zakończenie VLC.Linux Shell: programowanie VLC

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

Ten kod utrzymuje VLC do momentu zakończenia pliku, a następnie ewidentnie jest za późno, aby wstrzymać plik.

+4

Czy próbowałeś uruchomić komendę w tle, np. 'Test cvlc.mp3 &'? – user219882

Odpowiedz

15

Trzeba użyć interfejs dbus OHP.

enter image description here

Teraz można korzystać z interfejsu mpris OHP. Jest to standard dla większości graczy, takich jak klementynka, banshee, songbird, spotify itp.

Załóżmy więc, że chcesz zatrzymać aktualnie odtwarzany utwór.

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

Aby odtworzyć utwór:

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

ja zazwyczaj używają qdbusviewer wiedzieć o dbus interfejsu dostępnego do mnie.

+5

Chociaż twoje rozwiązanie wskazało mi właściwy kierunek, obecny VLC akceptuje jedynie nieco inną implementację. Na przykład: 'dbus-send --session - typ = method_call --print-reply --dest = org.mpris.MediaPlayer2.vlc/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause' –

+0

Cool. Cieszę się, że moja odpowiedź była pomocna. –

+0

Dziękuję za wzmiankę o qdbusviewer. – exic

2

Dbus jest jednym ze sposobów, ale dbus nie istnieje na wszystkich systemach. Bardziej powszechna metoda polega na użyciu interfejsu rc:

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

Następnie można użyć netcata do poleceń rury do gniazda TCP. Na przykład:

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

EDIT:

Po przetestowaniu z kilkoma innymi interfejsami I odkryli interfejs oldrc akceptuje gniazd domeny UNIX sposób następujący będzie działać również z obecnie potrzeby bawić się z zapór lub martwić o tym, że ktoś inny w sieci miesza się z twoją instancją vlc.

vlc -I oldrc --rc-unix /var/run/vlc.sock -d 
echo "Now Playing!" 
sleep 200 
echo "pause" | netcat -U /var/run/vlc.sock