Municipal and enterprise streaming
Cities, schools, and companies use Flumen to go live without sharing a platform. You decide how many streams they can run and how much they can store. Their operators never see another tenant.
Platform architecture
Viewers on Cloudflare · restreams on the ingest VPS
01 · Contribution
OBS · vMix · chamber codec
SRT 8890 and RTMP 1935 into the ingest host. Stream keys keep each client on its own path.
02 · Ingest VPS
Receive, overlay, restream, record
MediaMTX packages HLS for origin pull. ffmpeg pushes restreams to social from this box. Recording waits the grace window, then one file.
03 · Cloudflare
Every live viewer and VOD play
Worker pulls HLS origin, caches segments at the edge. D1 holds the catalog. R2 holds archives. Public play never reaches the VPS.
04 · Social restream
YouTube · Facebook · Twitch
Paid RTMP push originates on the ingest VPS. It does not use Cloudflare bandwidth.
Live viewing
The Worker pulls HLS once from the VPS. Every player is served from the Cloudflare CDN. Browsers never see the ingest IP.
Archive
After the hold window, the VPS copies the file to R2. Playback is CDN-only.
Restream
ffmpeg on the ingest box pushes RTMP to YouTube, Facebook, Twitch, or a custom server. That traffic never enters Cloudflare.
Live
Each channel has a stream key, an SRT passphrase, auto-record, and optional DVR. Residents and embeds watch from Cloudflare. Paid restreams to YouTube, Twitch, or Facebook leave the ingest box as RTMP.

SRT latency
Haivision’s floor is 4 × RTT, then ARQ, jitter, and clock drift. At 20 ppm the TSBPD window walks 72 ms every hour. Without a drift tracer the stock libsrt default is done in under two hours. The lab probes the path, writes ffmpeg and Haivision URLs, and soak-tests 10–24 hour contributions in a few seconds.
Studio 40 ms through bonded 1.5 s and GEO 4.5 s. Apply to a channel; the ingest URL rewrites in microseconds for ffmpeg and milliseconds for Haivision.
Time-compressed TSBPD, NAK recovery, bonded handoffs, and ingest RSS. Compare 80 / 120 / recommended / 2× before a long occupancy.
libsrt 1.5 holds residual error under 30 ms over 12 hours. Turn it off to see why a 120 ms metro URL fails a Sunday-to-evening event.
Library

House of worship
Sunday program · archive to R2

Company / events
Restream to YouTube, Twitch, custom RTMP

Municipality
Council session · public site + playlist embed
Ingest fleet
Every client publishes to the same locked ingest VPS. Stream keys keep tenants apart. Restreams to social leave this box as RTMP. Destroy a client and the box stays up.
1935/tcp RTMP, 1936/tcp RTMPS, 8890/udp SRT for encoders. Port 80 is HLS origin for Cloudflare Workers only — not for public viewers.
Live HLS and VOD play from the CDN. A packed council chamber costs Cloudflare egress, not ingest uplink. Catalog and quotas live in D1. Archives land in R2.
Create, suspend, and type-to-confirm destroy. Caps are per client. Recording stops at 100%. Warn at 80%.
Embed
Drop players on church sites, tournament hubs, or civic pages. Restrict by domain. Live and VOD use the same Cloudflare player — the ingest IP never appears in the iframe.
Owner, admin, operator, viewer. Operators are scoped to the clients you assign — one, several, or none until they’re ready. Viewers can watch the library; they cannot rename, trim, or delete.
<iframe src="https://flumen.live/e/vpub_…" allow="autoplay; fullscreen" allowfullscreen ></iframe> <iframe src="https://flumen.live/pl/ppub_…" allow="autoplay; fullscreen" ></iframe>