Inhaltsverzeichnis
MJPG-Streamer
ist ein Werkzeug für die Kommandozeile, mit dem sich Videodaten von einer Webcam oder einer anderen Videoquelle als Motion-JPEG (M-JPEG/MJPG) streamen lassen. Während moderne Netzwerkkameras einen solchen Stream automatisch erzeugen, kann mit Hilfe des Programms auch eine einfache Webcam mittels eines Rechners mit Internet-Zugang zu einer solchen umfunktioniert werden.
Zum Betrieb eines Webstreams muss die Webcam zunächst korrekt eingerichtet sein. Bei einigen Modellen muss zunächst ein Treiber für Video 4 Linux 2
installiert werden. Wenn die Kamera aber unter anderen Programmen funktioniert, entfällt dieser Schritt.
MJPG-streamer ist nicht in den offiziellen Paketquellen enthalten und muss selber kompiliert werden, dafür werden folgende Pakete benötigt:
mit apturl
Paketliste zum Kopieren:
sudo apt-get install build-essential libjpeg-dev imagemagick subversion libv4l-dev checkinstall
sudo aptitude install build-essential libjpeg-dev imagemagick subversion libv4l-dev checkinstall
Der aktuelle Quelltext wird aus dem SVN-Projektarchiv heruntergeladen
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
Nun wechselt man in das erstellte Verzeichnis mjpg-streamer/mjpg-streamer.
cd mjpg-streamer/mjpg-streamer
und kompiliert bzw. installiert das Programm entweder auf die klassische Weise[2]
make sudo make install
oder mit checkinstall (dann kann das Programm leicht wieder deinstalliert werden).
VERSION=$( sed -n ‘/SOURCE_VERSION/s/^.*"(.*)".*$/1/gp’ < mjpg_streamer.h ) REVISION=$( svnversion -cn | sed “s/.*://” ) sudo checkinstall –pkgname=mjpg-streamer –pkgversion="$VERSION+$REVISION~checkinstall" –default
Dabei ist VERSION die aktuelle Versionsnummer von MJPG-streamer und REVISION die aktuelle Revision im Versionsverwaltungssystem. Zusammengesetzt könnte die Paketversion also z. B. 2.0+172~checkinstall heißen.
Wenn man das Paket libv4l-dev installiert hat, kann man diese Bibliothek mit herein kompilieren:
make USE_LIBV4L2=true
Dadurch sind bei manchen Kameras weitere Einstellungen möglichen und man kann viel mehr Auflösungen wählen.
Die Bedienung von MJPG-streamer erfolgt über die Kommandozeile [1]. Die Einstellungen erfolgen über die Parameter beim Aufruf, ab Version 2.0 lautet dieser
mjpg_streamer -i “ ” -o “ ”
In älteren Versionen hieß das Programm mjpg-streamer. Der Artikel bezieht sich jedoch immer auf die neue Version 2.0.
Die Hilfe zu allen Plugins kann mit
mjpg_streamer -i “ –help”
aufgerufen werden. Die folgende Tabelle zeigt die wichtigsten Plugins:
Input
Plugin
Funktion
Optionen
Eingabe
input_testpicture.so
Testbild
-d <Verzögerung>
Bildintervall in Sekunden (z.B. 5)
-r <Auflösung>
Gewünschte Auflösung: 960x720, 640x480, 320x240 oder 160x120
input_uvc.so
Liest Daten aus der Kamera
-d
Gerätename (z.B. /dev/video0)
-r <Auflösung>
Gewünschte Auflösung (z. B. 640x480)
-f
Framerate in Bilder pro Sekunde (z.B. 20)
-q <Bildqualität>
Qualität der JPEG Kompression (z. B. 85 für 85% Bildtreue)
-y
Zeichnet die Farbwerte in YUVY auf (wenn die Kamera MJPEG nicht unterstützt)
Output
Plugin
Funktion
Optionen
Eingabe
output_file.so
Speichert die Aufnahme in JPEG Dateien
-f
Speicherort (z.B. /home//webcam/)
-d <Verzögerung>
Bildintervall in Sekunden (z.B. 5)
-b <Änderung>
Speichert nur bei Veränderung des Bildinhalts über n Bytes (z.B. 64)
-c
Führt einen Befehl nach dem Speichern des Bildes aus
output_http.so
Erzeugt einen HTTP fähigen Stream
-w
Speicherort der Webinterface-Dateien (es sollte /usr/local/www angegeben werden)
-p
Port auf dem der Stream gesendet wird (z. B. 8080)
-c user:pass
Weist dem Stream einen Usernamen und ein Passwort zu
Um einen Webstream von /dev/video0 auf localhost Port 8080 zu erzeugen, wird MJPG-streamer mit den folgenden Parametern gestartet:
export LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i “input_uvc.so -d /dev/video0” -o “output_http.so -p 8080 -w /usr/local/www”
Dabei gibt LD_LIBRARY_PATH=/usr/local/lib das Verzeichnis an, in das die Plugins installiert wurden. Die Option -w /usr/local/www gibt das Verzeichnis des installieren Webinterface an.
In der Konsole sollte die folgende Ausgabe erscheinen:
MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 640 x 480 i: Frames Per Second.: 5 i: Format…………: MJPEG o: www-folder-path…: /usr/local/www/ o: HTTP TCP port…..: 8080 o: username:password.: disabled o: commands……….: enabled
Um sich den Stream anzusehen, ruft man im Browser die Adresse http://localhost:8080 auf. Dann muss das Webinterface erscheinen. Dort kann der Stream als Standbild und als MJPG-, Java- oder Javascript-Livestream abgerufen werden. Der MJPG-Stream http://localhost:8080/?action=stream kann auch mit VLC geöffnet werden.
Damit MJPG-streamer beim Systemstart automatisch gestartet wird, erzeugt man die Konfigurationsdatei /etc/init/mjpg_streamer.conf für Upstart:
description “MJPG-streamer /dev/video0” start on runlevel [2345] stop on runlevel [016]
script export LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i “input_uvc.so -d /dev/video0 -r 352x288” -o “output_http.so -p 8080 -w /usr/local/www -c joe:bean” » /var/log/mjpg_streamer_upstart.log 2>&1 end script
Im Vergleich zu oben wurde hier zusätzlich eine Auflösung von 352x288 eingestellt und der Zugang auf den Nutzer joe (Passwort bean) beschränkt. Das Skript muss ausführbar gemacht werden:
sudo chmod u+x /etc/init/mjpg_streamer.conf
Wie andere Dienste kann MJPG-streamer nun mit
sudo service mjpg_streamer [ start | stop ]
gestartet bzw. beendet werden. Beim Systemstart wird MJPG-streamer nun automatisch gestartet.
Wenn MJPG-streamer die Ein- und Ausgabe-Plugins nicht findet
MJPG Streamer Version.: 2.0 ERROR: could not find input plugin Perhaps you want to adjust the search path with: # export LD_LIBRARY_PATH=/path/to/plugin/folder dlopen: input_uvc.so: cannot open shared object file: No such file or directory
liegt das daran, dass ihr Verzeichnis nicht in der Umgebungsvariable LD_LIBRARY_PATH steht. Die Plugins werden nach /usr/local/lib installiert, demnach wird vor der Ausführung von MJPG-streamer folgender Befehl benötigt:
export LD_LIBRARY_PATH=/usr/local/lib
Sollte beim Start der Aufnahme eine Meldung wie
Unable to set format: 5. Init v4L2 failed !! exit fatal i: init_VideoIn failed
erscheinen, hilft es in der Regel, die Kamera kurz vom USB-Port abzuziehen und/oder in einen anderen Port zu stecken. Es kann aber auch sein, dass die Kamera MJEPG nicht unterstützt, dann hilft die Option -y um auf YUVY umzuschalten
mjpg_streamer -i “input_uvc.so -d /dev/video0 -y” -o “output_http.so”
Sollte im Browser die folgende Meldung erscheinen:
501: Not Implemented! no www-folder configured
Wurde Option -w zur Angabe des Verzeichnisses des Webinterface vergessen. Man kann den Stream aber trotzdem unter der Adresse http://localhost:8080/?action=stream bzw. http://localhost:8080/?action=snapshot erreichen.