1 Punkte von GN⁺ 2024-09-17 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Projekt, das einen Raspberry Pi in eine Home-Sicherheitskamera mit niedriger Latenz verwandelt
    • Verwendet den Hardware-Encoder v4l2DMA und WebRTC
    • Videowiedergabe und Download mit einer rein P2P-basierten Kamera ohne Medienserver möglich
    • Mehrere Nutzer können den Live-Stream gleichzeitig ansehen
    • Raspberry Pi 5 oder andere SBCs unterstützen keine v4l2-Hardwarekodierung und müssen im Software-Encoding-Modus ausgeführt werden

Verwendung

  • Die neueste Binärdatei unter Releases herunterladen
  • Die Pi Camera App installieren und den Anweisungen folgen

Hardware-Anforderungen

  • Raspberry Pi (Zero 2W oder höher)
  • CSI-Kameramodul
  • microSD-Karte mit mindestens 4 GB
  • USB-Laufwerk und Micro-USB-Stecker-auf-USB-A-Buchse-Adapter

Einrichtung

  1. Mit Raspberry Pi Imager das Lite OS (Bookworm 64-bit) auf die microSD-Karte schreiben
  2. Erforderliche Bibliotheken installieren
    sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6
    
  3. Raspberry-Pi-Hardware aktivieren, indem der folgende Inhalt zu /boot/firmware/config.txt hinzugefügt wird
    camera_auto_detect=0
    start_x=1
    gpu_mem=16
    
    camera_auto_detect=0 setzen, damit die Kamera über v4l2 gelesen wird
  4. USB-Laufwerk einhängen [Referenz]
    • Wenn keine Videoaufzeichnung gewünscht ist, diesen Schritt überspringen und beim Ausführen das Flag record_path nicht setzen
    • Wenn das Laufwerk erkannt wird, wird es automatisch unter /mnt/ext_disk eingehängt
    sudo apt-get install autofs
    echo '/- /etc/auto.usb --timeout=5' | sudo tee -a /etc/auto.master > /dev/null
    echo '/mnt/ext_disk -fstype=auto,nofail,nodev,nosuid,noatime,umask=000 :/dev/sda1' | sudo tee -a /etc/auto.usb > /dev/null
    sudo systemctl restart autofs
    

Anwendung ausführen

  • Derzeit wird MQTT als einziger Signalisierungsmechanismus verwendet, daher muss vor dem Start der Anwendung ein MQTT-Server bereitstehen
  • Wenn die Anwendung nur im LAN genutzt wird, kann auf demselben Pi ein MQTT-Server wie Mosquitto installiert werden
  • Wenn Remote-Zugriff erforderlich ist, wird ein Cloud-basierter MQTT-Server empfohlen (z. B. HiveMQ, EXMQ)
  • Um auf einen entfernten Signalisierungsserver über mobile Daten zuzugreifen, sind DDNS und Port-Forwarding erforderlich

Ausführung

  • Die Binärdatei pi_webrtc kann mit dem Flag -h ausgeführt werden, um alle Optionen anzuzeigen
  • Anwendung mit den Einstellungen starten
    pulseaudio --start
    /path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=Wonderful --uid=home-pi-zero2w --record_path=/mnt/ext_disk/video/
    
    Tipp 1: Pi 5 unterstützt keine Hardwarekodierung, daher das Flag --hw_accel entfernen und --v4l2_format auf mjpeg setzen. Die Videokodierung wird von OpenH264 übernommen Tipp 2: Bei der Einstellung 1920x1080 wechselt die Firmware des Hardware-Decoders zu 1920x1088, aber ISP/Encoder werden nicht angepasst, wodurch der Speicherbereich überschritten wird. Mit 1920x1088 tritt das Problem nicht auf

Als Linux-Dienst ausführen

1. pulseaudio als systemweiten Daemon ausführen [Referenz]
  • Datei /etc/systemd/system/pulseaudio.service erstellen
    [Unit]
    Description= Pulseaudio Daemon
    After=rtkit-daemon.service systemd-udevd.service dbus.service
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
  • Zu den Client-Einstellungen autospawn = no hinzufügen
    echo 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null
    
  • root zur Gruppe pulse hinzufügen
    sudo adduser root pulse-access
    
  • Dienst aktivieren und starten
    sudo systemctl daemon-reload
    sudo systemctl enable pulseaudio.service
    sudo systemctl start pulseaudio.service
    
2. pi_webrtc ausführen und automatischen Start beim Neustart einrichten
  • Datei /etc/systemd/system/pi-webrtc.service erstellen
    [Unit]
    Description= The p2p camera via webrtc.
    After=systemd-networkd.service
    
    [Service]
    Type=simple
    WorkingDirectory=/path/to
    ExecStart=/path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=wonderful --record_path=/mnt/ext_disk/video/
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
  • Dienst aktivieren und starten
    sudo systemctl daemon-reload
    sudo systemctl enable pi-webrtc.service
    sudo systemctl start pi-webrtc.service
    

Erweiterte Einrichtung

  • Für bidirektionale Kommunikation müssen Mikrofon und Lautsprecher hinzugefügt werden

Mikrofon

  • Anweisungen zur Verkabelung und zum Testen des Mikrofons siehe Link

Lautsprecher

  • Anweisungen zur Einrichtung des Lautsprechers siehe Link

Lizenz

  • Dieses Projekt ist unter der Apache License, Version 2.0 lizenziert. Details siehe Datei LICENSE

Zusammenfassung von GN⁺

  • Dieses Projekt zeigt, wie sich ein Raspberry Pi in eine Home-Sicherheitskamera mit niedriger Latenz verwandeln lässt
  • Es arbeitet mit dem Hardware-Encoder v4l2DMA und WebRTC rein P2P-basiert ohne Medienserver
  • Mehrere Nutzer können den Live-Stream gleichzeitig ansehen, was es als Sicherheitskamera für den Heimgebrauch nützlich macht
  • Durch den Signalisierungsmechanismus mit MQTT sind sowohl LAN- als auch Remote-Zugriff möglich
  • Andere Projekte mit ähnlichen Funktionen sind MotionEye und ZoneMinder

1 Kommentare

 
GN⁺ 2024-09-17
Hacker-News-Kommentare
  • Ein Nutzer wollte während einer Haussanierung ein Sicherheitssystem zur Fernüberwachung installieren, stellte jedoch fest, dass die meisten Funktionen Breitband-Internet erfordern

    • Stattdessen baute er mit einer Raspberry Pi Camera und einem RPi Zero 2W, einem LTE-Hotspot sowie einer T-Mobile-Prepaid-SIM für 5 US-Dollar pro Monat ein eigenes System auf
    • Als Software nutzte er imgcomp, um jede Sekunde Fotos aufzunehmen, lud geänderte Bilder auf einen VPS hoch und erhielt über Gotify Benachrichtigungen auf sein Smartphone
  • Ein anderer Nutzer wohnte während des Hausbaus in einer Wohnung und wollte ein Zeitraffer-Video erstellen sowie den Arbeitsfortschritt über das Internet überprüfen

    • Auf AliExpress fand er Kameras mit besserer Qualität
  • Ein weiterer Nutzer zog mit einem Raspberry Pi Zero WH das Projekt mediamtx in Betracht

    • Es sei ein gutes Beispiel für den Einsatz von WebRTC, möglicherweise mit nötiger DDNS- und Port-Forwarding-Konfiguration
    • Mit einer Open-Source-Lösung könne man eine private Verbindung zwischen Pi und Server herstellen
  • Ein Nutzer fragte sich, warum der Raspberry Pi 5 kein v4l2-Hardware-Encoding unterstützt

  • Ein anderer Nutzer versuchte mit dem Modell yolov3-tiny eine Echtzeit-Erkennung von Personen umzusetzen

    • Er bemüht sich, die Leistung mit C++ zu maximieren
  • Ein weiterer Nutzer erreichte mit Sentry-Picam einen ähnlichen Zweck, synchronisierte über Syncthing mit drei anderen Geräten und band ein auf sendxmpp basierendes Push-Benachrichtigungsskript an

  • Ein Nutzer setzte für ein ähnliches Projekt Nvidia Jetson ein und interessiert sich derzeit für reCamera

  • Ein weiterer Nutzer suchte nach Boards mit Open-Source-Firmware

  • Schließlich fragte ein Nutzer, ob WebRTC eine gute Lösung sei, wenn man nur Ton aufzeichnen möchte