← cała baza wiedzy
ubuntowany@home:~$ whoami kamera CSI, jeden serwis systemd, obraz w Home Assistant. bez pipe'owania ffmpeg na piechotę.
Kamera Raspberry Pi jako strumień RTSP w Home Assistant

Kamera CSI na Raspberry Pi, MediaMTX jako serwer RTSP i podłączenie obrazu do Home Assistant. Całość działa automatycznie po starcie systemu. Metoda opisana tu jest prostsza niż w wielu starszych poradnikach — MediaMTX potrafi dziś przechwytywać obraz z kamery natywnie, bez osobnego procesu ffmpeg po drodze.

Raspberry Pi OS Bookworm+ MediaMTX Home Assistant poziom: podstawowy
wymagania

Co musisz mieć

elementuwagi
Raspberry Pi z Raspberry Pi OSBullseye lub nowszy; ten przewodnik zakłada Bookworm (aktualne nazwy komend)
Kamera CSI (np. OV5647, Camera Module v1/v2/v3)podłączona do złącza CSI, wykrywana przez system
Home Assistant w tej samej sieciobraz trafi tam jako kamera przez RTSP
Połączenie SSH z Raspberry Picała konfiguracja robiona zdalnie, bez monitora

Sprawdzenie kamery

Upewnij się, że kamera jest poprawnie podłączona i wykrywana. Od Raspberry Pi OS Bookworm narzędzia libcamera-* nazywają się rpicam-* (stare nazwy wciąż działają jako dowiązania symboliczne, ale są przestarzałe — warto od razu przyzwyczaić się do nowych):

$ rpicam-hello -t 0 # na starszym Bullseye: libcamera-hello -t 0

Jeśli widzisz podgląd (w oknie na pulpicie albo w logu bez błędów), kamera działa poprawnie.

rtsp

MediaMTX metoda zalecana

MediaMTX (dawniej rtsp-simple-server) to lekki serwer RTSP/RTMP/HLS/WebRTC. Ma wbudowaną, natywną obsługę kamery Raspberry Pi — nie trzeba osobno uruchamiać rpicam-vid i przepychać obrazu przez ffmpeg. Wystarczy jeden serwis.

1. Pobierz najnowszą wersję

Projekt żyje na GitHubie jako bluenviron/mediamtx — nie z linków-mirrorów, które łatwo się dezaktualizują. Poniższy fragment sam dociąga aktualny numer wydania:

$ uname -m # aarch64 = 64-bit -> arm64, armv7l = 32-bit -> armv7
$ ARCH=arm64 # podmień na armv7 jeśli masz 32-bit OS
$ VER=$(curl -s https://api.github.com/repos/bluenviron/mediamtx/releases/latest | grep -oP '"tag_name": "\K[^"]+')
$ wget https://github.com/bluenviron/mediamtx/releases/download/$VER/mediamtx_${VER}_linux_${ARCH}.tar.gz
$ tar -xvzf mediamtx_${VER}_linux_${ARCH}.tar.gz
$ sudo mv mediamtx /usr/local/bin/
$ mv mediamtx.yml ~/mediamtx.yml

2. Konfiguracja — źródło natywne rpiCamera

Edytuj ~/mediamtx.yml i w sekcji paths dodaj ścieżkę ze źródłem rpiCamera. To ono każe MediaMTX samemu otworzyć kamerę przez libcamera — bez pośredników:

paths:
cam:
source: rpiCamera
rpiCameraWidth: 640
rpiCameraHeight: 480
rpiCameraFPS: 30
rpiCameraBitrate: 1000000 # bity/s

Wymagania: Raspberry Pi OS Bullseye lub nowszy, pakiet libcamera0 w wersji co najmniej 0.0.2 (na aktualnym Bookworm jest to spełnione domyślnie). Działa zarówno na systemie 32-, jak i 64-bitowym.

3. Serwis systemd

Jeden serwis wystarczy — MediaMTX sam zarządza kamerą, więc nie potrzeba drugiej usługi do przechwytywania obrazu:

$ sudo nano /etc/systemd/system/mediamtx.service
[Unit]
Description=MediaMTX RTSP Server
After=network.target
[Service]
ExecStart=/usr/local/bin/mediamtx /home/pi/mediamtx.yml
WorkingDirectory=/home/pi
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now mediamtx

Strumień jest teraz dostępny pod rtsp://<IP-Raspberry-Pi>:8554/cam — sprawdź w VLC (Media → Otwórz strumień sieciowy) zanim przejdziesz do Home Assistant.

alternatywa

Ręczny pipeline gdy potrzebujesz więcej kontroli

Jeśli natywne źródło rpiCamera z jakiegoś powodu nie wystarcza (np. własny kodek, dodatkowe filtry wideo, albo MediaMTX działa na innej maszynie niż kamera), można spiąć rpicam-vid z MediaMTX ręcznie przez drugi serwis. To starsza, bardziej złożona metoda — zostaw ją na wypadek, gdy metoda natywna faktycznie nie pasuje.

W mediamtx.yml ścieżka przyjmuje wtedy dowolnego publishera:

paths:
cam:
source: publisher
$ sudo nano /etc/systemd/system/camera-stream.service
[Unit]
Description=Camera Stream to MediaMTX
After=mediamtx.service
[Service]
ExecStart=/bin/bash -c 'rpicam-vid -t 0 --width 640 --height 480 --framerate 30 --inline -o - | ffmpeg -f h264 -i - -c copy -f rtsp rtsp://127.0.0.1:8554/cam'
Restart=always
User=pi
[Install]
WantedBy=multi-user.target

Uwaga: komenda bazowa to dziś rpicam-vid, nie libcamera-vid — ta druga jest na Bookworm przestarzała (choć wciąż działa jako alias).

integracja

Podłączenie do Home Assistant

Zalecana dziś droga to integracja Generic Camera skonfigurowana z poziomu UI — nie wymaga edycji YAML.

  • 01

    Ustawienia → Urządzenia i usługi → Dodaj integrację → „Kamera ogólna" (Generic Camera). W polu Stream Source URL wpisz rtsp://<IP-Raspberry-Pi>:8554/cam. Pole „Still Image URL" możesz zostawić puste — Home Assistant wyciągnie klatkę ze strumienia, o ile masz włączoną integrację stream (domyślnie jest).

  • 02

    Metoda YAML wciąż działa, jeśli już jej używasz. Platforma camera.ffmpeg nie została formalnie wycofana, ale to starszy, mniej wygodny sposób — nowe instalacje warto od razu robić przez UI:

  • ffmpeg:
    camera:
    - platform: ffmpeg
    name: Kamera Pi
    input: rtsp://<IP-Raspberry-Pi>:8554/cam

    Po dodaniu integracji kamera pojawi się jako encja camera.kamera_pi (lub podobna, wg wybranej nazwy) — możesz dodać ją do dashboardu jako kartę typu „Kamera" lub „Obraz".

    rozszerzenie

    Tryb nocny (opcjonalnie)

    Aby poprawić widoczność w nocy, potrzebujesz kamery NoIR (bez filtra podczerwieni) i diod IR LED (850 nm) skierowanych na obserwowany obszar.

    Ekspozycję i wzmocnienie ustawisz bezpośrednio w mediamtx.yml przy metodzie natywnej:

    rpiCameraShutter: 20000 # mikrosekundy
    rpiCameraGain: 8

    Przy metodzie ręcznej to te same wartości podane jako flagi --shutter 20000 --gain 8 dopisane do komendy rpicam-vid w usłudze camera-stream.service.

    przejrzystość

    Co poprawiłem względem pierwszej wersji notatek

    Ten artykuł zaczynał się jako prywatna notatka. Przed publikacją zweryfikowałem go źródłowo i poprawiłem kilka rzeczy, które w oryginale były już nieaktualne lub niepotrzebnie skomplikowane.

    sprostowania źródła
    • Nazwy komend: libcamera-vid/libcamera-hello zastąpiono aktualnymi rpicam-vid/rpicam-hello — zmiana nazewnictwa nastąpiła wraz z Raspberry Pi OS Bookworm.
    • Źródło pobrania MediaMTX: zamiast linku do mirrora na SourceForge (nieoficjalne, łatwo się dezaktualizuje) — oficjalne wydania z GitHuba, pobierane automatycznie w najnowszej wersji.
    • Uproszczenie architektury: zamiast dwóch serwisów systemd (MediaMTX + osobny rpicam-vid pipe'owany przez ffmpeg) — jeden serwis, dzięki natywnej obsłudze kamery w MediaMTX (źródło rpiCamera). Metodę ręczną zostawiłem jako opcję dla przypadków, gdzie natywna nie wystarcza.
    • Integracja z Home Assistant: dodano zalecaną dziś metodę przez UI (Generic Camera) zamiast wyłącznie starszej konfiguracji YAML platform: ffmpeg, która wciąż działa, ale nie jest już domyślną drogą.

    Źródła