2012-01-20 24 views
11

¿Existe alguna manera de manipular VLC con un script de shell Linux sin el script esperando a que VLC se cierre?Linux Shell: programación VLC

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

Este código VLC sigue funcionando hasta que se complete el archivo, y luego, evidentemente, es demasiado tarde para hacer una pausa en el archivo.

+4

¿Ha intentado ejecutar el comando en segundo plano como 'cvlc test.mp3 &'? – user219882

Respuesta

15

Es necesario utilizar la interfaz dbus de VLC.

enter image description here

Ahora, puede utilizar la interfaz de VLC mpris. Es un estándar para la mayoría de los jugadores como clementine, banshee, songbird, spotify, etc.

Supongamos que quiere poner en pausa la canción que se está reproduciendo actualmente.

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

Para reproducir una canción:

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

Yo generalmente uso qdbusviewer saber sobre el dbus-interfaz disponible para mí.

+5

Aunque su solución me indicó la dirección correcta, el VLC actual solo acepta una implementación ligeramente diferente. Por ejemplo: 'dbus-send --session --type = method_call --print-reply --dest = org.mpris.MediaPlayer2.vlc/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause' –

+0

Cool. Me alegro de que mi respuesta fue de ayuda. –

+0

Gracias por mencionar qdbusviewer. – exic

2

Dbus es una forma pero dbus no existe en todos los sistemas. El método más común sería el uso de la interfaz de rc:

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

Entonces uno puede usar netcat a los comandos de tubería en el zócalo TCP. Por ejemplo:

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

EDIT:

Después de probar con algunas otras interfaces que he descubierto la interfaz oldrc acepta conectores de dominio UNIX así el siguiente funcionará tan bien sin necesidad de siquiera jugar con cortafuegos o preocuparse sobre cualquier persona en la red jugando con su instancia vlc.

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