Ubuntu 10.04 „Lucid Lynx“
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 (z.B. Logitech QuickCam Pro 5000 Rev. 8ce) muss zunächst ein Treiber für v4l2 (Video 4 Linux 2) installiert werden. Wenn die Kamera aber unter anderen Programmen funktioniert, entfällt dieser Schritt. Außerdem muss das Paket libjpeg-dev installiert sein.
mjpg-streamer ist nicht in den offiziellen Paketquellen enthalten.
Beim SourceForge-Projekt mjpg-streamer werden DEB-Pakete angeboten. Die unterstützten Ubuntuversionen und Architekturen werden aufgelistet. Nachdem man sie für die korrekte Ubuntuversion und Architektur geladen hat, müssen DEB-Pakete noch installiert werden.
Fremdpakete können das System gefährden.
Momentan gibt es nur ein aktuelles Paket für die 32-Bit-Architektur, für die 64-Bit-Architektur muss der Quellcode verwendet werden.
Die aktuelle Quelltext wird von der Projekthomepage heruntergeladen und anschließend entpackt [2]:
tar -xzvf mjpg_streamer_*
Im erstellten Verzeichnis mjpg-streamer wird dann aus den Quellen die Anwendung und deren Plugins gebaut [3].
cd mjpg-streamer make clean all
Die Anwendung kann jetzt im Terminal aus dem Verzeichnis heraus gestartet werden [4].
Die Bedienung von mjpg-streamer erfolgt über die Kommandozeile [1]. Die Einstellungen erfolgen über die Parameter beim Aufruf. Sind keine Parameter angegeben, so wird ein Stream mit maximaler Kameraauflösung und einer Bildrate von 5fps erzeugt.
Ein typischer Aufruf sieht etwa so aus:
./mjpg-streamer -i "<Input Modul> <Input Optionen>" \ -o "<Output Modul> <Output Optionen>"
Ab der Version 2.0:
mjpg_streamer -i "<Input Modul> <Input Optionen>" \ -o "<Output Modul> <Output Optionen>"
Input | |||
Modul | Funktion | Optionen | Eingabe |
input_uvc.so | Liest Daten aus der Kamera | -d <device> | Gerätename (z.B. /dev/video0) |
-r <Auflösung> | Gewünschte Auflösung (z.B. 640x480) | ||
-f <Bildwiederholrate> | 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 (keine MJPEG Unterstützung) |
Output | |||
Modul | Funktion | Optionen | Eingabe |
output_file.so | Speichert die Aufnahme in JPEG Dateien | -f <Verzeichnis> | Speicherort (z.B. /home/<user>/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 <Anweisung> | Führt einen Befehl nach dem Speichern des Bildes aus | ||
output_http.so | Erzeugt einen HTTP fähigen Stream | -w <Verzeichnis> | Speicherort der Webinterface Dateien (default ist www) |
-p <Port> | HTTP auf dem der Stream abzurufen ist (z.B. 8080) | ||
-c <user:pass> | Weist dem Stream einen Usernamen und ein Passwort zu |
Um z.B. einen Webstream von /dev/video0 auf localhost
(127.0.0.1) Port 8080
mit einer Bildwiederholrate von 5fps und einer Auflösung von 352x288 zu erzeugen, der nur für den Nutzer joe
(Passwort bean
) zugänglich ist, wird mjpg-streamer mit den folgenden Parametern gestartet:
./mjpg-streamer -i "input_uvc.so -d /dev/video0 -f 5 -r 352x288" -o "output_http.so -w www -p 8080 -c joe:bean"
Ab der Version 2.0:
mjpg_streamer -i "input_uvc.so -d /dev/video0 -f 5 -r 352x288" -o "output_http.so -w www -p 8080 -c joe:bean"
Jetzt wird das Webinterface aus den im Unterordner (des aktuellen Verzeichnisses) www abgelegten Dateien erzeugt. Soll das mit dem Paket gelieferte Beispielinterface genutzt werden, gibt man -w /usr/www
an. In der Konsole sollte die folgende Ausgabe erscheinen:
MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 352 x 288 i: Frames Per Second.: 5 i: Format............: MJPEG o: www-folder-path...: www/ o: HTTP TCP port.....: 8080 o: username:password.: joe:bean
Um sich den Stream anzusehen, ruft man in einem Browser die Adresse http://127.0.0.1:8080/
auf. Dort kann der Stream als Standbild, Livestream und Java oder Javascript Applet abgerufen werden. Die Einbindung des Streams als Link ist problemlos möglich.
Für den Fall, dass mjpg-streamer die Ausgabe-/Eingabemodule 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
sollte versucht werden, mittels folgendem Befehl auf den im Quellverzeichnis befindlichen Unterordner plugins/ zu verweisen:
export LD_LIBRARY_PATH=/Pfad/zu/den/plugins/
Der Pfad muss bei der Installation in ein anderes Verzeichnis wie z.B. /opt entsprechend angepasst werden.
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 mjpeg-stream nicht unterstützt. Hierbei hilft die Option -y
, also
mjpg-stream -i "input_uvc.so -d /dev/video -y" -o "output_http.so"
Ab der Version 2.0:
mjpg_streamer -i "input_uvc.so -d /dev/video0 -y" -o "output_http.so"
siehe nächste Fehlerbeschreibung
Sollte im Browser die folgende Meldung erscheinen:
501: Not Implemented! no www-folder configured
muss man den Stream unter folgender Adresse aufrufen:
http://localhost:8080/?action=stream
bzw.
http://localhost:8080/?action=snapshot