Get started with the IMA DAI SDK

IMA SDKs make it easy to integrate multimedia ads into your websites and apps. IMA SDKs can request ads from any VAST-compliant ad server and manage ad playback in your apps. With IMA DAI SDKs, apps make a stream request for ad and content video—either VOD or live content. The SDK then returns a combined video stream, so that you don't have to manage switching between ad and content video within your app.

Select the DAI solution you're interested in

Play VOD streams registered with Google Cloud Video Stitcher API

This guide demonstrates how to use the IMA DAI SDK for Roku to request and play a Google Cloud VOD stream session.

This guide expands on the basic example from the Get started guide for IMA DAI.

For information on integrating with other platforms or on using the IMA client-side SDKs, see Interactive Media Ads SDKs.

Set up a Google Cloud project

Set up a Google Cloud project and configure service accounts to access the project.

Enter the following variables for use in the IMA SDK:

Location
The Google Cloud region where your VOD config was created: LOCATION
Project number
The Google Cloud project number using the Video Stitcher API: PROJECT_NUMBER
OAuth token

A service account's short lived OAuth token with the Video Stitcher user role:

OAUTH_TOKEN

Read more about creating short-lived OAuth tokens. The OAuth token can be reused across multiple requests as long as it has not expired.

Network code

The Ad Manager network code for requesting ads: NETWORK_CODE

Ad tag URL

Ad Manager URL of the ad tag:

AD_TAG_URL

For testing, you can use the IMA VMAP Pre-roll sample.

Content source URL

The URL string of the stream manifest for your VOD content: CONTENT_SOURCE_URL

Set up the basic example

Download and run the IMA Roku DAI Basic Example. Click the play button on the video player to start the short film "Tears of Steel", which contains ad breaks every 30 seconds.

Request a VOD stream

Use the sdk.createVideoStitcherVodStreamRequest() function to replace the sample stream with your ad stitched VOD stream. You can use the Google Ad Manager UI to locate the generated DAI sessions for monitoring and debugging.

In the existing sample, there are conditional statements to determine whether to construct a VOD StreamRequest or a live StreamRequest. Add a new path to construct a Cloud Video Stitcher VOD StreamRequest using the values generated previously.

Here's an example:

basic_example/components/MainScene.xml

<?xml version="1.0" encoding="utf-8" ?>
<component name="MainScene" extends="Scene" initialFocus = "myVideo">
<script type="text/brightscript">
<![CDATA[
  function init()
    m.video = m.top.findNode("myVideo")
    m.video.notificationinterval = 1
    m.testLiveStream = {
      title: "Livestream",
      assetKey: "c-rArva4ShKVIAkNfy6HUQ",
      apiKey: "",
      type: "live"
    }
    m.testVodStream = {
      title: "VOD stream"
      contentSourceId: "2548831",
      videoId: "tears-of-steel",
      apiKey: "",
      type: "vod"
    }
    m.testVideoStitcherVodStream = {
      title: "My Stream Title",
      contentSourceUrl: "CONTENT_SOURCE_URL",
      networkCode: "NETWORK_CODE",
      region: "LOCATION",
      projectNumber: "PROJECT_NUMBER",
      oAuthToken: "OAUTH_TOKEN",
      adTagUrl: "AD_TAG_URL"
      apiKey: "",
      title: "Video Stitcher VOD Stream",
      type: "stitcherVod"
    }

    loadImaSdk()
  end function

  function loadImaSdk() as void
    m.sdkTask = createObject("roSGNode", "imasdk")
    m.sdkTask.observeField("sdkLoaded", "onSdkLoaded")
    m.sdkTask.observeField("errors", "onSdkLoadedError")

    ' Set this to the stream data you would like to play.
    selectedStream = m.testVideoStitcherVodStream
    m.videoTitle = selectedStream.title
    m.sdkTask.streamData = selectedStream

    m.sdkTask.observeField("urlData", "urlLoadRequested")
    m.sdkTask.video = m.video
    ' Setting control to run starts the task thread.
    m.sdkTask.control = "RUN"
  end function

basic_example/components/Sdk.xml

Sub loadStream()
  sdk = m.sdk
  sdk.initSdk()
  setupVideoPlayer()

  request = {}
  streamData = m.top.streamData
  if streamData.type = "live"
    request = sdk.CreateLiveStreamRequest(streamData.assetKey, streamData.apiKey)
  else if streamData.type = "vod"
    request = sdk.CreateVodStreamRequest(streamData.contentSourceId, streamData.videoId, streamData.apiKey)
  else if streamData.type = "stitcherVod"
    request = sdk.CreateVideoStitcherVodStreamRequest(
      streamData.adTagUrl,
      streamData.networkCode,
      streamData.contentSourceUrl,
      streamData.region,
      streamData.projectNumber,
      streamData.oAuthToken
    )
  else
    request = sdk.CreateStreamRequest()
  end if

  request.player = m.player
  request.adUiNode = m.top.video

  requestResult = sdk.requestStream(request)
  If requestResult <> Invalid
    print "Error requesting stream ";requestResult
  Else
    m.streamManager = Invalid
    While m.streamManager = Invalid
      sleep(50)
      m.streamManager = sdk.getStreamManager()
    End While
    If m.streamManager = Invalid or m.streamManager["type"] <> Invalid or m.streamManager["type"] = "error"
      errors = CreateObject("roArray", 1, True)
      print "error ";m.streamManager["info"]
      errors.push(m.streamManager["info"])
      m.top.errors = errors
    Else
      m.top.streamManagerReady = True
      addCallbacks()
      m.streamManager.start()
    End If
  End If
End Sub

Reload the app to request and play your custom VOD stream.

Clean up

Now that you have successfully hosted a VOD stream using the Google Cloud Video Stitcher API and requested it using the IMA DAI SDK for Roku, it's important to clean up any serving resources.

Follow the VOD clean up guide to remove any unneeded resources and assets.