In einem früheren Beitrag habe ich beschrieben, wie mit einem Raspberry Pi Zero und Kameramodul einem Streaming Server (rtsp) aufbaut.

Nach einem Update auf Raspbian Bookworm haben sich einige Änderung ergeben. In Bookworm wurde das Programm raspistill und raspivid durch libcamera ersetzt. Aus diesem Grund folgt ein neuer Beitrag zur Installation.

Die Installation startet mit der Übertragung von Raspberry Pi OS Lite auf eine SD Karte. Die Schritte zur Einrichtung überspringen wir in diesem Beitrag, da es nur um die Installation der Kamera geht.

Die notwendigen Module für die Kamera werden in Bookworm automatisch geladen. Mit dem neuen Programm rpicam können einen ersten Funktionstest durchführen.

Das Programm rpicam-hello gibt uns mehr Informationen zum Modul wie Modell, Auflösung usw.

rpicam-hello

Ein erstes Foto können wir mit dem Programm rpicam-jpeg erstellen.

rpicam-jpeg -o test.jpg

Weitere Informationen gibt es in der Dokumentation vom Raspberry Pi.

Wir wollen jetzt das Straming mit RTSP installieren. Die Software go2rtc wird diese Aufgabe übernehmen.

Wir laden das Programm mit wget von Github runter.

wget https://github.com/AlexxIT/go2rtc/releases/download/v1.8.5/go2rtc_linux_armv6

Das Programm müssen wir noch ausführbar machen.

chmod +x go2rtc_linux_armv6

Das Programm wird mit einer Konfigurationsdatei gestartet. Hier wird das Programm rpicam-vid verwendet. Das Tuning ist für eine NoIR Kamera notwendig. Sonst werden die Farben nicht richtig dargestellt.

vim go2rtc1.yml

streams:
  unicast: exec:rpicam-vid -t 0 --nopreview --inline --codec h264 --framerate 5 --width 1280 --height 960 --denoise cdn_off --tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx219_noir.json -o -

Der Aufruf von go2rtc erfolgt wie folgt.

./go2rtc_linux_armv6 -config go2rtc1.yml

Damit ist die Einrichtung des Streaming abgeschlossen.

Die Funktion kann man mit VLC oder FFplay überprüfen.

ffplay rtsp://:8554/unicast

Leider musste ich einen entscheiden Nachteil feststellen. Die neuen Programme rpicam-vid mit libcamera verwenden die CPU stärken für die Bildverarbeitung. Die CPU Auslastung steigt auf einem Raspberry Pi Zero auf 50-70 Prozent an. Zuvor lag die Auslastung bei maximal 10 Prozent, da die GPU für die Verarbeitung (codec h264) verwendet wurde.

Also doch eine Rollen rückwärts?

Es gibt die Möglichkeit die alten Treiber (Legacy camera stack) und Module (v4l2) in Bookworm zu aktivieren.

In der Konfiguration müssen wir einige Einstellungen ändern und einen Neustart durchführen.

sudo vim /boot/firmware/config.txt

# Automatically load overlays for detected cameras
# camera_auto_detect=0
# Camera V2 (IMX219)
# dtoverlay=imx219
start_x=1
gpu_mem=128
awb_auto_is_greyworld=1

Wir deaktivieren die Werte camera_auto_detect oder dtoverlay und aktivieren die Werte start_x, gpu_mem und bei einer NoIR Kamera noch awb_auto_is_greyworld.

Nach einem Neustart ist die Umstellung durchgeführt.

sudo reboot

Die Programm rpicam-vid mit go2rtc funktionieren jetzt nicht mehr, aber das Programm v4l2rtspServer wieder.

Für den Raspberry Pi Zero W (armv6l) brauchen wir diese Paket.

wget https://github.com/mpromonet/v4l2rtspserver/releases/download/v0.3.7/v4l2rtspserver-0.3.7-Linux-armv6l-Release.deb

Jetzt erfolgt die Installation vom Paket.

sudo dpkg -i v4l2rtspserver-0.3.7-Linux-armv6l-Release.deb

Der Aufruf von Programm erfolgt mit diesen Parametern.

/usr/local/bin/v4l2rtspserver -r -Q 20 -F 5 -W 1280 -H 720 -P 8554 /dev/video0

Für den automatischen Start können wir Systemd verwenden.

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

[Unit]
Description=V4L2 RTSP server
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
 
[Service]
Type=simple
#Environment=LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
ExecStart=/usr/local/bin/v4l2rtspserver -r -Q 20 -F 5 -W 1280 -H 960 -P 8554 /dev/video0
User=user
Group=user
Restart=on-failure
RestartSec=15s
 
[Install]
WantedBy=multi-user.target

Die Konfiguration wird geladen.

sudo systemcrl daemon-reload

Der Dienst wird aktiviert und gestartet.

sudo systemctl enable --now v4l2rtspserver.service

Damit ist die Einrichtung vom Steam Server abgeschlossen.

ffplay -sync ext -fflags nobuffer -framedrop rtsp://:8554/unicast

Die Auslastung der CPU liegt wieder unter 10 Prozent.