DAI player and app development guide

Use the following information to plan and manage your player and app development for Dynamic Ad Insertion (DAI).

Two serving choices: Server-Side Beaconing (SSB) or the IMA SDK

Google Interactive Media Ads Software Development Kit (IMA SDK) has been enhanced to support server-side DAI implementations. This is the same SDK which enables a player to make client-side video ad requests and parse the VAST responses, but new methods have been added to the SDK which enable a player to request a video on demand stream or live stream. The IMA SDK enables your player to send Ad Manager signals for reporting and makes event tracking more accurate.

Server-Side Beaconing (SSB) allows the player to make a direct HTTP request to Ad Manager DAI system where Ad Manager performs estimates for ad metric reporting during the stream play. Any HLS player should be able to play Ad Manager DAI SSB streams, but there are some feature limitations. Learn more about Server-Side Beaconing for DAI

Platform support

Support for Dynamic Ad Insertion is shown below, including those platforms where it is not supported. You can click to see sample apps and to see more information about each platform.

Basic sample apps demonstrate video tracking events only. These are ideal for publishers who only use pre-rolls.

Advanced sample apps demonstrate all basic app functionality, as well as bookmarking, snapback, subtitles, scrubbing and countdown timers. These are ideal for publishers who monetize long-form content.

Platform SSB support DAI‑enabled IMA SDK Sample apps Additional documentation
iOS Yes iOS IMA SDK iOS sample apps iOS
quickstart guide

iOS reference
Android
or FireTV
Yes Android IMA SDK Android sample apps Android
quickstart guide

Android reference
tvOS
(Apple TV)
Yes tvOS IMA SDK tvOS sample apps tvOS quickstart guide
tvOS reference
Roku Yes SDK downloaded
at run time
Roku sample apps Roku
quickstart guide
Chromecast Yes SDK downloaded
at run time
Sample receiver app
In general, you must also have an iOS or Android app which can “cast” to a Chromecast device. You can refer to the “advanced sample” apps for iOS and Android for examples.
Chromecast
quickstart guide
HTML5 Yes SDK downloaded
at run time
HTML5 sample app
DAI demo HTML5 player
HTML5
quickstart guide

Support for video player controls

Video player controls are only supported with IMA SDK enablement. All advanced sample apps demonstrate feature functionality across the various supported platforms. The cue point information feature can also be demonstrated within basic sample apps.

Supported video player controls


  • Total Ads Countdown and Per Ad Countdown: Ability to add a countdown to state the amount of time remaining for the total number of ads or ad.

    • iOS and Android: The IMA SDK has this optional feature available.
    • Roku and tvOS: Within the IMA SDK, the advanced sample app has an example of this feature. You need to include custom code if this feature is required.
  • Subtitles: Ability to add closed captioning within the content stream. Supported subtitle programs include:
    • Timed Text Markup Language (TTML) (side-car): TTML is intended to be used for the purpose of transcoding or exchanging timed text information among legacy distribution content formats presently in use for subtitling and captioning functions.
    • WebVTT (side-car): WebVTT files provide captions or subtitles for video content, textual video descriptions, chapters for content navigation, and more generally any form of metadata that is time-aligned with audio or video content.
  • Bookmarking: Bookmarking is the ability to save and then return to a specific point in the content stream. Suppose a user watches five minutes of content, leaves same video stream, and then returns to it. Bookmarking saves the user's position in the stream so the stream can pick up from where it left off, providing a seamless experience to the viewer.
  • Snapback Snapback is the ability to take the user back to the start of the ad break they seeked past and then return them to their seek location after that ad break has completed.
  • Scrubbing: Typically a long-form content feature, provides the ability to see the first frame of the content as the user is scrolling through the content bar.

Override a default ad tag

When you define a DAI content source for VOD or live linear stream in Ad Manager, you need to specify a default video ad tag.

When your video player requests a stream, this ad tag will be used exactly as you have specified it in the UI. However, you have the ability to override parameters of that tag in your stream request.

Learn how to supply targeting parameters to your stream.

Override stream variant parameters

The default HLS playlist order is determined by the publisher.

Overriding the variant selection and order parameters can be specified during stream creation time. This allows you to specify the subset of variants that should be included in the response to a master playlist request and the order of those variants. The subset and order of variants will remain the same for the life of the stream, unless explicitly overridden.

Learn how to override stream variant parameters.

Frequently asked questions

How do I show pre-roll ads?

On VOD streams, you can configure whether to show pre-roll ads using ad rules.

On live linear streams, your video player should make a client-side Ad Manager ad request in order to show a pre-roll ad to a user before requesting the Ad Manager DAI live stream.

Set up an ad holiday


On live linear streams, you can use the "ad holiday" feature to avoid showing viewers another DAI ad immediately after they've just watched a pre-roll ad.

There are two parts to implementing an ad holiday:

  1. Specify the "Ad holiday duration" when you set up a live stream for DAI.
  2. Pass in the dai-ah parameter set to 1 in the adtagparameters array on your stream creation request. This is the same array that is used when you override Ad Manager ad tag parameters and when you set stream variant parameters.
How do I deliver video on demand content from more than one CDN?

When you create a CDN configuration for your video on demand content, you have the option to define a default CDN configuration, and additional CDN delivery settings. This allows you to set up more than one CDN and dynamically choose which you'd like to serve from, at the start of a session using a key-value.

Once you set up and save your CDN configurations, Ad Manager assigns a name to each. This name should be passed into the stream create request as a value of the dai-dlid parameter. *

For SSB, the parameter would simply be passed as dai-dlid=AaBbC1aaBa0obA1BABaaBA (where AaBbC1aaBa0obA1BABaaBA is the name that appears in Ad Manager).

When using the IMA SDK, it should be passed into the stream create request using ad tag parameters.

* If no name is passed into the request, Ad Manager uses the default CDN.

How do I request a video on demand stream in a sample app?
VOD stream requests contain the cmsid and vid, which allow you to target ads to video content.
What should my app do if there is a problem retrieving video content from Ad Manager?
If your app detects a problem receiving a response from Ad Manager, then you should encode logic to play the raw content without ads. For VOD streams, this would be the ingestUrl that was specified for Ad Manager in your content source MRSS feed. For live linear streams, this would be the URL for the stream from your encoder. Learn more about the best practices for DAI backup streams.
Why should I switch to the IMA SDK from Server-Side Beaconing (SSB)?
The IMA SDK allows the publisher to enrich the signals for reporting and make event tracking more accurate. Learn more about Server-Side Beaconing for DAI.
How do I troubleshoot server-side streams?
Every time your video player requests a stream from Ad Manager DAI, the stream is returned with a session ID. You should ensure that you are able to view this stream ID from within your application when you need to debug the ads in your stream. You can use this stream ID to monitor and troubleshoot stream activity.
Was this helpful?
How can we improve it?