Daniels Blog
19Jan/110

Mehrere Videos synchron ferngesteuert übers Netzwerk starten mit VLC

Eine befreundete Designstudentin wollte für die Präsentation ihrer Diplomarbeit eine Videoinstallation aufbauen. Auf im Raum angeordneten Fernsehern sollten parallel 3 von ihr erstellte Filme laufen und gleichzeitig gestartet werden. Die 3 Filme sind so geschnitten, dass sie gemeinsam ein Gesamtkunstwerk (und hoffentlich eine gute Abschlussnote) ergeben. Ein Veranstaltungsunternehmen verlangte für den Aufbau einige 1000 Euro. Das überstieg das Budget meiner Bekannten leider um einige 1000 Euro, deshalb haben wir den Aufbau selbst mit Open Source Software zusammengefrickelt. 3 (Windows)-Notebooks wurden per HDMI an die jeweiligen Fernseher angeschlossen und über einen Switch vernetzt. Ein viertes (Linux)-Notebook diente als zentraler Steuerrechner. Der VLC Media-Player bietet neben einer hervorragenden Unterstützung fast aller Videoformate auch viele weitere nützliche Funktionen. In diesem Aufbau kam das Remote Control Interface des VLC zum Einsatz, das es ermöglicht, den Player übers Netzwerk oder das Internet komplett fernzusteuern.

Die Windows Rechner bekamen die IP's 192.168.0.1 bis 192.168.0.3. Der Linux-Steuer-Rechner die IP 192.168.0.100.
Das Fernsteuerungsskript ist angelehnt an das Tutorial von Markus Berg (vielen Dank).

#/bin/bash

ip[0]="192.168.0.1"
ip[1]="192.168.0.2"
ip[2]="192.168.0.3"

port=20000

function send_cmd {

for address in ${ip[@]} 
	do 
                echo "$1" | nc $address $port &
	done

}


while ( [ 1 ] )
do
clear
echo "Video Command"
echo
echo " s  | START"
echo " p  | PAUSE/PLAY"
echo " z  | ZURUECKSPULEN"
echo " zp | ZURUECKSPULEN + PAUSE"
echo " f  | VOLLBILD AN/AUS"
echo " b  | Beenden"
echo
echo

echo
echo -n "Kommando? "
read command

case "$command" in
     s)
	   send_cmd play
           ;;
     p)
	   send_cmd pause
           ;;
     z)
	   send_cmd prev
           ;;
     zp)
	   send_cmd prev
	   perl -e 'select(undef,undef,undef,.3)'
	   send_cmd pause
           ;;
     f)
	   send_cmd fullscreen 
           ;;
     b)
	   exit
	   ;;
esac
done;

Dieses Skript auf dem Steuerungsrechner ergibt dieses spartanische menü:

Video Command

 s  | START
 p  | PAUSE/PLAY
 z  | ZURUECKSPULEN
 zp | ZURUECKSPULEN + PAUSE
 f  | VOLLBILD AN/AUS
 b  | Beenden



Kommando? 

Auf den Windowsrechner musste nun nur noch aus der Windows-Konsole heraus VLC im Remote Control Modus gestartet werden:

vlc --extraintf oldrc --rc-host 192.168.0.1:20000

Nun wurde noch das Video in die jeweilige VLC-Playlist eingefügt. Die Fernsteuerung war fertig.

Leider gab es (wie fast immer) einige Fallstricke. Bei unseren Tests zickte zunächst die Windows-Firewall herum. Für die Präsentation musste diese deaktiviert werden. Generell war Windows keine besonders gute Wahl für die Präsentation, da Update-Meldungen, Avira-Popups und andere Nervereien natürlich im Video ziemlich peinlich wirken. Die Windows-Rechner mussten ziemlich kastriert werden. Firewalls, Virenscanner und Automatische Updates wurden deaktiviert. Zahlreiche Programme, die es sich im Tray gemütlich gemacht hatten, wurden deinstalliert. Im Endeffekt würde ich beim nächsten Mal das Abspielen auch mit Linux Clients realisieren, die aber wegen des Zeitdrucks nicht verfügbar waren.