Zum Inhalt

Eine eigene Videowall für CCTV mit mpv erstellen

Hat man mehrere Überwachungskameras in Betrieb, ist die Darstellung aller Streams auf einem oder mehreren Monitoren eine kleine Herausforderung. Es gibt mehrere Raspberry Pi Motion-Kameras, die in diesem Beispiel unterschiedliche Hotspots (Tränke, Futterstation, etc.) von Vögeln überwachen.
Wie lassen sich die einzelnen Bilder anordnen, das man möglichst auf einen Blick alles Wesentliche sieht?

Dabei ist es ganz besonders wichtig, dass die Fenster immer am gleichen Platz und in der gleichen Größe auf dem Bildschirm platziert werden. Mit den Fensterregeln von KDE lässt sich das schnell und einfach umsetzen.


mpv als Mediaplayer für die Videowall

In diesem Setup wird mpv 1, eine Command line media player verwendet.

Meine Versuche die Videowall mit VLC media player umzusetzen sind alle gescheitert. Es war nicht möglich einen stabilen Ablauf hinzubekommen, dass die einzelnen Fenster der Video-Stream automatisch durch Fensterregeln an die immer gleichen Position gesetzt werden konnte.

Das Problem mit vlc:
Verwendet man die Fensterregeln von KDE, um die einzelnen Fenster an definierten Positionen automatisch zu platzieren, funktioniert das mit vlc nicht richtig.

Der Fenstertitel wird von vlc erst nach dem Öffnen des Streams vergeben.

Die Fensterregel greift aber bereits vorher, direkt beim Öffnen des vlc-Fensters.

→ Die Fensterregel versucht das Fenster über den Titel zu finden, den es noch nicht gibt. Eine Platzierung ist deshalb nicht möglich.


mpv

mpv installieren

mpv wird aus den Paketquellen installiert.

sudo apt install mpv

mpv als Video- und Audioplayer im RSS-Reader Newsboat verwenden

mpv lässt sich auf als Video- und Audioplayer im RSS-Reader Newsboat verwenden.

Es wird dafür ein neuer Shortcut in der Newsboat-Konfigurationsdatei config anglegt.

# MACOS  AND LINUX STREAM #
macro c set browser "mpv --player-operation-mode=pseudo-gui -- %u &"; one; set browser firefox

Das funktioniert sehr gut zum Anschauen von Musikvideos. 👉 YouTube-Channels in Newsboat abonnieren - So geht’s mit RSS-Feeds

Drück man nun , + c öffnen sich die Multimediainhalte direkt in mpv. 🎸

Die Überwachungsstreams

Für jede Kamera ist ein eigenes Skript zu erstellen:

  • mpv_bird_01.sh
  • mpv_bird_02.sh
  • mpv_bird_03.sh

Ein Raspberry Pi, mehrere Kameras

An einem Raspberry Pi können mehrere Kameras angeschlossen werden.
Bis zum Raspberry Pi 4 kann eine Kamera über ein Flachbandkabel an die 15-polige MIPI-Kameraschnittstelle (CSI) angeschlossen werden. Ab dem Raspberry Pi 5 lassen sich zwei Kameras über diese Schnittstelle anschließen.
Zusätzlich dazu lassen sich auch ganz normale USB-Kameras an den Raspberry Pi anschließen. Dafür können spezielle Kameras verwendet werden oder ganz einfache Webcams, wie z.B. eine Logitech C720. Bei der Auswahl sollte man auf die Auflösung achten.
Mit Motion lassen sich diese unterschiedlichen Kameras ansteuern.

If you only have one camera you only need the motion.conf file but if you have more than one camera, then you will need to have one camera config file per camera plus the motion.conf file.2

Die Skripte haben die gleich Struktur. Es sind jeweils die Variablen zu ändern.

Skript 1 - BIRD_01
#!/usr/bin/env bash
set -euo pipefail

CREDS_FILE="./mpv_cctv.conf"
source "$CREDS_FILE"

: "${HTTP_TITLE_BIRD_01:?Missing HTTP_TITLE_BIRD_01}"
: "${HTTP_USER_BIRD_01:?Missing HTTP_USER_BIRD_01}"
: "${HTTP_PASS_BIRD_01:?Missing HTTP_PASS_BIRD_01}"
: "${HTTP_URL_BASE_BIRD_01:?Missing HTTP_URL_BASE_BIRD_01}"

mpv --title="${HTTP_TITLE_BIRD_01}" \
  --rtsp-transport=tcp \
  "${HTTP_URL_BASE_BIRD_01/http:\/\//http:\/\/${HTTP_USER_BIRD_01}:${HTTP_PASS_BIRD_01}@}"

Die Zugangsdaten zu den Stream sind in der Datei mpv_cctv.conf abgespeichert.

mpv_cctv.conf
HTTP_TITLE_BIRD_01="BIRD-Futterstation"
HTTP_USER_BIRD_01="user"
HTTP_PASS_BIRD_01="password"
HTTP_URL_BASE_BIRD_01="http://192.168.21.10:8081"

HTTP_TITLE_BIRD_02="BIRD-VOGELTRAENKE"
HTTP_USER_BIRD_02="user"
HTTP_PASS_BIRD_02="password"
HTTP_URL_BASE_BIRD_02="http://192.168.21.11:8081"

HTTP_TITLE_BIRD_03="VOGEL-BRUTKASTEN"
HTTP_USER_BIRD_03="uxer"
HTTP_PASS_BIRD_03="password"
HTTP_URL_BASE_BIRD_03="http://192.168.21.12:8081"

Die Rechte für die Dateien sind entsprechend ihrer Funktion anzupassen.

Alle Shell Skripte
chmod +x *.sh
Konfigurationsdatei
chmod 0600 mpv_cctv.conf

Starten mit zsh-Alias

Das Starten der Skripte kann einfach über die CLi erfolgen:

Normaler Start über die CLI
~/mpv &&
./mpv_bird_01.sh &
./mpv_bird_02.sh &
./mpv_bird_03.sh &

Das Starten kann mit einem zsh-Alias erheblich vereinfacht werden. Dazu wird ein neuer Alias in der .zshrc oder dem entsprechenden Skript angelegt:

Alias in der .zshrc
alias cctv='~/mpv && ./mpv_bird_01.sh & ./mpv_bird_02.sh & ./mpv_bird_03.sh & sleep 4; htop'

Der Alias startet alle Skripte, wartet 4 Sekunden und zeigt im gleichen Terminalfenster htop an.

Alle Skripte lassen sich damit bequem mit dem Befehl cctv direkt von der CLI starten.

KDE - Fensterregeln

Für jedes mpv-Fenster ist eine eigene Regel anzulegen.

KDE - Fensterregeln

‼️ Bei den Einstellungen pro Fenster ist es besonders wichtig, dass bei Fenstertitel Exakte Übereinstimmung ausgewählt wird.

Das einfachste Vorgehen zur Definition aller Fenster der Videowall ist:

  1. alle Streams öffnen
  2. auf dem Bildschirm platzieren
  3. KDE-Fensterregel anlegen
  4. Die Einstellungen mit einem Klick auf Fenstereigenschaften ermitteln in die jeweilige Regel übernehmen.

Alle mpv-Fenster lassen sich auf einmal mit dem Befehl killall mpv beenden.

Nach dem erneuten Öffnen mit dem zsh-Alias cctv von der CLI, werden alle Fenster an der festgelegten Position in der definierten Größe geöffnet.

Damit ist die Videowall fertig 🎉


Gib mir gerne einen Kaffee ☕ aus 😀

Gib mir gerne einen Kaffee ☕ aus !

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address:

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Weitere Möglichkeiten mich zu unterstützen findest du 👉 hier

Source

Photo by Tasha Kostyuk on Unsplash