(Update – Juni 2025) Kurzfassung:Mit den richtigen Kernel‑Tweaks, einer sauberen Stromversorgung und einer fein‑justierten rpicam-vid‑Pipeline streamt der Raspberry Pi Zero 2 W stundenlang stabil in 1080p 30 FPS auf einen lokalen NGINX‑RTMP‑Server. Dieser Beitrag zeigt alle Schritte – Hardware, Software, Config‑Files und jede Menge Hintergrundwissen
(Update – Juni 2025)
Kurzfassung:
Mit den richtigen Kernel‑Tweaks, einer sauberen Stromversorgung und einer fein‑justierten rpicam-vid
‑Pipeline streamt der Raspberry Pi Zero 2 W stundenlang stabil in 1080p 30 FPS auf einen lokalen NGINX‑RTMP‑Server. Dieser Beitrag zeigt alle Schritte – Hardware, Software, Config‑Files und jede Menge Hintergrundwissen – damit dein Heimüberwachungssystem komplett ohne Cloud auskommt.
1. Warum „Self‑Hosted“ statt Cloud?
- Datenschutz: Alle Aufnahmen bleiben im heimischen LAN.
- Performance: 1080p @ 30 FPS in Echtzeit – ohne Up‑ & Download‑Limit.
- Kosten: Keine Abo‑Modelle oder GB‑Gebühren.
- Bastel‑Faktor: Volle Kontrolle über das System und jede Schraube im Setup.
2. Hardware‑Setup
Komponente | Empfehlung | Kommentar |
---|---|---|
Pi Zero 2 W | Original‑Netzteil 5 V / 2,5 A | Unterspannung killt Audio‑Puffer (XRuns)! |
Kamera‑Modul | Raspberry Pi Camera Module 3 | Autofokus & HDR machen sich (manchmal) bezahlt. |
USB‑Mikrofon | Gutes UAC‑Class‑Compliant Gerät | 48 kHz / 16 Bit Stereo. |
Speicher | µSD Karte ≥ 32 GB U3 | Bessere Latenz beim lokalen Recording. |
Tipp: Wer mehr Reserven will, packt einen aktiven USB‑Hub mit externem 5 V Netzteil davor.
3. Software‑Stack
- Raspberry Pi OS (bookworm)
rpicam-vid
(Teil der neuenlibcamera
Toolchain)- FFmpeg 6.x-7.x (wegen stabilem V4L2 M2M und AAC‑Encoder)
- NGINX + RTMP‑Module (Eigen‑Kompilat oder Paketquelle „Debian Multimedia“)
- Motion zum lokalen Aufzeichnen von Events
- Systemd als Service‑Manager
4. Kernel‑ & GPU‑Tuning (/boot/config.txt
)
iniKopierenBearbeiten# ARM- und GPU-Settings – Pi Zero 2 W
arm_boost=1 # Dyn. OC auf 1 GHz
arm_freq=1000 # Statisch 1 GHz, nicht overclocked!
over_voltage=2 # +2 → ~1,312 V Core, leicht angehoben!
core_freq=450 # GPU‑Takt
sdram_freq=450 # DDR
temp_limit=80 # Throttle‑Grenze
Warum over_voltage=2
?
Das USB‑Mikro zieht im Peak bis zu 250 mA. Ohne leichte Spannungserhöhung droppt der Core‑PLL → ALSA Buffer laufen leer → XRuns → Rpicam-vid/FFmpeg verwirft Pakete → RTMP‑Server meldet „Corrupted FLV“.
5. Streaming‑Service (systemd)
/etc/systemd/system/stream.service
[Unit]
Description=Full HD Camera Stream to RTMP
After=network.target
[Service]
Type=simple
Nice=-19
ExecStart=/usr/local/bin/stream.sh
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now stream.service
6. Das Herzstück: stream.sh
#!/usr/bin/env bash
set -euo pipefail
# Full HD, low‑latency, libav‑Pipeline
nice -n -19 rpicam-vid -t 0 \
--width 1920 --height 1080 --framerate 30 \
--nopreview 1 --low-latency 1 --buffer-count 4 --flush 1 \
--exposure normal --sharpness 1.2 --contrast 1.2 \
--brightness 0.0 --saturation 1.0 --ev +1.1 --awb auto \
--profile high --level 4.2 \
--codec libav --libav-audio \
--audio-source alsa --audio-device plughw:0,0 \
--audio-channels 2 --audio-codec aac \
--audio-samplerate 48000 --audio-bitrate 128000 \
--libav-format flv \
--autofocus-mode manual --lens-position 0.8 \
--denoise auto --autofocus-window 0.25,0.25,0.5,0.5 \
--inline 1 -b 5000000 \
-o "rtmp://192.168.178.25/zero/test"
Parameter‑Highlights
Switch | Wirkung | Warum wichtig? |
---|---|---|
--buffer-count 4 | Minimiert Latenz | Weniger Frames im Puffer. |
--inline 1 | IDR‑Frame alle Sek. | Schneller Re‑Sync bei RTMP. |
--profile high --level 4.2 | H.264 Hi@L4.2 | Kompatibel & effizient. |
-b 5000000 | 5 Mbit/s | Genug für Details & Bewegung. |
--audio-bitrate 128000 | AAC 128 kbit/s | Solide Sprachqualität. |


7. Erfolgs‑Kontrolle
journalctl -u stream.service -f
[h264_v4l2m2m @ 0x557306fa60] Using device /dev/video11
Input #0, alsa, from 'plughw:0,0':
Stream #0:0: Audio: pcm_s16le, 48000 Hz, 2 channels
Output #0, flv, to 'rtmp://192.168.178.25/zero/test':
Stream #0:0: Video: h264 (High), 1920x1080, 30 fps
Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, 128 kb/s
Keine XRuns? Kein „Corrupted FLV“? → Setup ready!
8. NGINX‑RTMP‑Konfiguration (Ausschnitt)
nginxKopierenBearbeitenrtmp {
server {
listen 1935;
chunk_size 1024;
application zero {
live on;
record off; # Motion übernimmt das Recording
allow publish 192.168.178.0/24;
deny publish all;
allow play all;
}
}
}
bashKopierenBearbeitensudo nginx -t && sudo systemctl reload nginx
9. Motion: Nur speichern, wenn sich was bewegt
/etc/motion/motion.conf
iniKopierenBearbeitendaemon on
stream_port 0 # Kein MJPEG‑Stream nach außen
log_level 3
width 1920
height 1080
framerate 30
rtmp_url rtmp://127.0.0.1/zero/test
output_pictures off
ffmpeg_output_movies on
target_dir /srv/cam/2025-06-15
minimum_motion_frames 3
event_gap 60
10. Troubleshooting & Fine‑Tuning
Problem | Symptom | Fix |
---|---|---|
XRuns | Ruckler, Totalaussetzer | over_voltage=2 , besseres Netzteil |
Verzögerung > 3 s | Latenz spürbar | --low-latency 1 , chunk_size 512 im RTMP |
Dropped Frames bei Dämmerung | Blockartefakte | --exposure night oder --denoise cdn_off |
CPU 100 % | Thermal Throttle | Heatsink & arm_freq_min=200 für Idle‑Phasen |
11. Performance‑Messung
- CPU‑Last: 23 % avg (vc_sm, v4l2m2m entlastet ARM).
- RAM‑Verbrauch: <100 MB RSS (libcamera).
- Temperatur: 69 °C im Dauerbetrieb ohne Gehäuselüfter.
- Bandwidth: 5,16 Mbit/s konstant (gemessen via
ifstat
).
12. Sicherheit & Netzwerk
- LAN only: RTMP‑Port (1935) per Firewall auf internes Netz begrenzen.
- Nutzer‑Rechte:
rpicam-vid
in eigener Unix‑Gruppe, kein Root nötig. - TLS‑Offloading: Wer WAN‑Zugriff braucht, setzt vor NGINX einen Reverse‑Proxy mit LetsEncrypt‑Zert.
- Updates:
sudo unattended-upgrade
aktivieren, aber/boot
ausnehmen, damit OC‑Settings bleiben.
13. Fazit
- Pi Zero 2 W +
rpicam-vid
= budget‑freundliches 1080p‑Überwachungssystem. - Kein Vendor‑Lock‑In, keine Cloud, volle Hoheit über Bild‑ & Ton‑Daten.
- Das Setup funktioniert nach Tagen der Feinarbeit jetzt stabil rund um die Uhr – wichtig war vor allem die Kombination aus moderatem Over‑Voltage, sauberer AAC‑Pipeline und aggressivem Buffer‑Tuning.
14. Nächste Schritte
- Mehr Kameras? RTMP‑App pro Pi, zentral in obs‑ng ausgekoppelt.
- KI‑Motion‑Detection: Frigate oder TensorFlow‑Lite nachrüsten, spart Speicherplatz.
- Home‑Assistant Integration: Stream als Dashboard‑Card, MQTT‑Events bei Bewegung.
Viel Erfolg beim Nachbauen!
Fragen, Anregungen oder eigene Benchmarks? Ab damit in die Kommentare – ich freu mich auf eure Erfahrungen.