Kamera na ESP32 z ESPHome przesyłała dotąd obraz do Home Assistanta przez natywne API albo przez komponent esp32_camera_web_server. Nowy komponent rtsp_server dodaje protokół, który odtwarzacze wideo i rejestratory obsługują od dawna. Christian (max246) zgłosił zmiany 31 lipca 2026, opierając się na wcześniejszym zgłoszeniu (#1905), a 17 października o 19:18 czasu polskiego bdraco scalił je do gałęzi rozwojowej. Dokumentację (esphome.io #7082) scalono minutę wcześniej, więc komponent trafi do ESPHome 2026.11.

Jak to działa

Serwer wysyła obraz w formacie Motion JPEG, który sprzęt kamery i tak wytwarza, w pakietach RTP przesyłanych wewnątrz połączenia TCP protokołu RTSP. Jeśli klient poprosi o UDP, dostanie odpowiedź „461 Unsupported Transport” i sam przełączy się na TCP. VLC, ffplay i popularne rejestratory robią to bez udziału użytkownika. Strumień jest pod adresem rtsp://<adres-ip-urządzenia>:554/. Kamera nadaje obraz tylko wtedy, gdy co najmniej jeden klient go odtwarza.

Konfiguracja jest krótka:

rtsp_server:
  port: 554
  max_connections: 2

max_connections przyjmuje wartości od 1 do 4, a każde połączenie rezerwuje na stałe około 900 bajtów pamięci i jedno gniazdo sieciowe. Komponent esp32_camera musi dostarczać JPEG, od razu albo po konwersji ustawionej opcją jpeg_quality. Konfiguracji z GRAYSCALE ESPHome nie przyjmie, podobnie jak rozdzielczości powyżej 2040 pikseli na bok. Jeśli klient przez pół sekundy nie odbiera danych, traci bieżącą klatkę, więc jeden wolny odbiorca nie zatrzyma kamery pozostałym.

Liczba klatek zależy od buforów sieciowych

Klatka 640x480 zajmuje od 6 do 19 KB, a lwIP domyślnie kolejkuje na jedno połączenie TCP tylko 5,7 KB. Przy takim buforze klient w sieci Wi-Fi dostawał około 1 klatki na sekundę. Dlatego komponent włącza w ESPHome ustawienia sieci o podwyższonej wydajności. W tym samym teście klient w sieci Wi-Fi odbierał wtedy około 5 klatek na sekundę, a klient po Ethernecie pełne 10 klatek, czyli tyle, ile daje kamera. Pomiary zrobiono na płytce Waveshare ESP32-S3-ETH z czujnikiem OV5640 przy 640x480. Większe bufory zajmują pamięć, więc na płytce, której jej brakuje, można je wyłączyć opcją network: enable_high_performance: false.

Bez hasła i nie dla Home Assistanta

Dokumentacja nie owija w bawełnę: połączenie to zwykłe TCP, bez szyfrowania i bez uwierzytelniania. Opcja allowed_ips ogranicza listę adresów albo sieci IPv4, z których można się połączyć, ale sprawdza tylko adres, a nie tożsamość odbiorcy. Bez niej obraz zobaczy każdy, kto dosięgnie portu, dlatego komponent nadaje się tylko do zaufanej sieci.

Użytkownicy Home Assistanta go nie potrzebują. Encja kamery i tak przesyła obraz przez natywne API, a integracja Generic Camera nie odtworzy tego strumienia, bo moduł strumieniowania w Home Assistancie odtwarza tylko H.264 i HEVC. Serwer jest przeznaczony dla innych programów: Frigate, go2rtc, ZoneMindera, Blue Iris albo zwykłego odtwarzacza wideo.