Implementing Server-Side Ad Insertion in NextGen Live (SSAI)

Learn how Server-Side Ad Insertion works in NextGen Live: configure ad servers in Admin, enable SSAI on a channel, select an ad configuration at playback time, and trigger ad breaks during a live event.

Introduction

NextGen Live supports Server-Side Ad Insertion (SSAI), where ads are stitched into the live video stream on the server side. This delivers several advantages over client-side ads:

  • Ad blocker resistance: ads are part of the live stream, so client-side ad blockers do not affect them
  • Seamless playback: ads play without buffering or rebuffering at break boundaries
  • SCTE-35 support: industry-standard signaling for ad break placement, either from your encoder or triggered manually
  • Fill slate support: a fallback video plays if an ad break cannot be filled with creatives

How SSAI fits together

SSAI in NextGen Live spans four independent layers. Each layer is configured in a different surface and persisted differently. Understanding the separation prevents the most common configuration mistakes.

Layer Where it is set What it does Persistence
1. Ad configuration Admin module → NextGen Live Settings Defines the ad server URL, response type, custom headers, and beacons Account-wide; reused across channels
2. SSAI enablement Live module → New Channel wizard (Step 3) Turns on SSAI for a channel and assigns the fill slate Set once at channel creation; cannot be toggled later
3. Ad configuration selection Control Room → Channel URLs or Embed on Web Picks which ad config the playback token will carry Baked into the JWT issued at the moment the URL or embed code is generated
4. Ad break trigger Encoder SCTE-35 signal or Control Room Insert Ad Tells the live transcoder where ad breaks start and how long they are Per-event; does not select an ad config

Layer 1: Create the ad configuration

An ad configuration defines how ads are requested from your ad server. It is created once per account in the Admin module and is reused across every SSAI-enabled channel.

  1. Open the Admin module in Studio.
  2. In the left navigation, click NextGen Live Settings.
    Admin module NextGen Live Settings showing the Configurations table with one ad configuration listed
  3. Click New to open the configuration form.
  4. Enter a Name for the configuration. This is the label viewers’ ad configs will be selected by in the Control Room.
  5. Enter the Ad Server URL. The full ad tag URL from your ad server.
  6. Select the Ad Server Response Type: VAST, VMAP, or DFP.
    Add Next-Gen Live Configuration form with Name, Ad Server URL, Ad Server Response Type, Custom Headers, and Custom Beacons fields
  7. Optionally, add Custom Headers required by your ad server. Standard headers such as X-Forwarded-For and X-Device-User-Agent are sent automatically.
  8. Optionally, add Custom Beacons for tracking on custom channels (start, firstQuartile, midpoint, complete, etc.).
  9. Click Add to save the configuration.

Layer 2: Enable SSAI on the channel

SSAI is enabled on a channel during channel creation. The same step assigns the channel’s fill slate — a video that plays during ad breaks if no ad is returned.

Prepare a fill slate video

The fill slate must already exist in your Video Cloud account before you create the channel:

  • The asset must have at least one MP4 rendition. Use an Ingest Profile that produces MP4 output.
  • Resolution should match your live stream output to avoid scaling artifacts.
  • Use branded, high-quality content — the slate is what viewers see when no ad is available.

Create the channel with SSAI enabled

  1. Open the Live module and click New Channel.
  2. Choose Event Channel or Linear Channel, then click Next.
  3. Enter a channel name and complete Step 2 input settings.
  4. On Step 3 (Stream Advanced Settings), expand the SSAI section.
  5. Toggle Enable SSAI on. A Select Slate Asset control appears.
  6. Click Select Slate Asset, choose a video from your Video Cloud account, and click Select. Only videos with MP4 renditions are eligible.
    New Channel wizard Step 3 showing the SSAI accordion expanded, Enable SSAI toggle on, and a fill slate video selected
  7. Click Create Channel.

View SSAI status on an existing channel

You can verify SSAI is enabled on a channel under Channel SettingsAdvanced SettingsSSAI. The toggle is read-only.

Channel Settings Advanced Settings panel with the SSAI section visible and the Enable SSAI toggle disabled

Layer 3: Select an ad configuration at playback time

Enabling SSAI on a channel does not pick which ad configuration runs — that is chosen when a playback token is issued. There are two surfaces for this, and they produce independent tokens.

From the Channel URLs panel

Use this surface for direct integrations — testing the playback URL, pasting it into a custom player, or sharing it with another team.

  1. Open the channel’s Control Room and expand the Channel URLs panel.
  2. Click the Ad Configuration dropdown and choose one of the configurations created in Layer 1.
  3. Copy the regenerated Playback URL. The URL contains a JWT that carries the selected ad configuration ID.

From the Embed on Web modal

Use this surface to publish a Brightcove Player with a specific ad configuration baked in. The generated iframe or JavaScript embed code is what viewers actually load.

  1. In the Control Room, click Embed on Web.
  2. Pick a Player from the dropdown.
  3. Set Player Sizing, Aspect Ratio, and dimensions as needed.
  4. Click the Ad Configuration dropdown and choose a configuration.
    Embed on website modal showing Player, Player Sizing, Aspect Ratio, and Ad Configuration dropdowns with the iframe embed code preview
  5. Copy the iframe or JavaScript embed code from the bottom of the dialog and click Done.

The embed code carries the chosen ad configuration. If you later want viewers on a different ad config, regenerate the embed code with the new selection — previously distributed embeds will continue to use the original.

Layer 4: Trigger ad breaks (SCTE-35)

SCTE-35 cues mark where the live transcoder should open an ad break. They do not pick which ad runs — that decision is made by the ads service using the ad configuration on the viewer’s playback token.

Automated SCTE-35 from the encoder

Most production setups send SCTE-35 cues directly from the encoder, so ad breaks are timed against the source content:

  • Confirm your encoder supports SCTE-35 splice insert commands.
  • Configure splice cues with the desired break duration.
  • Test cue timing on a staging stream before going live.

Manual ad insertion from the Control Room

Use manual ad insertion when ad timing cannot be predetermined — for example, sports events with variable break lengths.

  1. In the Control Room, locate the Insert Ad control. (It is available while the channel is running.)
  2. Choose the Ad Break Duration (e.g., 30, 60, 90 seconds).
  3. Click Insert Ad to fire the SCTE-35 cue.
  4. Monitor the Control Room preview to verify the break.

SSAI best practices

  • Test the ad tag against a staging stream before a live event. Verify the ad server returns creatives and that quartile beacons fire.
  • Match fill slate resolution to your live output. A 1080p slate against a 720p stream will scale poorly.
  • Decide ad-config selection per surface. If multiple teams will distribute the same channel under different ad configs, regenerate Channel URLs and Embed on Web independently — tokens issued from one surface do not affect the other.
  • Treat the embed code as immutable. Once distributed, viewers will keep using whichever ad config was bound at generation time until you ship a new embed.

Troubleshooting SSAI

Ads are not displaying
  • Confirm SSAI was enabled when the channel was created (Channel Settings → Advanced Settings → SSAI).
  • Check the ad configuration on the viewer’s token: regenerate the Channel URL or Embed on Web with the expected ad config selected and retry.
  • Verify the ad server URL responds with valid VAST/VMAP/DFP for the chosen response type.
  • Review SCTE-35 cue timing and break duration.
Fill slates appear instead of ads
  • Confirm the ad server has inventory available for the requested time slot.
  • Check ad request latency — slow ad servers cause fallback to slate.
  • Test the ad server URL independently (e.g., paste into a browser) to confirm a creative response.
The ad configuration dropdown is empty
  • Verify at least one ad configuration exists under Admin → NextGen Live Settings.
  • Confirm SSAI is enabled on the channel. The dropdown only appears for SSAI-enabled channels.