24.04.2021
MJPG-Streamer
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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.
Voraussetzungen
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.
Installation
MJPG-streamer ist nicht in den offiziellen Paketquellen enthalten und muss selber kompiliert werden, dafür werden folgende Pakete benötigt:
- build-essential
- libjpeg-dev
- imagemagick
- subversion
- libv4l-dev (optional)
- checkinstall (optional)
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
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.
mit Video 4 Linux
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.
Benutzung/Konfiguration
Die Bedienung von MJPG-streamer erfolgt über die Kommandozeile. Die Einstellungen erfolgen über die Parameter beim Aufruf, ab Version 2.0 lautet dieser
mjpg_streamer -i "<Input-Plugin> <Input-Optionen>" -o "<Output-Plugin> <Output-Optionen>"
Hinweis:
In älteren Versionen hieß das Programm mjpg-streamer
. Der Artikel bezieht sich jedoch immer auf die neue Version 2.0.
Plugins
Die Hilfe zu allen Plugins kann mit
mjpg_streamer -i "<Input-Plugin> --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
Webstream testen
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.
MJPG-streamer automatisch starten
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.
Fehlerbehebung
Could not find input/output plugin
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
Unable to set format: XX.
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"
no www-folder configured
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.