Why architecture matters here
Architecture matters here because SSAI sits directly on the revenue path: every ad break is money, and every defect in the pipeline is money lost. A missed ad break is unsold inventory. A stitch that arrives late causes a rebuffer that hurts engagement. A tracking beacon that does not fire means an advertiser is not billed for an impression that actually played. Unlike a cosmetic bug, an SSAI defect has a dollar figure attached, and at streaming scale those figures compound quickly.
The problem is genuinely hard because SSAI must be simultaneously personalized and cacheable, and those goals conflict. Personalization wants a unique ad — and therefore a unique manifest — per viewer, so a sports fan and a cooking enthusiast watching the same game see different ads. Cacheability wants shared, reusable artifacts so the CDN is not overwhelmed. The architecture resolves this by personalizing at the manifest level (cheap, per-session) while sharing the ad media segments across viewers (expensive to produce, so produced once and cached). The manifest is per-viewer; the segments it points at are mostly shared.
Consider the conformance requirement to feel the engineering. For stitching to be seamless, an ad segment must match the content stream's encoding exactly — same codec, same resolution ladder, same segment duration, same audio configuration, same key frame alignment. If the ad is 1080p at a different bitrate ladder than the content, the player's adaptive bitrate logic stumbles at the boundary and the illusion of one continuous stream breaks. So every ad creative must be transcoded into the same rendition profiles as the content before it can be stitched, which is why the ad transcoder is a first-class component, not an afterthought.
There is a further wrinkle that makes conformance genuinely demanding: the splice points must fall on clean boundaries. A stream is delivered as a sequence of independently decodable segments, each beginning on a keyframe, and an ad can only be inserted at a segment boundary — you cannot splice into the middle of a group of pictures without breaking decoding. So the content encoder is typically configured to place a keyframe and a segment boundary exactly where the SCTE-35 avail begins and ends, giving the stitcher a clean seam to cut on. If those boundaries do not align with the signaled avail, the stitcher is forced to either shift the break or leave a fractional segment, and either choice degrades the seamlessness the whole architecture is built to preserve. Aligning encoding boundaries with ad signaling is therefore an upstream requirement, not something the stitcher can paper over on its own.
The payoff of getting the architecture right is a stream that is both more valuable and more robust. Ads resist blocking, playback stays smooth, measurement is reliable because the server controls it, and new client platforms inherit monetization for free. For live events especially — where ad breaks are signaled in real time and the audience is enormous — SSAI is the only approach that can deliver targeted ads to millions of viewers simultaneously without asking each client to do the hard work.
There is also a correctness dimension that separates a working SSAI system from a merely plausible one: the ad break must fill exactly the time the content feed allotted for it. Broadcast and live feeds signal an avail of a specific duration, and the stitched ads must sum to that duration — no more, no less. Overfill and you clip the return to content; underfill and you leave dead air or a slate. Getting avail duration accurate, and having a graceful slate to cover any shortfall, is what makes the stitch look professional rather than broken.
The architecture: every piece explained
Top row: signaling and decisioning. SCTE-35 markers are the industry-standard cue messages embedded in the content feed that announce an upcoming ad break — its start, its duration (the 'avail'), and metadata about what kind of break it is. The stitcher watches for these. When one fires, it calls the ad decision server over VAST (the standard ad-response format), passing session and targeting context; the ADS responds with the specific creatives to play for this viewer. The manifest stitcher is the orchestrator that turns that decision into playlist edits, and the ad transcoder conforms each chosen creative into the exact rendition profile of the content so it can be spliced seamlessly.
Middle row: delivery and measurement. The per-session manifest is the heart of SSAI — each viewer gets a unique playlist in which the content segments and the chosen ad segments are interleaved on one timeline. Because it is per-session, two viewers of the same stream can be pointed at different ad segments while sharing all the content segments. The tracking proxy fires the impression and quartile beacons server-side as the ad plays through the timeline, so measurement does not depend on client cooperation. The CDN delivers content and ad segments identically; from its perspective they are all just media segments.
Bottom row: the client and the reporting endpoints. The player is deliberately dumb about ads — it just plays the manifest's timeline in order, unaware that some segments are ads. This is the whole point: no special ad-playback code, no switching, no ad-block surface. The beacon endpoints are the advertiser and measurement systems that receive impression, first-quartile, midpoint, third-quartile, and completion events, which are how advertisers verify and pay for delivered ads.
The architectural crux is the split between per-session manifests and shared media. The manifest is cheap to generate per viewer — it is just text pointing at segment URLs — so personalization lives there. The ad media segments are expensive to transcode, so they are produced once per creative-per-profile and cached at the CDN, shared across every viewer who is served that creative. This split is what lets SSAI personalize at massive scale: millions of unique manifests, but a bounded library of shared ad segments behind them.
The ops strip is the revenue dashboard. Fill rate measures the fraction of ad avails that were actually filled with a paid ad versus a slate — unfilled avails are lost revenue. Stitch latency measures how quickly the pipeline responds to an ad cue, which matters most for live where the break arrives in real time. Beacon delivery measures whether tracking events are reaching the measurement systems, because a dropped beacon is an unbilled impression. Avail duration accuracy confirms the stitched ads fill exactly the signaled break length. Together they describe whether the ad pipeline is monetizing correctly.
End-to-end flow
Trace an ad break through a live stream. The content encoder emits a SCTE-35 cue announcing a 90-second avail starting in a few seconds. The manifest stitcher, watching the feed, sees the cue and knows it must fill 90 seconds of ad time for every viewer. For a given viewer's session, it calls the ad decision server with that viewer's targeting context — geography, device, any first-party segments — and the ADS returns a VAST response naming, say, three 30-second creatives to play in sequence.
Each chosen creative must be conformed. If the ad transcoder has already produced these creatives in the content's rendition profile (same resolutions, bitrates, segment duration, keyframe alignment), the conformed segments are already cached at the CDN and nothing new is transcoded — the common case at scale. If a creative is new, it is transcoded into every profile and cached so the next viewer served it reuses the result. Either way, the stitcher now has URLs for the ad segments in the exact format of the content stream.
The stitcher edits this viewer's per-session manifest. It splices the ad segments into the timeline at the avail's position, so the playlist now reads: content segments, then the three creatives' segments in order, then content segments resuming after the break. The player, polling its manifest, simply sees more segments to play and plays them in sequence. There is no pause, no separate ad player, no black frame — the ad segments are the same codec and profile as the content, so the transition is invisible and adaptive bitrate keeps working across the boundary.
As the viewer's timeline advances into the ad segments, the tracking proxy fires beacons server-side: an impression when the ad starts, then quartile events at 25%, 50%, 75%, and completion. Because these fire from the server based on the manifest timeline position, they do not depend on the client running any ad-tracking code, and an ad blocker on the client cannot suppress them. The measurement systems receive verifiable events and the advertiser is billed for a real, delivered impression.
Step back and count what the architecture delivered across that break. The break was signaled precisely by SCTE-35, decisioned per viewer for targeting, filled with conformed segments that were mostly served from cache, spliced into a per-session manifest so personalization scaled cheaply, played seamlessly because the ad matched the content profile, and measured reliably from the server so the impression was billable and block-resistant. If the ad decision had returned nothing, a slate would have filled the avail so the timeline stayed intact and no dead air appeared. Every one of those properties is a direct consequence of stitching on the server and personalizing at the manifest layer rather than asking the client to fetch and play ads itself.