broadcast.ad is the portable, inspectable ad-signal & manifest-control layer that lets broadcasters keep linear-grade control while integrating with the ad servers and delivery models they already use — on any cloud, CDN, or on-prem infrastructure they choose.
Broadcasters need dynamic ad insertion across OTT, FAST, vMVPD and D2C — but today they must either surrender their insertion logic to a hyperscaler or build bespoke glue with no standards spine.
Yospace, AWS Elemental MediaTailor and Google DAI couple ad insertion to their platform and their cloud. Per-stream hyperscaler tax. Hard to debug. Poorly aligned with broadcast signaling.
The SSAI→SGAI migration is underway — HLS Interstitials are shipping. Incumbents are bolting SGAI onto SSAI cores. A greenfield build can be render-mode-agnostic from day one.
ESAM (SCTE 130-3) assumed a trusted LAN. Multi-tenant cloud breaks that — leaving an unauthenticated, money-and-compliance-bearing API exposed. No standardized fix exists.
Deploy-anywhere cloud independence, a render-mode-agnostic core, and signal-integrity as a first-class product — the combination the incumbents structurally cannot offer at once.
This is deliberately not "another SSAI." The defensible position is the combination below.
Deploy-anywhere: local lab → private cloud → Linode → customer infra → Kubernetes. Stateless workers, no cloud-proprietary primitives. The transcode backend is bundled and modular (ffmpeg baseline, swappable) so it never reaches for a cloud's transcode service. Rust's low per-stream footprint makes the cost argument real, not philosophical.
Conformance: a verifiable SCTE-35/224 conditioning pipeline — provable signal integrity from contribution to avail, where day-to-day revenue leakage lives. Trust (SESAME): securing the ESAM messaging layer, a proposed SCTE 130-9 standard. Standards-track and hard to copy.
One session / decision / tracking layer; switchable output as stitched segments (SSAI) or interstitial/event signals (SGAI). No mode leaks into the core — SSAI and SGAI are the only implementors of one Renderer trait. The single most important architecture call, made at the start instead of retrofitted.
First-class per-session telemetry and automatic ad-server reconciliation — targeting the impression-discrepancy revenue leakage that incumbents treat as an afterthought. Per-avail audit records, tracing, Prometheus metrics. "Wireshark for broadcast ad insertion."
Frame-accurate boundaries. Graceful underfill and slate. Blackout, affiliate replacement and regionalization honored through POIS policy. Built for linear-grade control — not an OTT tool stretched to fit broadcast.
Output conforms to SCTE-35/224, VAST/VMAP, Apple HLS Interstitials, DASH events, OMID, and the Google DAI Pod Serving component model. Maximum compatibility is a hard constraint — no proprietary wire format, ever. Integrate with the ad servers customers already run.
SCTE-35 in, ad-conditioned manifest out — the core never knows or cares whether the output is stitched or signaled.
A clear stance on each layer of the stack keeps the product a control plane, not another demand platform.
| Layer | Answers | Representative players | Our stance |
|---|---|---|---|
| A — Ad decisioning | "Which ad plays?" | Google Ad Manager, FreeWheel, Magnite, SpringServe | Integrate, never compete |
| B — Session / manifest | "How do I personalize per session?" | MediaTailor, Google DAI, Yospace, Broadpeak, Amagi | Play — lead with portability |
| C — Broadcast signaling | "What does policy require?" | SCTE-35/104, ESAM, POIS, ESNI / SCTE-224 | Own — our head start |
| D — Observability / proof | "Did it work — can I prove it?" | Underserved across all vendors | Own — concrete differentiator |
Maximum compatibility is a hard product constraint. Every output is something an off-the-shelf player or ad server already understands.
A player hits POST /session with channel + targeting. It gets back an HMAC-signed manifest URL — session state lives behind a SessionStore trait, never in a cloud primitive.
The origin manifest is parsed, SCTE-35 cues become avails, POIS policy applies (blackout / regionalization), and the AdDecider resolves a pod from VAST/VMAP — behind a timeout with slate fallback.
Ad creatives are conditioned to the content's actual rendition ladder by a pluggable Transcoder (ffmpeg baseline) — derived from the content master so ads match the stream exactly.
One Renderer emits SGAI (EXT-X-DATERANGE + per-session asset-list) or SSAI (EXT-X-DISCONTINUITY stitched segments) — selected per session. Always padded with slate.
Impressions and quartiles fire through a BeaconSink (retry + dedup). Every avail leaves an audit record and Prometheus metrics — so you can prove what played.
Small / mid broadcasters, FAST and niche-sports operators, and sovereignty-sensitive teams who want broadcast-grade ad insertion that runs identically on a laptop, on Linode, or on their own iron.