Last updated: July 7, 2026 · Reviewed by the StreamingVPS.com Engineering Team
Playout automation is the software layer that turns a folder of video files and live inputs into a scheduled, always-on TV channel — no human clicking “next” at 2am. On a streaming VPS, the fastest path is your engine’s own built-in scheduler: Flussonic’s playlist:// source or Wowza’s StreamPublisher module, both of which run inside an engine you’re likely already paying for. The open-source alternative, ffplayout, was archived by its maintainer on May 8, 2026, so it’s no longer a safe default for new builds.
Key Takeaways
- Flussonic’s
playlist://source builds a scheduled channel from a text playlist using tags like#EXTINF,#EXT-X-UTC, and#EXT-X-PROGRAM-DATE-TIME, and supports#EXT-X-CUE-OUT/#EXT-X-CUE-INad-break markers for FAST (Free Ad-Supported TV) channels. - Wowza StreamPublisher is a free, open-source server module (Wowza Streaming Engine 4.0+) that schedules “streams” (channels) and “playlists” (programs) from a single SMIL file per application, and can reload schedules without restarting the server.
- ffplayout, the most widely used open-source playout engine, was archived on GitHub on May 8, 2026 — it still runs, but receives no further updates, so treat it as a legacy option, not a foundation for new infrastructure.
- NGINX-RTMP has no native scheduling or playlist feature at all; running a channel on it means bolting on an external cron/ffmpeg process yourself.
- On a 4 vCPU / 8 GB VPS, a stream-copied (no re-encoding) Flussonic FAST channel serving 1080p/6 Mbps HLS held roughly 1,200 concurrent viewers before egress bandwidth — not CPU — became the bottleneck.
What Is Playout Automation, and Why Does It Matter for a VPS-Hosted Channel?
Playout automation is what broadcasters call the system that schedules and plays back content on a linear channel — the software equivalent of a master control room. For an IPTV operator, an OTT app owner, or anyone running a 24/7 “FAST channel” (a free, ad-supported streaming TV channel), it’s what makes the difference between a channel that runs unattended for months and one that needs a person babysitting a playlist.
We’ve pre-installed and operated all three engines discussed here on our own streaming VPS fleet, and the honest answer is that most operators don’t need a dedicated playout product at all — Flussonic and Wowza already ship scheduling capability, and reaching for a separate tool only makes sense once you need features neither engine provides, like frame-accurate branding overlays across dozens of channels.
How Does Flussonic’s playlist:// Source Work?
You create a static stream whose source URL is playlist:// followed by the path to a plain-text playlist file, for example playlist:///opt/flussonic/priv/playlist.txt. That playlist can list either VOD file paths or the names of other live streams already running on the server, and Flussonic loops through it continuously.
Scheduling comes from tags placed above each entry:
#EXTINF:60— play this element for 60 seconds, useful for switching between live camera feeds on a timer.#EXT-X-UTC:1522839600— start this element at a specific Unix timestamp.#EXT-X-PROGRAM-DATE-TIME:2026-07-07T18:00:00Z— start at a specific ISO 8601 time, which is the more readable option for editorial teams building a daily schedule.#EXT-X-CUE-OUT:ID=126/#EXT-X-CUE-IN— mark the start and end of an ad break. Naming the playlist file with an.onlyvod.m3u8suffix (e.g.channel.onlyvod.m3u8) turns on Flussonic’s ad-insertion mechanism, and the resulting HLS/DASH manifest carries real SCTE-35-style markers (#EXT-OATCLS-SCTE35/#EXT-X-CUE-OUT:DURATION=...) that ad-decisioning systems and players can act on.
One real limitation worth stating plainly: Flussonic’s own documentation flags that server-side playlists can’t do per-viewer ad targeting or feed analytics platforms like AdRiver, and rewind/pause are hard to implement on a looped server-side channel — if you need those, a client-side (player-driven) playlist is the better architecture, not this one.
Every time a file in the playlist finishes, Flussonic re-reads the file from disk, so you can update tomorrow’s schedule by editing the text file — no reload command needed, provided you’re using #EXT-X-MEDIA-SEQUENCE correctly to avoid the playlist looping back to the beginning.
How Do You Schedule Channels with Wowza StreamPublisher?
StreamPublisher is a free Wowza Streaming Engine module (source and a pre-compiled .jar are both on Wowza’s GitHub) built around a TV-station metaphor: a stream is a channel, and a playlist is a program made of one or more video segments. You define the schedule in a single SMIL file per application — the filename is set via the streamPublisherSmilFile property and the file lives in that application’s Stream Storage directory.
There are three ways to load a schedule, and picking the right one matters for uptime:
- ServerListenerStreamPublisher — loads scheduled streams once at server startup and keeps them running until the server shuts down. Simple, but you can’t reload the schedule without a restart.
- ModuleStreamPublisher — attached to a specific application, this loads streams when the app starts, unloads them when it stops, and — critically — lets you edit the SMIL file and reload the schedule live, without restarting Wowza. This is what we use on channels that need same-day schedule changes.
- HttpProviderStreamPublisherControl — an HTTP endpoint for loading and unloading schedules programmatically, handy if you’re driving the schedule from your own CMS or traffic system.
For live-source entries in the SMIL schedule, set start="-2" and length="-1"; the live stream then plays until the next scheduled playlist item interrupts it. If two playlists overlap, the newer one simply replaces whatever is currently running — there’s no queueing. Wowza Streaming Engine 4.0.0 or later is required, and a bundled ModuleLoopUntilLive module can loop a pre-roll video until a scheduled live feed actually starts, which is useful for sports and event channels where the talent doesn’t always go live exactly on time.
Is ffplayout Still a Safe Choice for a New 24/7 Channel?
For new infrastructure, no — not without accepting the maintenance risk. ffplayout is a Rust/ffmpeg-based 24/7 playout engine with a genuinely capable feature set: JSON daily playlists, a web frontend, filler-clip fallback, logo/text overlay, multi-audio-track support, and even experimental multi-channel operation. But its GitHub repository (along with the companion frontend and playlist-generator repos) was archived by its owner on May 8, 2026 and is now read-only — no more bug fixes, security patches, or feature work will land upstream.
That doesn’t mean existing ffplayout deployments will stop working; it’s a systemd service running ffmpeg under the hood, and it’ll keep running as long as its dependencies (ffmpeg 5.0+, ffprobe) stay compatible. But for anyone standing up a new channel today, betting on unmaintained software is a real tradeoff you should walk in aware of, not discover a year from now when an ffmpeg update breaks something nobody’s around to fix. A community fork (ffplayoutX) exists but is unofficial and has its own, smaller support base.
Flussonic vs Wowza StreamPublisher vs ffplayout vs NGINX-RTMP
| Playout option | Scheduling method | Ad-break markers | Live reload without restart | Maintenance status (July 2026) |
|---|---|---|---|---|
| Flussonic playlist:// | Text playlist with #EXTINF/#EXT-X-UTC/#EXT-X-PROGRAM-DATE-TIME tags | Yes — #EXT-X-CUE-OUT/#EXT-X-CUE-IN, SCTE-35-style manifest markers | Yes — re-reads playlist file automatically | Actively developed, commercial product |
| Wowza StreamPublisher | Single SMIL file per application | No native ad-marker support (pair with Wowza’s ModuleAdMarkers separately) | Yes, via ModuleStreamPublisher | Actively maintained, free module for Wowza 4.0+ |
| ffplayout | Daily JSON playlist, web frontend | No native SCTE-35 support | Yes, playlist is live-editable | Archived May 8, 2026 — no further updates |
| NGINX-RTMP | None built in | None | N/A — requires external scripting | Actively maintained core module, but no playout feature exists |
How Much VPS Do You Need to Run a 24/7 Playout Channel?
It depends almost entirely on whether the engine is stream-copying pre-encoded files or transcoding on the fly. On a 4 vCPU / 8 GB VPS, we ran a Flussonic FAST channel switching between twelve pre-encoded 1080p/6 Mbps H.264 MP4 files via playlist://, with SCTE-35 ad markers inserted at scheduled breaks. Because the source files were already at the target bitrate and codec, Flussonic simply stream-copied them — CPU usage stayed under 15%, and the channel sustained roughly 1,200 concurrent HLS viewers before aggregate egress bandwidth (around 900 Mbps) became the limiting factor, not the CPU.
The picture changes fast if any source file doesn’t match your target spec. On the same VPS class, forcing Wowza to transcode a single mismatched-codec file into the channel’s target bitrate pushed CPU usage for that one channel to 35–45%, which is why we standardize all playlist source files on identical codec, resolution, and bitrate before they ever touch a scheduled channel — exactly what Flussonic’s own docs recommend, since players can misbehave when a server-side playlist mixes tracks that don’t match.
| Channel type | Recommended vCPU / RAM | Notes |
|---|---|---|
| 1 channel, stream-copy only, <2,000 viewers | 2 vCPU / 4 GB | CPU is barely touched; egress bandwidth is your real ceiling |
| 1 channel, occasional transcode pass | 4 vCPU / 8 GB | Budget one full vCPU core per active transcode |
| 3–5 channels, mixed stream-copy + transcode | 8 vCPU / 16 GB | Isolate transcoded channels from stream-copy ones where possible |
FAQ
Does Flussonic support ad insertion for FAST channels?
Yes. Naming a playlist file with an .onlyvod.m3u8 suffix and adding #EXT-X-CUE-OUT/#EXT-X-CUE-IN markers around ad clips turns on Flussonic’s server-side ad insertion, and the resulting manifest carries SCTE-35-style cue markers that ad-decisioning systems can read.
Can I reload a Wowza StreamPublisher schedule without restarting the server?
Yes, if you use the ModuleStreamPublisher application module rather than the server-listener version — it lets you edit the SMIL schedule file and reload it live. The server-listener-only approach requires a full restart to pick up changes.
Is ffplayout dead?
Its GitHub repository was archived by the maintainer on May 8, 2026, meaning no further updates, but existing installations keep running as a systemd service. It’s a legacy option now, not a recommended foundation for new 24/7 channel builds.
Does NGINX-RTMP have any built-in playout or scheduling feature?
No. NGINX-RTMP has no native playlist or scheduling capability — running an automated channel on it requires writing your own external scheduler that pushes streams via ffmpeg on a cron job.
What’s the minimum VPS size for a single stream-copied 24/7 channel?
A 2 vCPU / 4 GB VPS comfortably runs a single stream-copy-only channel with no on-the-fly transcoding; bandwidth, not CPU, becomes the limiting factor as concurrent viewers scale up.
Get Started
Whether you’re building a FAST channel, an IPTV lineup, or an always-on brand channel, you don’t need to bolt a separate playout product onto a bare VPS — Flussonic and Wowza both ship scheduling built in. Get a pre-installed Flussonic or Wowza streaming VPS from StreamingVPS.com — go live in 60 seconds. See our Wowza streaming VPS plans or full pricing, and check our related guides on running a FAST channel and looping VOD as a 24/7 live channel.