Kanał, który zostaje na antenie
przez wiele miesięcy.
Wavestream składa pliki VOD i strumienie SRT w jeden ciągły transport stream. Kolejny materiał dekoduje się, zanim skończy się poprzedni, więc przejście wypada co do klatki — bez czarnej planszy, bez przebufferowania, bez zerwanego połączenia.
Pasek kanału z panelu operatorskiego
Jeden proces od ingestu do transportu
CoreEnginePro trzyma dekodowanie, kompozycję, wstawianie znaczników i enkodowanie w jednym pipelinie GStreamera. Nic nie jest przekazywane między procesami, więc zegar nie ucieka. Każdy kanał działa jako osobny proces systemowy, więc awaria jednego nie pociąga za sobą pozostałych.
Trzy kroki do działającego kanału
Zaplanuj
Wrzuć pliki VOD, wskaż wejścia SRT lub RTMP, a potem ułóż ramówkę w planerze metodą przeciągnij i upuść.
Przetwórz
Silnik prerolluje kolejny materiał, nakłada logo i belki, a w każdej przerwie wstawia znaczniki SCTE-35.
Wyemituj
Wypchnij SRT lub RTMP na YouTube, Twitcha albo własny CDN, a równolegle zapisuje się archiwum i log as-run.
Co silnik naprawdę robi
Preroll bez szwu
Kolejny plik zaczyna się dekodować mniej więcej sekundę przed końcem poprzedniego, a oba feedery synchronizują się do wspólnego PTS. Przejście wypada co do klatki, a dźwięk nie ucieka.
Normalizacja materiału
Różnorodne źródła są skalowane z dodaniem czarnych pasów, konwertowane do docelowego fps i przepróbkowane do 48 kHz stereo. Biblioteka w pięciu formatach wychodzi jako jeden jednolity strumień progresywny.
Akceleracja NVENC
H.264 i H.265 kodowane na GPU NVIDIA z AQ przestrzennym i czasowym oraz sztywnym GOP. Nie masz karty w serwerze? x264enc wyrobi się na CPU do 1080p.
Wstawianie SCTE-35
splice_insert trafia prosto do MPEG-TS, z poprawnym zawijaniem 33-bitowego PTS, uzbrajany cztery sekundy przed przerwą, a równolegle idzie cuepoint do YouTube Live API, żeby reklama odpaliła w tej samej chwili.
Grafika co do klatki
Logo i belki komponowane w locie, z pełną alfą. Podmiana nakładki jedzie na sondzie pada powiązanej z PTS wchodzącego materiału, więc grafika zmienia się dokładnie na cięciu, a nie gdzieś w okolicy.
Twarde starty zegarowe
Dowolną pozycję można przypiąć do czasu ściennego. Silnik przeskakuje do niej w oznaczonym momencie i wypełnia lukę przed nią, więc blok informacyjny o pełnej godzinie wychodzi o pełnej godzinie.
Ręczne wstrzymanie
Oznacz pozycję, żeby automatyka się na niej zatrzymała. Kanał trzyma ostatnią klatkę na antenie, dopóki operator nie zwolni — przydatne, gdy wejście na żywo się przeciąga.
Archiwum kontrolne
Równolegle zapisywane jest proxy 512 kbps w segmentach .ts, ciętych na pełnych godzinach, z nazwami w UTC. To zapis do kontroli emisji, nie master emisyjny — dzięki temu trzymanie kilku miesięcy nie rujnuje budżetu na dyski.
Log as-run
Każda pozycja, która weszła na antenę, trafia do dobowego pliku JSON z UUID, czasem startu i oryginalną nazwą pliku, zapisywanego atomowo i rotowanego o północy UTC. To jest dokument, który pokazujesz reklamodawcy.
Co się dzieje, kiedy coś padnie
Playout ocenia się po najgorszej godzinie, nie po najlepszej. Każdą z poniższych sytuacji silnik obsługuje bez udziału operatora.
Relay wyjściowy to pipeline odsprzęgnięty od enkodera. Rozbiera się, a potem ponawia próby według rosnących odstępów przez pięć minut i wymusza klatkę kluczową po powrocie. Kanał ani na moment nie przestaje kodować.
Wchodzi plansza, a dźwięk wypełniany jest ciszą. Gniazdo pozostaje otwarte, więc wszystko poniżej widzi poprawny strumień, a nie rozłączenie.
Ostatnia poprawna klatka trzymana jest przez pół sekundy, zanim pojawi się plansza, więc krótkie zadławienia sieci nie docierają do widza.
Oba feedery porównują swój PTS z czasem pracy pipeline’u przy każdej klatce, trzymają sekundowy bufor i resynchronizują się z flagą nieciągłości, gdy dryf przekroczy 200 ms.
Każdy kanał to odizolowany proces z własnym pipelinem i dekoderami. Pozostałe pracują dalej, a nadzorca podnosi to, co padło.
Cały panel operatorski działa w przeglądarce
Podglądasz maszynę, oglądasz antenę, zarządzasz biblioteką i układasz ramówkę bez sesji SSH.
Pulpit i podgląd anteny
CPU, RAM, NVENC i sieć na żywo, osobno dla każdego kanału — widzisz grzejącą się maszynę, zanim zobaczy ją widz. Druga gałąź enkodera podaje podgląd MPEG-TS przez WebSocket, więc oglądasz faktyczne wyjście w przeglądarce zamiast celować w strumień VLC-em.

Ramówka
Przeciągasz materiały na kalendarz EPG i widzisz, jak wypełnia się doba. Pozycję można przypiąć do czasu ściennego dla stałych pasm albo oznaczyć, żeby czekała na decyzję operatora. Dziury widać, zanim wejdą na antenę.

Grafika
Ustawiasz logo i belki wizualnie, z podglądem w rozdzielczości wyjściowej HD albo 4K. Kompozyty są cache’owane per rozdzielczość i podmieniane na klatce, więc zmiana logo w trakcie ramówki nic nie kosztuje na antenie.

Biblioteka VOD
Tagujesz materiały, przeszukujesz katalog i generujesz miniatury na GPU zamiast czekać na procesor. Czasy trwania idą prosto do plannera, więc oś czasu odpowiada rzeczywistości.

Kanały
Prowadzisz kilka wyjść naraz, każde w osobnym procesie. Wrzucasz źródło live do działającej playlisty bez przerywania emisji, podmieniasz całą ramówkę pod kanałem, który jest już na antenie, i odczytujesz dobowy log as-run.

Kto na tym pracuje
Kanały FAST
Uruchom kanał utrzymywany z reklam, zapętl bibliotekę i zarabiaj na zaplanowanych przerwach SCTE-35 na Pluto, Roku czy YouTube. Log as-run rozlicza fakturę.
Realizacja wydarzeń
Odbierz zdalne SRT z obiektu, dołóż znak wodny i belki, wytnij bloki reklamowe i wypuść sygnał dalej na swój CDN. Ręczne wstrzymanie ratuje wejście, które się przeciąga.
Nadawcy telewizyjni
Łańcuch playout w chmurze, który pracuje jako główny albo jako rezerwa przejmująca emisję, ze stałymi pasmami dla informacji i archiwum kontrolnym z tyłu.
Esport i radio 24/7
Pętle z highlightami, lofi radio i wideopodcasty chodzą miesiącami na skromnej maszynie dzięki enkodowaniu sprzętowemu i automatycznemu wznawianiu wyjścia.
Wszystko, co robi panel, mogą robić Twoje systemy
Web Studio jest klientem tego samego REST API, które dostajesz. Kanały, ramówki, grafika i retencja archiwum są adresowalne, więc istniejący system traffic albo MAM może sterować playoutem bezpośrednio. Podgląd anteny to strumień MPEG-TS po WebSocket.
POST /channels create a channel
POST /channels/{id}/start go on air
PUT /channels/{id}/playlist swap the schedule while running
POST /channels/{id}/next release a manually held item
POST /channels/{id}/loop/{state} toggle looping
PATCH /channels/{id}/archive/retention set retention window
WS /channels/{id}/preview/ws live MPEG-TS previewCo siedzi pod spodem
| Muxing | mpegtsmux alignment=7 / flvmux streamable=true |
|---|---|
| Dekodowanie | H.264, H.265 (nvh265dec), AAC, MP3, VOD oraz SRT live |
| Enkodowanie | nvh264enc / nvh265enc (vbr-hq, AQ przestrzenne i czasowe), x264enc jako fallback |
| Normalizacja | videoscale z czarnymi pasami, videorate do docelowego fps, 48 kHz stereo S16LE |
| Wyjście | SRT caller i listener z AES, RTMP |
|---|---|
| Wznawianie | odsprzęgnięty relay, ponawianie do 300 s, wymuszona klatka kluczowa po powrocie |
| Podgląd | druga gałąź enkodera, 854x480, MPEG-TS po WebSocket |
| Synchronizacja | PTS względem czasu pracy pipeline’u, bufor 1 s, resync powyżej 200 ms dryfu |
| Sygnalizacja reklam | SCTE-35 splice_insert, uzbrajany 4 s wcześniej, cuepoint YouTube Live API |
|---|---|
| Archiwum | proxy 512 kbps, segmenty .ts cięte na pełnych godzinach, nazwy w UTC, czyszczenie wg retencji |
| As-run | dobowy JSON, UUID i oryginalna nazwa pliku, zapis atomowy, rotacja w UTC |
| Stan | Motor AsyncIO na MongoDB, eksport ramówki do JSON |
|---|---|
| Sterowanie | REST w FastAPI, podgląd po WebSocket |
| Model procesów | jeden odizolowany proces systemowy na kanał |
| Licencjonowanie | za kanał, online albo w pełni offline z przypisaniem do sprzętu |
Trzy sposoby na uruchomienie
Wszystko jedzie w kontenerach Dockera, więc silnik ląduje tam, gdzie Twoje materiały mogą leżeć.
Hosting u nas
Silnik chodzi na naszych serwerach z GPU. Logujesz się do Web Studio i nie myślisz o sprzęcie.
On-premise
Kontenery na Twoim własnym sprzęcie. Materiały nie opuszczają sieci obiektu, a licencja ma tryb offline przypisany do maszyny, więc instalacja odcięta od internetu działa legalnie i bez przerw.
Twoja chmura
AWS, GCP, Hetzner albo OVH — wdrażamy w koncie i na rozliczeniu, które już masz.
Zanim zapytasz
Jakiego sprzętu to wymaga?+
Serwera z Linuksem i kartą NVIDIA obsługującą NVENC. Bez GPU system nadal działa na CPU do 1080p.
Czy zadziała w chmurze?+
Tak — AWS, Google Cloud oraz dostawcy bare-metal jak Hetzner czy OVH, o ile instancja daje przypisanie GPU.
Co się dzieje, gdy YouTube zerwie połączenie?+
Relay wyjściowy działa jako pipeline odsprzęgnięty od enkodera, więc padnięcie celu nigdy nie zatrzymuje kanału. Wznawia połączenie według rosnących odstępów przez pięć minut i wymusza klatkę kluczową po powrocie. Jeśli cel nie wraca dłużej, kanał dalej koduje, a awarię widzisz w logach.
Jak działa tu SCTE-35?+
Bloki reklamowe ustawiasz w Web Studio. Cztery sekundy przed przerwą silnik zapisuje splice_insert w wyjściu MPEG-TS, a na kanałach YouTube w tej samej chwili wysyła cuepoint przez Live API.
Czy mogę wysłać do niego SRT na żywo?+
Tak. Silnik działa jako listener SRT, więc OBS, vMix albo enkoder sprzętowy mogą do niego pushować, a sygnał wchodzi wprost do playlisty — również takiej, która jest już na antenie.
Czy moje systemy mogą nim sterować?+
Tak. Web Studio jest klientem tego samego REST API, które dostajesz, więc system traffic albo MAM może zakładać kanały, podmieniać ramówki, wyzwalać kolejną pozycję i odczytywać log as-run. Podgląd to strumień po WebSocket.
Czy potrzebuje połączenia z internetem?+
Do emisji nie. Licencja ma tryb offline przypisany do maszyny, więc odcięty obiekt może pracować bez żadnego połączenia na zewnątrz.
Jak wygląda licencjonowanie?+
Abonament miesięczny albo roczny, rozliczany za kanał. Przy hostingu u nas koszt skaluje się dodatkowo ze sprzętem — od enkodowania na CPU po gęste maszyny z NVENC i duże archiwa VOD.
Poproś o działający kanał,
nie o prezentację.
Napisz, jak ma wyglądać Twój kanał — źródła, godziny, gdzie ma trafiać sygnał — a uruchomimy go w panelu operatorskim na Twoich oczach.