Playout engine · GStreamer · NVENC

Channels that stay on air
for months at a time.

Wavestream plays VOD files and live SRT feeds as one continuous transport stream. The next asset is already decoding before the current one ends, so switches land on the frame — no black, no rebuffer, no dropped connection.

CH-01 · MainOn air
Uptime412:07:33
Now playingep_0417_master.mkv
Cuedbumper_night.mp4
PTS synclocked
SCTE-35splice_insert · 04:12
Encodernvh265enc · 12 Mbps
Outputsrt://:9000

Live channel strip from the operator panel

Built onGStreamerNVIDIA NVENCSRTSCTE-35MPEG-TSFastAPIMongoDBDocker
Architecture

One process from ingest to transport

CoreEnginePro keeps decode, compositing, marker injection and encode inside a single GStreamer pipeline. Nothing is handed between processes, so the clock never drifts. Each channel runs as its own OS process, so one channel failing cannot take the others with it.

Input
VOD storage
H.264 / H.265 files
Live ingest
SRT / RTMP listener
Schedule
MongoDB playlist state
CoreEnginePro
Preroll decoderactive
Compositoroverlay
SCTE-35 injectorarmed
PTS synclocked
Output
SRT / RTMP
NVENC, AES encrypted
YouTube Live API
cuepoint triggers
Archive & as-run
segmented .ts + JSON
Workflow

Three steps to a running channel

01

Schedule

Upload VOD, point live SRT or RTMP inputs at the listener, then lay out the day in the drag-and-drop planner.

02

Process

The engine prerolls the next asset, burns in logos and lower thirds, and injects SCTE-35 at each break.

03

Deliver

Push SRT or RTMP to YouTube, Twitch or your CDN while the archive and the as-run log write in parallel.

Features

What the engine actually does

01

Seamless preroll

The next file starts decoding roughly a second before the current one ends, then both feeders resynchronise to a shared PTS. Switching is frame-accurate and audio never slides.

02

Format normalisation

Mixed source material is scaled with pillarboxing, rate-converted and resampled to 48 kHz stereo on the way in. A library in five different formats leaves as one uniform progressive stream.

03

NVENC acceleration

H.264 and H.265 encode on NVIDIA GPUs with spatial and temporal AQ and a strict GOP. No GPU in the rack? x264enc handles up to 1080p on CPU alone.

04

SCTE-35 injection

splice_insert written straight into MPEG-TS with 33-bit PTS wrapping, armed four seconds ahead of the break, plus a parallel YouTube Live API cuepoint so client-side ads fire at the same instant.

05

Frame-accurate graphics

Logos and lower thirds are composited live with full alpha. Overlay swaps ride a pad probe tied to the incoming PTS, so graphics change exactly on the cut, not somewhere near it.

06

Wall-clock hard starts

Any item can be pinned to a real clock time. The engine jumps to it when the moment arrives and fills the gap before it, so the news block at the top of the hour goes out at the top of the hour.

07

Manual holds

Flag an item to stop the automation there. The channel keeps its last frame on air until the operator releases it — useful when a live segment runs long.

08

Compliance archive

A parallel 512 kbps proxy is written as segmented .ts, cut on the full hour and timestamped in UTC. It is a record for compliance review, not a broadcast master, which keeps months of it affordable to store.

09

As-run log

Every item that reaches air is appended to a per-day JSON file with UUID, start time and original filename, written atomically and rotated at midnight UTC. That is the document you hand to an advertiser.

Failure modes

What happens when something breaks

Playout is judged on its worst hour, not its best. Every path below is handled without an operator touching anything.

YouTube or the CDN drops the connection

The output relay is a separate pipeline from the encoder. It tears down, then retries on a backoff schedule for up to five minutes and forces a keyframe on reconnect. The channel never stops encoding.

A scheduled file is missing or the decoder stalls

A slate is swapped in and audio is filled with silence. The socket stays open, so everything downstream sees a valid stream rather than a disconnect.

A live SRT feed gaps

The last valid frame is held for half a second before the slate appears, so brief network hiccups never reach the viewer.

The clock starts to drift

Both feeders compare their PTS against the pipeline running time every frame, hold a one-second buffer, and resynchronise with a discontinuity flag once drift passes 200 ms.

One channel crashes

Each channel is an isolated process with its own pipeline and decoders. The others carry on, and the supervisor restarts what died.

Web Studio

The whole operator panel runs in a browser

Monitor the machine, watch the output, manage the library and build schedules without an SSH session.

01 / 05

Dashboard and live preview

CPU, RAM, NVENC and network read live, per channel, so you see a box running hot before the stream does. A second encoder branch feeds an MPEG-TS preview over WebSocket, so you watch the actual output in the browser instead of pointing VLC at the stream.

Dashboard and live preview
02 / 05

Scheduling

Drag assets onto an EPG calendar and see the day fill up. Pin an item to a wall-clock time for fixed slots, or flag it to hold until an operator releases it. Gaps are visible before they go to air.

Scheduling
03 / 05

Graphics

Place logos and lower thirds visually and preview them at HD or 4K output size. Composites are cached per resolution and swapped on the frame, so changing a logo mid-schedule costs nothing on air.

Graphics
04 / 05

VOD library

Tag assets, search the catalogue, and generate thumbnails on the GPU instead of waiting on the CPU. Durations feed the scheduler directly, so the timeline reflects reality.

VOD library
05 / 05

Channels

Run several outputs at once, each in its own process. Drop a live source into a running playlist without cutting the broadcast, swap the whole schedule underneath a channel that is already on air, and read back the as-run log per day.

Channels
Use cases

Who runs it

FAST channels

Stand up an ad-supported channel, loop the library, and let scheduled SCTE-35 breaks monetise it on Pluto, Roku or YouTube. The as-run log settles the invoice.

Live event production

Take remote SRT feeds from the venue, add watermarks and lower thirds, cut commercial breaks, then redistribute to your CDN. Manual holds cover a segment that runs long.

Broadcasters

A cloud-native playout chain that runs as primary or as the backup that takes over when the main chain fails, with fixed-time slots for news and a compliance archive behind it.

24/7 esports and radio

Highlight loops, lofi radio and podcast video run for months on a modest box thanks to hardware encode and automatic recovery of the output.

Integration

Everything the panel does, your systems can do too

Web Studio is a client of the same REST API you get. Channels, schedules, graphics and archive retention are all addressable, so an existing traffic system or MAM can drive playout directly. The live preview is a WebSocket stream of MPEG-TS.

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
Specifications

Under the hood

Media
Muxingmpegtsmux alignment=7 / flvmux streamable=true
DecodeH.264, H.265 (nvh265dec), AAC, MP3, VOD and SRT live
Encodenvh264enc / nvh265enc (vbr-hq, spatial + temporal AQ), x264enc fallback
Normalisationvideoscale with pillarbox, videorate to target fps, 48 kHz stereo S16LE
Delivery
OutputSRT caller and listener with AES, RTMP
Recoverydecoupled relay, backoff retry to 300 s, forced keyframe on reconnect
Previewsecond encoder branch, 854x480, MPEG-TS over WebSocket
SyncPTS against pipeline running time, 1 s buffer, resync above 200 ms drift
Signalling and records
Ad signallingSCTE-35 splice_insert, armed 4 s ahead, YouTube Live API cuepoint
Archive512 kbps proxy, segmented .ts cut on the hour, UTC filenames, retention GC
As-runper-day JSON, UUID and original filename, atomic write, UTC rotation
Platform
StateMotor AsyncIO on MongoDB, JSON schedule export
ControlFastAPI REST, WebSocket preview
Process modelone isolated OS process per channel
Licensingper channel, online or fully offline with hardware binding
Deployment

Three ways to run it

Everything ships as Docker containers, so the engine lands wherever your media is allowed to live.

Managed

We run the engine on our GPU servers. You log into Web Studio and never think about hardware.

On-premise

Containers on your own bare metal. Media never leaves the facility network, and licensing has an offline mode bound to the machine, so an air-gapped installation stays legal and running.

Your cloud

AWS, GCP, Hetzner or OVH — we deploy into the account and billing you already have.

Questions

Before you ask

What hardware does it need?+

A Linux server with an NVIDIA GPU that supports NVENC. Without a GPU it still runs on CPU up to 1080p.

Can it run in the cloud?+

Yes — AWS, Google Cloud, and bare-metal providers like Hetzner or OVH, as long as the instance gives you GPU passthrough.

What happens if YouTube drops the connection?+

The output relay runs as a separate pipeline from the encoder, so a dropped destination never stalls the channel. It reconnects on a backoff schedule for up to five minutes and forces a keyframe when it comes back. If the destination stays down longer, the channel keeps encoding and you get the failure in the logs.

How does SCTE-35 work here?+

You place ad breaks in Web Studio. Four seconds before the break the engine writes splice_insert into the MPEG-TS output and, on YouTube channels, hits the Live API cuepoint at the same moment.

Can I send it a live SRT feed?+

Yes. The engine acts as an SRT listener, so OBS, vMix or a hardware encoder can push to it and the feed drops straight into a playlist — including into a playlist that is already on air.

Can my own systems drive it?+

Yes. Web Studio is a client of the same REST API you get, so a traffic system or MAM can create channels, swap schedules, trigger the next item and read the as-run log. The preview is a WebSocket stream.

Does it need an internet connection?+

Not for playout. Licensing has an offline mode bound to the machine, so an isolated facility can run without any outbound connection at all.

How is it licensed?+

Monthly or annual, priced per channel. Managed deployments also scale with the hardware you need, from CPU-only encode to dense NVENC boxes and large VOD archives.

Contact

Ask for a live channel,
not a slide deck.

Send us the shape of your channel — sources, hours, where it has to land — and we will run it in the operator panel while you watch.

LocationWarsaw, Poland
NIP7162785420
Book a demo
No cookies, no trackers

This site sets no cookies and loads no third-party analytics. Visit counts come from our own server logs. How we handle data.