1. Client-Side (CSAI) vs. Server-Side Ad Insertion (SSAI)

In traditional desktop and mobile web video, publishers deploy Client-Side Ad Insertion (CSAI): the video player pauses the content stream, requests a VAST XML tag, renders an ad over the player canvas, and resumes content playback once the ad completes.

On Connected TV (CTV) hardware (Tizen OS, LG webOS, Roku, Apple TV, Amazon Fire TV), CSAI creates unacceptable latency: buffering wheels, black frame flashes, audio level spikes, and frequent player crashes.

Server-Side Ad Insertion (SSAI) solves this by shifting all ad decisioning, transcoding, and video splicing to high-performance cloud servers. The client Smart TV receives a single continuous, uninterrupted HLS or MPEG-DASH media stream.

2. The Complete SSAI Pipeline Architecture

[Live Broadcast / VOD Video Stream]
  │
  ▼ 1. Ingest Video with SCTE-35 Splice Markers (ad break incoming in 8 seconds)
[SSAI Stitching Engine (AWS MediaTailor / Harmonic / Google DAI)]
  │
  ▼ 2. Make OpenRTB 2.6 Pod Request to Ad Decision Server (ADS) / SSPs
[Ad Decision Server (GAM 360 / SpringServe / Magnite)]
  │ 3. Returns VAST XML containing 2x 15s ads matching 30s pod duration
  ▼
[Real-Time Transcoder & Normalizer]
  │ 4. Normalizes audio loudness to -24 LKFS; transcodes video to match stream bitrate
  ▼
[Manifest Manipulator]
  │ 5. Injects #EXT-X-DISCONTINUITY and ad segment URLs (.ts / .m4s) into playlist
  ▼
[HLS/DASH Player on Smart TV]
  │ Plays seamless 1080p stream without buffering
  ▼
[Measurement Dispatcher]
  │ Fires VAST quartile beacons (start, mid, complete) to DSPs
                        

3. SCTE-35 Cues & Ad Podding

In broadcast and live OTT video, transitions into commercial breaks are governed by SCTE-35 binary flags embedded directly in the stream:

  • splice_insert: Commands the transcoder to splice out of the primary program and into an ad break for an exact duration (e.g. 60.00 seconds).
  • time_signal with segmentation descriptor: Used in modern HLS packaging to indicate program start, chapter boundaries, and ad break opportunities.

4. HLS Manifest Manipulation: The #EXT-X-DISCONTINUITY Tag

How does the video player transition from streaming Hollywood content to a commercial advertisement without crashing? The SSAI engine updates the HLS .m3u8 playlist dynamically:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
live_content_segment_104.ts
#EXTINF:6.000,
live_content_segment_105.ts

# --- AD BREAK START: SCTE-35 TRIGGERED ---
#EXT-X-DISCONTINUITY
#EXTINF:6.000,
https://ad-cdn.example/stitched_ad_segment_01.ts
#EXTINF:6.000,
https://ad-cdn.example/stitched_ad_segment_02.ts
#EXTINF:3.000,
https://ad-cdn.example/stitched_ad_segment_03.ts

# --- AD BREAK END: RETURN TO PROGRAM CONTENT ---
#EXT-X-DISCONTINUITY
#EXTINF:6.000,
live_content_segment_106.ts

The #EXT-X-DISCONTINUITY tag is vital: it informs the hardware video decoder on the TV that the upcoming video segments may contain a different aspect ratio, audio sampling rate, or timestamp sequence. Without this tag, Smart TV decoders freeze or throw fatal playback exceptions.

5. Server vs. Client Beacon Tracking

Because ads are stitched on the server, who fires the VAST impression and quartile beacons?

  • Server-Side Beaconing (SSB): The SSAI stitching engine monitors segment downloads by the client and fires VAST HTTP GET beacons directly from the cloud server. Pros: Zero client CPU load. Cons: DSPs suspect ad fraud because thousands of beacons originate from the same AWS/Google Cloud IP addresses.
  • Client-Side Beaconing (CSB): The SSAI engine injects metadata (via ID3 tags in the audio stream or #EXT-X-DATERANGE tags in the manifest). When the video player renders that frame, client JavaScript or native SDK code fires the tracking beacon with the true residential IP and device user agent.

6. Solution Engineer Troubleshooting Playbook: "Audio Spikes and Stream Freezes"

Real-World CTV Diagnostic Triage

Symptom: Viewers complain that stream audio deafeningly increases during commercial breaks, and older Roku TVs crash during the return to live sports.

Root Cause & Remediation:

  • Audio Loudness Violation: The content stream was encoded at -24 LKFS (compliant with the CALM Act), but an external DSP delivered an un-normalized video creative encoded at -14 LKFS. The SSAI transcoder was configured in "bypass" mode. Enabled automated dynamic audio normalization on the SSAI ingest profile.
  • PTS/DTS Timestamp Drift: Older Roku devices require strict Presentation Time Stamp (PTS) continuity. Discovered the SSAI engine failed to inject #EXT-X-DISCONTINUITY when returning from the ad pod, causing the Roku decoder buffer to overflow.

7. Real-World Interview Scenarios

Scenario: "How does OpenRTB 2.6 support podding for SSAI CTV environments?"

Answer: OpenRTB 2.6 introduced native video podding parameters in the video object: podid (identifier for the commercial break), podseq (position of the ad within the break), poddur (total duration of the pod), and slotinpod (whether the ad must be first, last, or anywhere in the pod). This prevents duplicate ads from the same brand within the same commercial break (competitive exclusion) and enables seamless SSAI stitching.

⚡ Interactive Workbench

Validate OpenRTB 2.6 Video Podding Payloads

Inspect CTV pod duration parameters, verify video protocols, and diagnose SSAI OpenRTB payloads in the live validator.

OpenRTB Validator →
SM

Santosh Mahanty

AdTech Technical Specialist • 10+ Years Experience