2012-01-20 18 views
11

C'è un modo per manipolare VLC con uno script di shell Linux senza lo script in attesa che VLC si chiuda.Linux Shell: programmazione VLC

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

Questo codice continua a eseguire VLC fino al completamento del file e quindi evidentemente è troppo tardi per mettere in pausa il file.

+4

Hai provato a eseguire il comando in background come 'cvlc test.mp3 &'? – user219882

risposta

15

è necessario utilizzare l'interfaccia dbus di VLC.

enter image description here

Ora, è possibile utilizzare l'interfaccia mpris di VLC. È uno standard per la maggior parte dei giocatori come clementine, banshee, songbird, spotify, ecc.

Quindi, supponiamo di voler mettere in pausa la canzone attualmente in riproduzione.

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

Per riprodurre un brano:

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

Io generalmente uso qdbusviewer sapere sul dbus-interfaccia disponibile per me.

+5

Sebbene la soluzione mi abbia indirizzato nella giusta direzione, VLC corrente accetta solo un'implementazione leggermente diversa. Ad esempio: 'dbus-send --session --type = method_call --print-reply --dest = org.mpris.MediaPlayer2.vlc/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause' –

+0

Fantastico. Sono contento che la mia risposta sia stata d'aiuto. –

+0

Grazie per aver menzionato qdbusviewer. – exic

2

Dbus è un modo, ma dbus non esiste su tutti i sistemi. Il metodo più comune sarebbe usare l'interfaccia rc:

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

Quindi si può usare netcat ai comandi tubo nel raccordo tcp. Per esempio:

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

EDIT:

Dopo aver testato con alcune altre interfacce ho scoperto l'interfaccia oldrc accetta socket di dominio UNIX così la seguente funzionerà anche con le necessità di giocare con i firewall o preoccuparsi su tutti gli altri sulla rete che si occupano della tua istanza vlc.

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