Silnik playout · GStreamer · NVENC

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.

CH-01 · MainNa antenie
Uptime412:07:33
Terazep_0417_master.mkv
Następnybumper_night.mp4
PTS synclocked
SCTE-35splice_insert · 04:12
Enkodernvh265enc · 12 Mbps
Wyjściesrt://:9000

Pasek kanału z panelu operatorskiego

Zbudowane naGStreamerNVIDIA NVENCSRTSCTE-35MPEG-TSFastAPIMongoDBDocker
Architektura

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.

Wejście
Magazyn VOD
pliki H.264 / H.265
Wejście live
listener SRT / RTMP
Ramówka
stan playlisty w MongoDB
CoreEnginePro
Dekoder prerollactive
Kompozytoroverlay
Injector SCTE-35armed
PTS synclocked
Wyjście
SRT / RTMP
NVENC, szyfrowanie AES
YouTube Live API
wyzwalanie cuepointów
Archiwum i as-run
segmenty .ts + JSON
Jak to działa

Trzy kroki do działającego kanału

01

Zaplanuj

Wrzuć pliki VOD, wskaż wejścia SRT lub RTMP, a potem ułóż ramówkę w planerze metodą przeciągnij i upuść.

02

Przetwórz

Silnik prerolluje kolejny materiał, nakłada logo i belki, a w każdej przerwie wstawia znaczniki SCTE-35.

03

Wyemituj

Wypchnij SRT lub RTMP na YouTube, Twitcha albo własny CDN, a równolegle zapisuje się archiwum i log as-run.

Funkcje

Co silnik naprawdę robi

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

07

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.

08

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.

09

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.

Scenariusze awarii

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.

YouTube albo CDN zrywa połączenie

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ć.

Brakuje pliku albo dekoder się zacina

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.

Sygnał SRT na żywo się urywa

Ostatnia poprawna klatka trzymana jest przez pół sekundy, zanim pojawi się plansza, więc krótkie zadławienia sieci nie docierają do widza.

Zegar zaczyna uciekać

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.

Jeden kanał się wywala

Każdy kanał to odizolowany proces z własnym pipelinem i dekoderami. Pozostałe pracują dalej, a nadzorca podnosi to, co padło.

Web Studio

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.

01 / 05

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.

Pulpit i podgląd anteny
02 / 05

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ę.

Ramówka
03 / 05

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.

Grafika
04 / 05

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.

Biblioteka VOD
05 / 05

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.

Kanały
Zastosowania

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.

Integracja

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.

wavestream apiv1
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 preview
Specyfikacja

Co siedzi pod spodem

Media
Muxingmpegtsmux alignment=7 / flvmux streamable=true
DekodowanieH.264, H.265 (nvh265dec), AAC, MP3, VOD oraz SRT live
Enkodowanienvh264enc / nvh265enc (vbr-hq, AQ przestrzenne i czasowe), x264enc jako fallback
Normalizacjavideoscale z czarnymi pasami, videorate do docelowego fps, 48 kHz stereo S16LE
Dostarczanie
WyjścieSRT caller i listener z AES, RTMP
Wznawianieodsprzęgnięty relay, ponawianie do 300 s, wymuszona klatka kluczowa po powrocie
Podgląddruga gałąź enkodera, 854x480, MPEG-TS po WebSocket
SynchronizacjaPTS względem czasu pracy pipeline’u, bufor 1 s, resync powyżej 200 ms dryfu
Sygnalizacja i zapisy
Sygnalizacja reklamSCTE-35 splice_insert, uzbrajany 4 s wcześniej, cuepoint YouTube Live API
Archiwumproxy 512 kbps, segmenty .ts cięte na pełnych godzinach, nazwy w UTC, czyszczenie wg retencji
As-rundobowy JSON, UUID i oryginalna nazwa pliku, zapis atomowy, rotacja w UTC
Platforma
StanMotor AsyncIO na MongoDB, eksport ramówki do JSON
SterowanieREST w FastAPI, podgląd po WebSocket
Model procesówjeden odizolowany proces systemowy na kanał
Licencjonowanieza kanał, online albo w pełni offline z przypisaniem do sprzętu
Wdrożenie

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.

Pytania

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.

Kontakt

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.

LokalizacjaWarszawa, Polska
NIP7162785420
Umów demo
Bez ciasteczek, bez śledzenia

Ta strona nie zapisuje ciasteczek i nie ładuje zewnętrznej analityki. Liczbę wejść bierzemy z własnych logów serwera. Jak przetwarzamy dane.