Open-Source-Sicherheitskamera auf Basis von Raspberry Pi
(github.com/TzuHuanTai)- 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
- Mit Raspberry Pi Imager das Lite OS (Bookworm 64-bit) auf die microSD-Karte schreiben
- Erforderliche Bibliotheken installieren
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 - Raspberry-Pi-Hardware aktivieren, indem der folgende Inhalt zu
/boot/firmware/config.txthinzugefügt wirdcamera_auto_detect=0 start_x=1 gpu_mem=16camera_auto_detect=0setzen, damit die Kamera über v4l2 gelesen wird - USB-Laufwerk einhängen [Referenz]
- Wenn keine Videoaufzeichnung gewünscht ist, diesen Schritt überspringen und beim Ausführen das Flag
record_pathnicht setzen - Wenn das Laufwerk erkannt wird, wird es automatisch unter
/mnt/ext_diskeingehä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 - Wenn keine Videoaufzeichnung gewünscht ist, diesen Schritt überspringen und beim Ausführen das Flag
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_webrtckann mit dem Flag-hausgeführt werden, um alle Optionen anzuzeigen - Anwendung mit den Einstellungen starten
Tipp 1: Pi 5 unterstützt keine Hardwarekodierung, daher das Flagpulseaudio --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/--hw_accelentfernen und--v4l2_formataufmjpegsetzen. Die Videokodierung wird von OpenH264 übernommen Tipp 2: Bei der Einstellung1920x1080wechselt die Firmware des Hardware-Decoders zu1920x1088, aber ISP/Encoder werden nicht angepasst, wodurch der Speicherbereich überschritten wird. Mit1920x1088tritt das Problem nicht auf
Als Linux-Dienst ausführen
1. pulseaudio als systemweiten Daemon ausführen [Referenz]
- Datei
/etc/systemd/system/pulseaudio.serviceerstellen[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 = nohinzufügenecho '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.serviceerstellen[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
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
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
Ein weiterer Nutzer zog mit einem Raspberry Pi Zero WH das Projekt mediamtx in Betracht
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
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