Skip to main content
Version: v2

Static assets on live

With static assets, each break points directly at its ad creatives: video or image files that you host on your own CDN. No ad server is involved — the SDK fetches the creative from the URL on the break and plays it when the break starts. Use this workflow on live streams for direct-sold campaigns, sponsorships, promos, and branded overlays where you already know which creative to show.

Static assets on live
Delivery modeServer-guided (SGAI)
Ad decisioningNone: the break names the creative
Break creationScheduled, punched, or detected from the ad markers in your stream
Your app needsThe OptiView Ads SDK for your platform; nothing else

Before you start​

  • A live channel. The examples use the wallclock timebase.
  • The OptiView Ads SDK in your app: Web, Android, iOS, or React Native. Static assets need no ad server, no Google Ad Manager account, and no extra configuration in the app.
  • Your creatives on a CDN that the viewers' devices can reach.

Schedule a break​

A static asset sets type to static and uri to the URL of the creative. On a wallclock channel, start is the UTC moment in your stream when the break begins:

curl -X POST 'https://us.ads.optiview.dolby.com/api/v1/channels/<channel-id>/breaks' \
-u "$ADS_API_KEY:$ADS_API_SECRET" \
-H 'Content-Type: application/json' \
-H 'X-Org-ID: <org-id>' \
-d '{
"start": "2026-07-16T12:15:00.000Z",
"duration": 30,
"variant": {
"format": "single",
"assets": [
{
"type": "static",
"mediaType": "video",
"mimeType": "application/x-mpegurl",
"uri": "https://cdn.example.com/ads/spot.m3u8",
"interaction": { "clickThrough": "https://www.example.com/offer" }
}
]
}
}'

The uri can also be a list of URLs targeted per device type. See Static assets and Asset URI targeting for the full asset model.

Other ways to create the break​

  • Punch it live. Create the break without a start, and punch it when the moment comes, for example from your production control room.
  • Detect it. Add your stream as an origin and configure a marker rule whose template holds the static assets. Every matching ad marker in the stream, such as an SCTE-35 signal, becomes a break.
  • Trigger it on a player event. Set start to { "type": "event", "event": "start" } for a pre-roll when the viewer tunes in, "pause" for a pause ad, or "end" for a post-roll. See Event based triggers.

How the break plays​

  • The SDK receives the break through the channel's Break Manifest shortly before it starts, within the channel's ad prefetch window, and loads the creative ahead of time so the ad starts without delay.
  • Viewers behind the live edge, in the DVR window, play the break when their playhead reaches it.
  • Static assets always play server-guided. On a channel that steers some devices to SSAI, those devices still play the static event-triggered breaks — pre-roll, pause, and post-roll — but not the breaks on the timeline.

Supported layouts​

Static assets work in every layout:

LayoutStatic asset
SingleA video that replaces the content.
Double boxA video next to your content, with an image or video companion behind both.
L-shape adA video, with an image or video companion that fills the L-shaped backdrop.
L-shape contentAn image that fills the L-shaped backdrop while your content keeps playing.
OverlayAn image or video on top of your content.

An image stays on screen for the asset's duration, or for the break's duration when the asset has none.

Static assets can also be used for pause ads: an image, or a progressive MP4 video that plays muted, shown while the viewer is paused.

Creative formats​

  • HLS (.m3u8) is the recommended format for video creatives on every platform. On connected TVs in particular, the SDK can load an HLS creative ahead of the break, so the ad starts faster.
  • Progressive MP4 also works. On Web, the SDK plays MP4 creatives through the browser's own video element.
  • Images are used for overlays, companions, L-shape backdrops, and pause ads.

Set mimeType on the asset when you know it. The SDK then knows upfront how to play the creative, instead of having to find out, which makes ad preparation faster.

Tracking and reporting​

The SDK reports an OptiView Ads impression for every break it presents, and emits ad events — such as the start and end of each break and ad — that your app can listen to. See the API reference of your platform for the full list of events.

Static assets carry no third-party tracking URLs. If an advertiser needs to count impressions in their own ad server, deliver the creative through a VAST tag instead: the VAST response carries the advertiser's tracking URLs, which are fired while the ad plays.

Troubleshooting​

  • The break does not play. Check that the channel's Break Manifest contains the break, and that the creative URL is publicly reachable.
  • Web: the creative fails to load. The SDK downloads HLS creatives with HTTP requests from your page, so your CDN must allow cross-origin requests (CORS) from your app's origin.
  • A creative cannot be played. The SDK emits an aderror event for the asset, continues with the next asset in the break if there is one, and otherwise returns to your content.
ResourceDescription
LiveLive channels: timebase, break creation, and delivery modes.
BreaksLayouts, variants, controls, and the asset model.
TemplatesStore a break with its static assets once, and reuse it.
Your ad server (VAST) on liveLet your ad server decide which creative to play.
Static assets on VODThe same workflow for on-demand assets.
Ad impression trackingHow OptiView Ads counts the breaks presented to your viewers.