Information

Webcam mit mjpg_streamer

Installation

Die Installation des Servers, der den Streaming-Input liefert, geht unter Ubuntu recht einfach zur Hand. Leider sind die dafür erforderlichen Linux-Pakete derzeit nicht in der Standardpaketen von Ubuntu (Version 11.x) enthalten. Über Sourceforge werden jedoch Debian-Pakete zur Verfügung gestellt, die eine Installation recht einfach ermöglich. Wer es noch aufwendiger mag, kann die Pakete auch selbst Compilieren. Dazu ist vielleicht der Artikel im Ubuntu-Wiki ganz hilfreich.

Wer mit der manuellen Installation von Debian-Paketen nicht vertraut ist, dem wird ebenfalls im Ubuntu-Wiki geholfen.

Webcam

Problematisch gestaltet sich unter Linux leider immer wieder der Hardware-Support für diverses Zubehör. Dazu zählen auch die Webcams verschiedener Hersteller, für die oft keine Linux-Treiber vom Hersteller selbst angeboten werden. Wer eine Webcam unter Linux betreiben will, ist daher gut beraten VOR dem Kauf einen Blick in die Liste der NICHT untunterstützten Geräte zu werfen, bevor sich das gute Stück direkt als Fehlinvestition entpuppt. Grundsätzlich eine gute Wahl sind Cams, die vom V4L2-Treiberpaket unterstützt werden. Dazu zählen z.B. einige Logitec-Cams.

Ich selbst benutze eine LogiTech QuickCam 5000 und bin mit der Einsetzbarkeit unter Ubuntu sehr zufrieden.

mjpg_streamer manuell starten

Sind die Hardwarevoraussetzungen erfüllt und wurde das mjpg_streamer-Paket erfolgreich installiert, kann man den ersten Start wagen. Dazu sollte man sich anschauen, unter welchem Namen das Gerät gemoutet wurde. Auf der Kommandozeile kann uns dazu z.B. eine Liste der eingehängten Devices weiterhelfen:
lsusb
Bei mir wurde die Cam auf /dev/video0 eingehängt. Entsprechend muss ich dies mjpg_streamer beim Aufruf auch mitteilen, damit dieser nicht ins Leere greift und dann allergisch mit Fehlermeldungen umsich wirft:
mjpg_streamer -i "input_uvc.so -d /dev/video0 -y" -o "output_http.so -p 8090 -w localhost"
Wer nun sehen will, was die WebCam für Bilder produziert, kann dies über den Browser tun, indem er den Link localhost aufruft. Wie zu erwarten ist, ist dazu der Aufruf auf Port 8090 notwendig wie mjpg_streamer beim Start mitgeteilt wurde.
http://localhost:8090/?action=stream
Wer es weniger bewegt mag, z.B. weil sein Mobiltelefon streaming ohne Zusatz-App nicht unterstützt, kann auch einen Snapshot aufrufen, der ebenfalls in Echtzeit generiert wird:
http://localhost:8090/?action=snapshot

mjpeg_streamer automatisch starten lassen

Der automatisierte Weg eine Webcam wie oben dargestellt starten zu lassen, geht über ein Start-Script, dass beim Starten des Systems im entsprechenden runlevel aufgerufen wird. Wer nicht ganz sicher ist, wie runlevel unter Linux gesteuert werden und wozu sie gut sind, kann diese Info erGooglen. Ich möchte hier nur kurz darstellen, was in der oben genannten Konfiguration an weiteren Schritten notwendig ist, um die Automatisierung gelingen zu lassen.

Datei für das zu erzeugende Startscript anlegen:
sudo touch /etc/init.d/mjpg_streamer


Zugriffsrechte für das Script setzen:
sudo chmod 755 /etc/init.d/mjpg_streamer


Das Startscript soll die Funktionen start | stop | restart unterstützen, in runlevel 2 gestartet werden und muss aufgrund der Descriptoren-Konvention selbige Information im Kopf der Datei enthalten. Entsprechend lautet der Code der Startdatei /etc/init.d/mjpg_streamer wie folgt:
#! /bin/sh
### BEGIN INIT INFO
# Provides: Starting / stopping / restarting mjpg_streamer
# Required-Start:
# Required-Stop:
# Default-Start: 2
# Default-Stop: 0 1 6
# Short-Description: mjpg_streamer script
# Description: Script to start stop or restart mjpg_streamer
### END INIT INFO
# Author: Dirk Hahn

# Aktionen
case "$1" in
start)
mjpg_streamer -i "input_uvc.so -d /dev/video0 -y" -o "output_http.so -p 8090 -w localhost" -b &
;;
stop)
kill -9 `pidof mjpg_streamer`
;;
restart)
kill -9 `pidof mjpg_streamer`
sleep 3
mjpg_streamer -i "input_uvc.so -d /dev/video0 -y" -o "output_http.so -p 8090 -w localhost" -b &
;;
esac

exit 0
Anschließend die symbolischen Links für runlevel anlegen lassen:
sudo update-rc.d /etc/init.d/mjpg_streamer defaults
Ausgabe:
update-rc.d: warning: mjpg start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (5)
Adding system startup for /etc/init.d/mjpg.sh ...
/etc/rc0.d/K20mjpg.sh -> ../init.d/mjpg.sh
/etc/rc1.d/K20mjpg.sh -> ../init.d/mjpg.sh
/etc/rc6.d/K20mjpg.sh -> ../init.d/mjpg.sh
/etc/rc2.d/S20mjpg.sh -> ../init.d/mjpg.sh
/etc/rc3.d/S20mjpg.sh -> ../init.d/mjpg.sh
/etc/rc4.d/S20mjpg.sh -> ../init.d/mjpg.sh
/etc/rc5.d/S20mjpg.sh -> ../init.d/mjpg.sh
Anschließend Rechner rebooten mit
sudo shutdown -r now
Jetzt sollte die Kamera beim Start automatisch verfügbar und abfragbar sein.

Weiterführende Links

Doku mit Beispielen: Andys Blog
Ubuntu-Doku und Installation: Ubuntu-Wiki
Installationsbeispiel: Rudis-Wiki