Schemat ChurchStream: dwie kamery i opcjonalne audio trafiają do MediaMTX z planszą awaryjną i informacyjną, dalej restreamer wysyła obraz na YouTube, a player HLS daje kod iframe

Programowanie

ChurchStream: transmisje z kościoła na YouTube 24/7

System, który sam prowadzi całodobową transmisję z kamer w kościele na YouTube: przełącza kamery przy awarii, pokazuje planszę zamiast czarnego ekranu, wysyła SMS i codziennie zakłada nowe nagranie bez klikania w YouTube Studio.

25.10.2026

Wiele parafii i klasztorów transmituje Msze święte na YouTube. Zwykle wygląda to tak: komputer w zakrystii, OBS i ktoś, kto pamięta, żeby rano kliknąć „Rozpocznij transmisję”. Gdy kamera się zawiesi albo zniknie prąd, transmisja po prostu staje.

ChurchStream to system, który robi to sam. Kamery IP nadają na YouTube przez całą dobę, a serwer pilnuje, żeby transmisja trwała, nawet gdy coś po drodze się zepsuje.

Schemat ChurchStream: dwie kamery i opcjonalne audio trafiają do MediaMTX z planszą awaryjną i informacyjną, dalej restreamer wysyła obraz na YouTube, a player HLS daje kod iframe
Jak obraz z kamer trafia na YouTube

Jak to działa

Obraz z dwóch kamer RTSP trafia najpierw do lokalnego serwera mediów MediaMTX. Jest w nim specjalna ścieżka „active”, która wskazuje bieżące źródło: kamerę pierwszą, drugą, planszę awaryjną albo informacyjną.

Osobny kontener z FFmpeg wysyła tę jedną ścieżkę na YouTube. Dzięki temu przełączenie kamery nie przerywa połączenia z YouTube. Widz po prostu widzi inny obraz.

Gdy kamera zgaśnie

  • watchdog co chwilę sprawdza kamery i strumień,
  • gdy kamera przestaje odpowiadać, ruch przełącza się na drugą,
  • gdy padną obie, widzowie widzą planszę awaryjną zamiast czarnego ekranu,
  • administrator dostaje SMS z własnej bramki GSM, bez płatnych bramek internetowych,
  • po powrocie kamery tryb automatyczny sam wraca do obrazu na żywo.

YouTube bez klikania

Najbardziej uciążliwa rzecz w transmisjach 24/7 to sam YouTube. Dane wysyłane na stały klucz docierają poprawnie, ale nie tworzą widocznej transmisji. Ktoś musi wejść do YouTube Studio i ją uruchomić.

ChurchStream robi to przez YouTube Data API:

  • sam tworzy transmisję, wiąże ją ze stałym kluczem i ustawia automatyczny start,
  • codziennie w nocy zamyka bieżącą transmisję i otwiera nową, więc jeden dzień to jedno nagranie,
  • nagrania trafiają do playlist miesięcznych, więc łatwo znaleźć Mszę z konkretnego dnia,
  • porządkuje nieużywane klucze i stare nagrania, zawsze z ręcznym potwierdzeniem,
  • pilnuje dziennego limitu zapytań API, żeby porządki nie zablokowały codziennej pracy.
Panel ChurchStream z rozmytym podglądem dwóch kamer, kodami iframe do osadzenia i planszą Trwają prace konserwacyjne
Panel: podgląd kamer (rozmyty) i kody do osadzenia na stronie

Panel dla parafii

Całość obsługuje się z prostego panelu w przeglądarce. Osoba z parafii nie musi wiedzieć, czym jest RTSP ani RTMP:

  • przełączanie źródła jednym kliknięciem: kamera 1, kamera 2, plansza albo tryb automatyczny,
  • start i stop transmisji na YouTube,
  • podmiana planszy awaryjnej i informacyjnej przez przeciągnięcie pliku,
  • pasek z przewijanymi napisami, na przykład z ogłoszeniem, i znak wodny w rogu,
  • gotowe kody iframe do wstawienia playera na stronę parafii,
  • test wysyłki SMS.
Panel ChurchStream: zarządzanie planszami, pasek z napisami, znak wodny i przycisk testu SMS
Plansze, napisy i znak wodny ustawiane z panelu

Wdrożenia

Pierwsza instalacja działa w Klasztorze Sióstr Klarysek w Starym Sączu, a transmisja jest osadzona na ich nowej stronie. Druga transmituje z Parafii św. Rocha w Nowym Sączu. Poprawki, które wyszły przy drugim wdrożeniu, wróciły do pierwszego.

Repozytorium jest szablonem dla kolejnych parafii. Spisałem runbook nowego wdrożenia krok po kroku: każda parafia dostaje osobny serwer, osobny kanał YouTube i osobny projekt Google Cloud, bez współdzielenia kluczy.

Transmisję Mszy ogląda ktoś, kto nie może przyjść do kościoła: chory, starszy, za granicą. Dla tej osoby czarny ekran o 7 rano to nie jest drobna awaria.

- Aleksander Kowal

Stack

  • MediaMTX jako serwer mediów i źródło HLS dla playera,
  • FFmpeg do restreamingu i generowania plansz,
  • kontroler w Pythonie na FastAPI: watchdog, YouTube Data API, API panelu,
  • nginx z panelem i playerem,
  • Docker Compose, alerty przez własną bramkę SMS.