In diesem Projekt verwende ich einen Raspberry Pi (Zero W) mit Raspbian als Betriebssystem und einer Raspberry Pi Kamera.

Das Raspberry Pi wird als Stream-Server konfiguriert. Die Aufnahmen der Kamera werden später von Motion erfasst. Motion kann die Bewegungen im Bild erkennen und einen Alarm auslösen.

Die Vorarbeiten (Installation und Konfiguration) von Raspbian Lite sind grundlage für dieses Projekt.

Mit Raspberry Konfig müssen wir das Kamera Modul aktiviert.

sudo raspi-config

Interfacing Options / Camera -> Enable
Advanced Options / Memory Split = 128MB GPU

Den Neustart bitte nicht vergessen!

Ein erster Snapschuss sollte schon jetzt möglich sein.

raspistill -o /tmp/snapshot.jpg

Jetzt können wir die Installation starten.

Zuerst die PublicKey für Apt-Get hinzufügen.

curl https://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add -

Die Installationsquellen für Apt-Get hinzufügen.

sudo sh -c 'echo "deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main" > /etc/apt/sources.list.d/uv4l.list'

Jetzt kann die Installaion starten.

sudo apt-get update
sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras

Der Dienst sollte jetzt laufen.

sudo service uv4l_raspicam status

oder man kann das Device /dev/video0 mit dem Programm uv4l erstellen.

uv4l --driver raspicam --auto-video_nr --width 1280 --height 720 --encoding jpeg

Die Einstellungen kann man in der Konfig Datei speichern.

sudo vim /etc/uv4l/uv4l-raspicam.conf

encoding = h264
width = 1280
height = 720
framerate = 20

Jetzt erstellen wir ein Foto in /tmp/snapshot.jpg.

dd if=/dev/video0 of=/tmp/snapshot.jpg bs=11M count=1

Quelle: Linux-Projects

Für das Streaming verwenden einen WebRTC StreamServer.

sudo apt-get install uv4l-webrtc

Mit VLC oder dem Firefox kann man sich den Stream ansehen.

vlc http://raspberrypi:8080/stream/video.mjpeg

Auf einem Raspberry Pi Zero W ist die CPU zu 70% ausgelastet. Verwendet man h264, wird das Encoding per Hardware durchgeführt. Damit sinkt die CPU Auslastung auf 30% ab.

vlc http://raspberrypi:8080/stream/video.h264 --demux h264

Mit VLC ist auch die Umcodierung möglich.

vlc http://localhost:8080/ &
cvlc http://raspberrypi:8080/stream/video.h264 --demux h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:8080}' :demux=h264

FFPlay kann man auch zu Anzeigen verwenden.

ffplay -framerate 30 -video_size 1280x720 -i http://raspberrypi:8080/stream/video.h264 -f rawvideo -vcodec h264

Hier finden Sie weitere Informationen zur UV4L installation.

Leider habe ich Motion nicht dazu gebracht, diesen h264 Stram anzuzeigen. Eine Alternative ist der v4l2 RTSP Server.

wget https://github.com/mpromonet/v4l2rtspserver/releases/download/v0.0.8/v4l2rtspServer-0.0.8-Linux-armv7l.deb

Das Paket kann man auch auf einem Raspberry Pi Zero installieren.

sudo dpkg -i v4l2rtspServer-0.0.8-Linux-armv7l.deb

Ein erster Start sieht so aus.

sudo v4l2rtspServer -F 10 -W 1280 -H 720 -P 8555 /dev/video0

Jetzt kann man den h264 Stream per VLC abspielen. Die CPU Auslastung liegt bei nur 8 Prozent.

vlc rtsp://raspberrypi:8555/unicast

Damit der RTSP Server als Dienst läuft, müssen wir einige Einstellungen vornehmen.

Damit die Option -r funktioniert, braucht man das Modul bcm2835-v4l2.

sudo modprobe bcm2835-v4l2

Wir sollten prüfen, ob das Modul geladen wird.

lsmod |grep bcm

Nach jedem Neustart soll das Modul automatisch geladen werden.

sudo sh -c 'echo "bcm2835-v4l2" >> /etc/modules-load.d/modules'

Jetzt sollte die Option -r funktionieren.

/usr/bin/v4l2rtspServer -r -F 10 -W 1280 -H 720 -P 8555 /dev/video0

Jetzt können wir den Dienst für Systemd anlegen.

sudo vim /etc/systemd/system/v4l2rtspserver.service

[Unit]
Description=V4L2 RTSP server
After=network.target
 
[Service]
Type=simple
User=root
ExecStart=/usr/bin/v4l2rtspServer -r -F 20 -W 1280 -H 720 -P 8555 /dev/video0
 
[Install]
WantedBy=multi-user.target

Jetzt ist der Start als Dienst möglich.

sudo systemctl start v4l2rtspserver
sudo systemctl status v4l2rtspserver
sudo systemctl enable v4l2rtspserver

Quelle: Github

Für die Bewegungserkennung verwende ich Motion.

Die aktuelle Version von Motion bekommt man bei Github.

wget https://github.com/Motion-Project/motion/releases/download/release-4.1.1/pi_stretch_motion_4.1.1-1_armhf.deb

Die Installation erfolgt per DPKG Tool.

sudo dpkg -i pi_stretch_motion_4.1.1-1_armhf.deb

Es gibt auch eine Beispielkonfiguration.

wget http://linux-projects.org/downloads/examples/motion.conf

Will man mit Motion direkt auf die Kamera /dev/video0 zugreifen, braucht man beim Start die Library „libUV4Lext.so“.

LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so motion -c /home/pi/motion/motion.conf

Im Webbrowser kann unter der Adresse http://raspberrypi:8081/stream.mjpg die Kamera aufzurufen.

Quelle: Github

Die LED an der Raspberry Pi Kamera lässt sich deaktivieren, indem der Eintrag disable_camera_led in der Konfig Datei gesetzt wird.

sudo sh -c 'echo "disable_camera_led=1" >> /boot/config.txt'