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 mode | Server-guided (SGAI) |
| Ad decisioning | None: the break names the creative |
| Break creation | Scheduled, punched, or detected from the ad markers in your stream |
| Your app needs | The OptiView Ads SDK for your platform; nothing else |
Before you start
- A live channel. The examples use the
wallclocktimebase. - 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
startto{ "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:
| Layout | Static asset |
|---|---|
| Single | A video that replaces the content. |
| Double box | A video next to your content, with an image or video companion behind both. |
| L-shape ad | A video, with an image or video companion that fills the L-shaped backdrop. |
| L-shape content | An image that fills the L-shaped backdrop while your content keeps playing. |
| Overlay | An 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
aderrorevent for the asset, continues with the next asset in the break if there is one, and otherwise returns to your content.
Related resources
| Resource | Description |
|---|---|
| Live | Live channels: timebase, break creation, and delivery modes. |
| Breaks | Layouts, variants, controls, and the asset model. |
| Templates | Store a break with its static assets once, and reuse it. |
| Your ad server (VAST) on live | Let your ad server decide which creative to play. |
| Static assets on VOD | The same workflow for on-demand assets. |
| Ad impression tracking | How OptiView Ads counts the breaks presented to your viewers. |