Raspberry Pi als Überwachungsmonitor mit UniFi Video

Mit einem Raspberry Pi, einem Monitor, TV oder sonstigem Display lässt sich ohne grossen Aufwand ein Überwachungsmonitor der Kameras
von einem Ubiquiti UniFi Video NVR System erstellen. (Sollte aber auch mit anderen Systemen funktionieren die RTSP streamen können.)

27.11.2021 - Anleitung aktualisiert, Raspberry Pi OS Bullseye
05.08.2020 - Anleitung aktualisiert, Pi 4 Anzeige drehen
05.06.2020 - Anleitung aktualisiert

Mein Setup:

  • Raspberry Pi 3 Model B+
  • 8GB microSDHC Card Class 10
  • Raspberry Pi OS Light (Buster)
  • Raspberry Pi OS Light (Bullseye)
  • displaycameras (System for displaying RTSP feeds from IP cameras on the Raspberry Pi)
  • Full HD Monitor
  • UniFi Video NVR Server

RTSP Streams der Kameras aktiviern

Zum streamen auf den Monitor reicht mir eine Auflösung von 1024 x 576.
(Full HD benötigt mehr Bandbreite, ist für die Überwachung aber nicht notwendig.)

Den RTSP Service pro Kamera aktivieren und die entsprechende RTSP URL kopieren. (benötigen wir später)

Raspberry Pi OS Bullseye

Raspbian Bullseye installieren, updaten und mit raspi-config noch zwei zusätzliche Einstellungen und eine in der /boot/config.txt vornehmen.
Network at Boot, GPU Memory, Enable DRM VC4 V3D driver (Nach den Änderungen den Pi rebooten!)

omxplayer installieren

Ein apt search omxplayer findet leider nichts. Ein Paket für Bullseye ist aber verfügbar.

$ wget http://archive.raspberrypi.org/debian/pool/main/o/omxplayer/omxplayer_20190723+gitf543a0d-1+bullseye_armhf.deb
$ dpkg -i omxplayer_20190723+gitf543a0d-1+bullseye_armhf.deb
$ apt install -f

Dem omxplayer fehlen noch einige Shared Object Dateien.

$ omxplayer
/usr/bin/omxplayer.bin: error while loading shared libraries: libbrcmEGL.so: cannot open shared object file: No such file or directory

Alles was fehlt nach /opt/vc/lib kopieren

$ mkdir -p /opt/vc/lib
$ cd /opt/vc/lib
$ wget https://github.com/raspberrypi/firmware/raw/master/opt/vc/lib/libbrcmEGL.so
$ wget https://github.com/raspberrypi/firmware/raw/master/opt/vc/lib/libopenmaxil.so
$ wget https://github.com/raspberrypi/firmware/raw/master/opt/vc/lib/libbrcmGLESv2.so

bis er ohne Fehler startet.

$ omxplayer -v
omxplayer - Commandline multimedia player for the Raspberry Pi
        Build date: Mon, 19 Apr 2021 15:59:43 +0100
        Version   : f543a0d [master]
        Repository: https://github.com/popcornmix/omxplayer.git

displaycameras installieren

Die aktuelle Version herunterladen und installieren.

$ wget https://github.com/Anonymousdog/displaycameras/archive/refs/tags/0.8.3.3.tar.gz
$ tar xvfz 0.8.3.3.tar.gz
$ cd displaycameras-0.8.3.3
$ chmod +x install.sh
$ ./install.sh

# Die Abfrage am Ende der Installation einfach mit Enter bestätigen, haben wir ja schon auf 256MB gesetzt.
Enter a custom gpu split if desired [gpu memory in MB] or [Enter] to use recommended split

Die Konfigurationsdateien liegen unter /etc/displaycameras

$ ls -la /etc/displaycameras/
displaycameras.conf    # kann unverändert bleiben
layout.conf.default    # muss angepasst werden

Die layout.conf.default den eigenen Gegebenheiten anpassen und displaycameras testen.

$ /usr/bin/displaycameras start
Starting omxplayer for cam01
Waiting for cam01 omxplayer startup 0
cam01 started
Starting omxplayer for cam02
Waiting for cam02 omxplayer startup 0
cam02 started
Starting omxplayer for cam03
Waiting for cam03 omxplayer startup 0
cam03 started
Starting omxplayer for cam04
Waiting for cam04 omxplayer startup 0
cam04 started
Camera Display Started

$ /usr/bin/displaycameras status
cam01 is Playing rtsp://192.168.50.24:7447/59e67093c4b10b9cdb93f9c4_1
at 35sec
cam02 is Playing rtsp://192.168.50.24:7447/5e302a7ae4c0b4195b49738g_1
at 29sec
cam03 is Playing rtsp://192.168.50.24:7447/56f09fd7e4c02b9ceb9626fa_1
at 24sec
cam04 is Playing rtsp://192.168.50.24:7447/5acd733fe4c06d9cba998472_1
at 18sec

Die eingestellten Kameras sollten auf dem Monitor erscheinen. Den Pi neu booten, displaycameras startet automatisch.

Raspberry Pi OS Buster

Raspbian Buster installieren, updaten und mit raspi-config noch zwei zusätzliche Einstellungen vornehmen.
Wait for Network, Memory Split. (Nach den Änderungen den Pi rebooten!)

displaycameras installieren

Die aktuelle Version herunterladen und installieren.

# die aktuelle Version herunterladen
pi@raspberrypi:~ $ wget https://github.com/Anonymousdog/displaycameras/archive/master.zip

# archive entpacken 
pi@raspberrypi:~ $ unzip master.zip

# ins entpackte Verzeichnis wechseln
pi@raspberrypi:~ $ cd displaycameras-master/

# die install.sh ausführbar machen
pi@raspberrypi:~/displaycameras-master$ chmod +x install.sh

# die install.sh ausführen
pi@raspberrypi:~/displaycameras-master$ sudo ./install.sh

Die Abfrage am Ende der Installation einfach mit Enter bestätigen, haben wir ja schon auf 256MB gesetzt.

Enter a custom gpu split if desired [gpu memory in MB] or [Enter] to use recommended split                   

Für die verschiedenen Display Layouts findet man unter example_layouts einige Beispiele.

pi@raspberrypi:~/displaycameras-master $ ls -la example_layouts/
layout.conf.1024x600
layout.conf.1280x1028
layout.conf.1280x720
layout.conf.1280x768
layout.conf.1280x800
layout.conf.1440x900
layout.conf.1440x900.3x3
layout.conf.1920x1080.10on3x3
layout.conf.1920x1080.14mid-res-on-2x2
layout.conf.1920x1080.1x1
layout.conf.1920x1080.3x3
layout.conf.1920x1080.4on1x1
layout.conf.1920x1200.6on2x2
layout.conf.640x480
layout.conf.7on2x2_with_2x2lowerleft_child_matrix_on1280x800
layout.conf.large_left
layout.examples

Die Konfigurationsdateien liegen unter /etc/displaycameras/

pi@raspberrypi:~ $ ls -la /etc/displaycameras/
displaycameras.conf    # kann unverändert bleiben
layout.conf.default    # muss angepasst werden

Monitor Layout anpassen

Monitor mit 1920 x 1080, 4 Kameras, Ansicht 2 x 2

pi@raspberrypi:~ $ sudo vi /etc/displaycameras/layout.conf.default

#
# 1920 x 1080
# camera layout is 2x2, each field is 960 x 540
#

### Window names
windows=(upper_left upper_right lower_left lower_right)

### Windows positions
window_positions=(
#First Row
#upper_left
# 960x540
"0 0 959 539" \
#upper_right
# 960x540
"960 0 1919 539" \

#Second Row
#lower_left
# 960x540
"0 540 959 1079" \
#lower_right
# 960x540
"960 540 1919 1079" \
)

### Camera Names
camera_names=(cam01 cam02 cam03 cam04)

### Camera Feeds
camera_feeds=( \
#cam01
"rtsp://192.168.50.25:7447/59e67093c4b10b9cdb93f9c4_1" \
#cam02
"rtsp://192.168.50.26:7447/5e302a7ae4c0b4195b49738g_1" \
#cam03
"rtsp://192.168.50.27:7447/56f09fd7e4c02b9ceb9626fa_1" \
#cam04
"rtsp://192.168.50.28:7447/5acd733fe4c06d9cba998472_1" \
)

Nach den Änderungen den displaycameras.service neu starten.

pi@raspberrypi:~ $ sudo systemctl restart displaycameras.service

Passt alles, erscheinen jetzt nach und nach die 4 Kameras. (dauert ein bischen)

Nach einem shutdown oder reboot startet displaycameras automatisch. (Muss nicht extra aktiviert werden.)

Problemchen

Der omxplayer gibt kein Bild über den HDMI Ausgang aus. In der /boot/config.txt, vc4-kms-v3d auf vc4-fkms-v3d ändern.

# Enable DRM VC4 V3D driver
#dtoverlay=vc4-kms-v3d
dtoverlay=vc4-fkms-v3d

Ein älterer Full HD Monitor ohne HDMI. Hier geht’s mit einem DVI auf HDMI Kabel an den Raspi. Damit kommen aber leider nur 1680 x 1050 an! :(
Bekomme ich auch mit diversen Einstellungen in der /boot/config.txt des Raspi nicht hin, liegt wohl eher am Kabel als am Monitor.

pi@raspberrypi:~ $ fbset -s
mode "1680x1050"
    geometry 1680 1050 1680 1050 32
    timings 0 0 0 0 0 0 0
    rgba 8/16,8/8,8/0,8/24
endmode

Die layout.conf.default wird an die Auflösung anpasst.

#
# 1680 x 1050
# camera layout is 2x2, each field is 840 x 525
#
### Window names
windows=(upper_left upper_right lower_left lower_right)
### Windows positions
window_positions=(
#First Row
#upper_left
"0 0 839 524" \
#upper_right
"840 0 1679 524" \
#Second Row
#lower_left
"0 524 839 1049" \
#lower_right
"840 525 1679 1049" \
)

Bildschirm drehen (vertikal)

Beim Raspberry Pi 3 in die /boot/config.txt

display_rotate=3

Beim Raspberry Pi 4 in die /boot/config.txt

#dtoverlay=vc4-fkms-v3d     # 3D Beschleunigung deaktivieren
display_hdmi_rotate=1       # 90 Grad, nach rechts
#display_hdmi_rotate=3      # 270 Grad, nach links

1920 x 1080, 1x 3 Kameras im Hochformat

#
# 1920 x 1080
# camera layout is 1x3, each field is 1080 x 640
#
### Window names
windows=(top middle bottom)

### Windows positions
window_positions=(
#First Row
#top
"0 0 1080 640" \
#middle
"0 640 1080 1280" \
#bottom
"0 1280 1080 1920" \
)

IPv6 deaktivieren

Dadurch kann ggf. noch etwas optimiert werden. (Danke für den Tipp von heiko.)

pi@raspberrypi:~ $ sudo vi /etc/sysctl.conf
# am Ende der Datei einfügen
net.ipv6.conf.all.disable_ipv6 = 1

# Änderung ohne Neustart sofort anwenden
pi@raspberrypi:~ $ sudo sysctl -p

links

Rpisurv als Alternative?

Rpisurv is designed to be simple to use (no need to fiddle with coordinates or detailed layout configs) and to be able to run unattended for long periods of time.
Therefore watchdogs and autohealing logic have been implemented. Version 2 adds functionality to define multiple screens which can be cycled between.

Liest sich mal gut. Wer mit displaycameras Probleme hat, kann ja mal Rpisurv ausprobieren.

43 Gedanken zu „Raspberry Pi als Überwachungsmonitor mit UniFi Video“

  1. HI Ich habe ein Problem mit der Installation…

    pi@raspberrypi:~/displaycameras-master $ chmod +x install.sh
    pi@raspberrypi:~/displaycameras-master $ sudo install.sh
    sudo: install.sh: Befehl nicht gefunden

    Es lässt sich einfach nicht installieren… Hast du eine Idee wie ich das beheben kann?

    Vielen Dank! Und vor allem Vielen Dank für die Installationsanleitung!

    Antworten
      • Jaha! Klasse die Installation hat geklappt.

        Eine Frage noch. Ich würde gerne ein FullHD (1920×1080) Display im Portrait Modus, also Hochkant, nutzen. Dort würde ich gerne 8 Kameras im 2×4 Format sehen. Also 2 nebeneinander und 4 untereinander…

        Lässt sich das auch so einrichten? Also erst die Displayausrichtung drehen und dann die 2×4 Darstellung?

        Vielen Dank!

        Antworten
        • Das sollte funktionieren.

          Um die Displayausrichtung ins Hochformat zu bekommen, diese Zeilen am Ende in die /boot/config.txt einfügen.
          # 0 landscape (default), 3 portrait
          display_rotate=3
          # gpu_mem=128 (256 sollte schon gesetzt sein)

          Hab hier was im Ubiquiti Forum gefunden. 1920 x 1080, 2x 4 Kameras im Hochformat

          ### Window names
          windows=(left1 right1 left2 right2 left3 right3 left4 right4)

          ### Windows positions
          window_positions=(

          #First Row
          #left1
          "0 0 540 480" \
          #right1
          "540 0 1080 480" \

          #Second Row
          #left2
          "0 480 540 960" \
          #right2
          "540 480 1080 960" \

          #Third Row
          #left3
          "0 960 540 1440" \
          #right3
          "540 960 1080 1440" \

          #Fourth Row
          #left4
          "0 1440 540 1920" \
          #right4
          "540 1440 1080 1920" \

          )

          Antworten
  2. Sehr schöne Anleitung! Sowas sollte es viel viel mehr geben in dieser Art. Habe alles direkt umgesetzt und es läuft auch soweit.

    Ich fange mit DisplayCameras auch den Low-Stream ein, allerdings habe ich dennoch irgendwie das Problem, dass das ganze 2-3 Sekunden alles zeitverzögert ist, dass stört mich ungemein. Zudem bricht ab und zu der Stream mal kurzzeitig weg.

    Hat jemand auch das Probelm mit der Zeitverzögerung bzw. dem kurzzeitgen aussetzer des Stream?

    Antworten
  3. Danke für diese Anleitung! Funktioniert super. Hatte vorher einige andere Tutorials aber die haben alle nichts getaugt.

    Kleiner Tip noch: IPV6 auf dem Raspi ausschalten. Verbindung ist schneller aufgebaut und stabiler.

    Antworten
  4. Hallo,
    ich habe folgendes Problem.

    Zunächst paar Infos vorweg. Ich habe eine PI4 und einen Bildschirm im Hochformat mit der Auflösung 1680 x 1050.
    Das OS ist bereits gedreht. Das habe ich über den GUI Assistenten gemacht und nicht über die boot.conf.

    Das Problem ist nun dass die Kamera Videos übertragen werden jedoch sich diese dem Hochformat nicht anpassen.
    Sprich das OS ist im Hochformat und die Videos werden im Querformat dargestellt.

    Habe etwas mit der Boot.conf gespielt hat aber leider nichts gebracht. Auch der Parameter rotate=true bringt hier nichts.
    Gibt es weitere Ansätze die ich ausprobieren kann?
    Ich habe zwei Kameras die ich im Hochformat untereinander darstellen möchte.
    Danke sehr :)

    Antworten
  5. Guten Tag

    Ich war lange auf der Suche nach genau diesem “Programm”. Vielen Dank für das teilen.

    Dennoch habe ich eine Frage. Ich komme bis zum Punkt “sudo vi /etc/displaycameras/layout.conf.default”
    Jetzt will ich dort meine IP Adresse mit dem RTSP Stream eingeben, aber wie in aller Welt komme ich wieder aus dem layout.conf heraus.
    Ich dachte immer mit Ctrl X, aber das funktioniert nicht.

    Ich muss sagen, dass ich nicht viel Ahnung mit dem Raspberry habe, aber ich finde auch nichts brauchbares im Internet.
    Ich wäre sehr Dankbar, wenn mir jemand sagen könnte was ich falsch mache.

    Gruss

    Antworten
  6. HI! Habe das Displaycameras System schon eine weile am laufen und es ist klasse.
    Leider verliert ab und an die eine oder andere Cam den Stream zum Displaycamera und ich habe dann ein Standbild…
    Starte ich Displaycameras oder den Raspberry neu ist alles wieder hübsch.

    Gibt es irgendwie die Möglichkeit das automatisch zu überwachen und bei bedarf, wenn kein stream vorhanden ist, den Service neu zu starten?

    Vielen Dank!

    Antworten
  7. Hallo,

    1 Die Kameras stürzen bei mir die Ganze zeit ab? hat da jemand eine Lösung.
    2 kann mir jemand das Script so umbauen das 1 Kamera oben ist und eine unten.

    Es soll den Ganzen 1920×1080 Monitor einnehmen. Ich weiß dann ist das bild von beiden Kameras gestreckt aber das ist egal.

    MfG
    Moritz

    Antworten
  8. Hallo,

    vielen dank für die wirklich ausführliche Beschreibung. Bis auf ein paar kleinere Aussetzer funktioniert alles einwandfrei. Was ich momentan versuche und langsam am verzweifeln bin, ist die Feeds auf zwei Monitoren zum laufen zu bringen.

    Unser Pi 4 hat zwei HDMI Ausgänge, mein Setup wäre folgendermaßen, ich möchte zwei Kamerastreams, jeweils auf einem Full HD Display laufen lassen. Über den OMX Player und die Optionen Stream1: display=2 und Stream2: display=7 laufen beide Streams auf beiden Monitoren. Ich finde nur keine Lösung um das Display Layout so anzupassen, dass es laufen würde. Ich habe schon verschiedene größen on und off Display probiert, da ich dachte, dass ich den eigentlich Monitor nur um 1080p erweitere, ich vermute aber, dass das Script eben gar nicht merkt, dass es einen zweiten Monitor gibt. Hat jemand dafür vllt eine Lösung parat, wie ich den zweiten HDMI Port und Monitor einbringen kann?

    Vielen dank schon um voraus für die Hilfe!

    Besten Gruß

    Antworten
  9. Hallo ,

    gibt es eine Möglichkeit auch den Audiostream zu aktivieren ? Die Bildübertragung läuft problemlos.

    Beste Grüße und Vielen Dank

    Antworten
    • Im Prinzip ja. Du müsstest dann alle Kameras über eine Portweiterleitung von extern erreichbar machen.
      Würde ich persönlich aber nicht so machen, sondern das dann eher über VPN (z.B WireGuard) lösen.

      Antworten
  10. Hallo,
    hast du schon die Rotation von Kameras, die nicht aktiv angezeigt werden, genutzt?
    Ich kämpfe damit, dass ich gerne nicht immer nur eine Kamera neu reinfliegen lassen würde, sondern alle 6 direkt angezeigt mit den 6 aus den off austauschen.

    Antworten
  11. Hi, irgendwas ist bei mir schief gelaufen.
    Ich habe alle Tools installiert und auch in der config Datei meinen RTSPS Stream meiner Kamera eingefügt aber es wird nichts angezeigt und auch nicht automatisch geladen.
    Wenn ich den Raspi über den Remotedesktop von Windows öffne, wird mir nur das Raspberry OS Desktop angezeigt aber kein Bild von meiner Kamera.
    Hat jemand eine Idee warum?

    Antworten
  12. Hi zusammen,

    vielen Dank für die Zahlreichen Informationen.
    Würde es auch gehen, dass eine Unifi Klingel angeschlossen wird?
    Und ggfls. einen Touchdisplay nutzen anstatt eines “normalen” um hier z.B. auch mit Voice zu antworten?

    VG
    Alex

    Antworten
  13. Funktioniert bei mir nicht, ich habe den 3B+ und bekomme immer die Meldung: “error while loading shared libraries: libvcos.so: cannot open shared object file: No such file or directory” habe das neuste Bullseye Betriebssytem und das ganze mehrere male versucht, nichts klappt.

    Antworten

Schreibe einen Kommentar zu heiko Antworten abbrechen