IMA DAI SDK スタートガイド

IMA SDK を使用すると、マルチメディア広告をウェブサイトやアプリに簡単に統合できます。IMA SDK では、 VAST 準拠の広告サーバーに広告をリクエストし、アプリでの広告再生を管理できます。IMA DAI SDK を使用すると、アプリは広告とコンテンツ動画(VOD またはライブ コンテンツ)のストリーム リクエストを行います。SDK は組み合わされた動画ストリームを返すため、アプリ内で広告とコンテンツ動画を切り替える必要はありません。

目的の DAI ソリューションを選択する

Pod サービング DAI

このガイドでは、tvOS 用の IMA DAI SDK とシンプルな動画プレーヤーを使用して、DAI Pod Serving のライブ ストリームまたは VOD ストリームを再生する方法について説明します。完成したサンプルを確認する場合は、Pod Serving サンプルアプリ(Obj C または Swift)をダウンロードしてください。

IMA DAI Pod Serving の概要

IMA DAI SDK for tvOS を使用した Pod 配信の実装には、次の 2 つの主要コンポーネントが必要です。

  • StreamRequest: Google の広告サーバーへのストリーム リクエストを定義するオブジェクト。Pod の提供を有効にするには、IMAPodStreamRequest または IMAPodVODStreamRequest を使用して作成する必要があります。どちらの方法でもネットワーク コードが必要です。また、IMAPodStreamRequest にはカスタム アセットキーも必要です。API キーは省略可能です。

  • IMAStreamManager: トラッキング ping の呼び出しやパブリッシャーへのストリーム イベントの転送など、動画ストリームと IMA DAI SDK 間の通信を処理するオブジェクト。

前提条件

始める前に、次のものが必要になります。

  • Xcode 13 以降。
  • CocoaPods(推奨)、Swift Package Manager、または IMA SDK for tvOS のダウンロードのコピー。
  • DAI 広告を含む動画ストリームを再生できるように IMA DAI SDK がセットアップされている tvOS アプリこのようなアプリがまだない場合は、出発点として tvOS DAI BasicExample を使用することをおすすめします。BasicExample には、このガイドで参照しているコードベースがあります。IMA DAI SDK の実装方法について詳しくは、クイック スタートガイドをご覧ください。

Pod サービング変数を設定する

Pod の提供に必要な変更はすべて、Swift では ViewController.swift で、Objective-C では ViewController.m で行われます。このガイドのスニペットでは、デフォルトで Swift 言語が使用されます。最初のステップは、定数変数を更新することです。

追加する連続配信広告ストリームのリクエスト定数は次のとおりです。

  • STREAM_URL(ライブ配信にのみ使用): Pod 配信を使用してマニフェスト マニピュレータまたはサードパーティ パートナーが提供する動画ストリーム URL。リクエストを行う前に、IMA DAI SDK によって提供されるストリーム ID を挿入する必要があります。この場合、ストリーム URL のプレースホルダ "[[STREAMID]]" は、リクエストを行う前にストリーム ID に置き換えられます。
  • NETWORK_CODE: アド マネージャー 360 アカウントのネットワーク コード。
  • CUSTOM_ASSET_KEY(ライブ配信にのみ使用): アド マネージャー 360 で連続配信広告配信イベントを識別するカスタム アセットキー。これは、マニフェスト マニピュレータまたはサードパーティの Pod 配信パートナーによって作成できます。
  • API_KEY(ライブ配信にのみ使用): IMA DAI SDK からストリーム ID を取得するために必要となる、オプションの API キー。

サンプルの variable セクションを次のように変更します。

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl =
    "https://encodersim.sandbox.google.com/masterPlaylist/9c654d63-5373-4673-8c8d-6d92b66b9d46/master.m3u8?gen-seg-redirect=true&network=51636543&event=google-sample&pids=devrel4628000,devrel896000,devrel3528000,devrel1428000,devrel2628000,devrel1928000&seg-host=dai.google.com&stream_id=[[STREAMID]]"
  static let networkCode = "51636543"
  static let customAssetKey = "google-sample"
  static let APIKey = ""
  static let backupStreamURLString =
    "http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/master.m3u8"

  var adsLoader: IMAAdsLoader?
  ...

ライブまたは VOD の連続配信リクエストを作成する

ライブ配信連続配信広告

IMAPodStreamRequest をインスタンス化して、requestStream メソッドを変更してライブ Pod ストリーム リクエストを作成します。

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodStreamRequest(
      networkCode: self.networkCode,
      customAssetKey: self.customAssetKey,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

VOD ストリームの連続配信広告

IMAPodVODStreamRequest をインスタンス化して、requestStream メソッドを変更して VOD Pod ストリーム リクエストを作成します。

  ...

  func requestStream() {
    guard let playerViewController = self.playerViewController else return
    guard let adContainerView = self.adContainerView else return
    guard let adsLoader = self.adsLoader else return

    self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: adContainerView, viewController: self)

    // Create a podserving stream request.
    request = IMAPodVODStreamRequest(
      networkCode: self.networkCode,
      adDisplayContainer: adDisplayContainer,
      videoDisplay: self.videoDisplay,
      userContext: nil)

    adsLoader.requestStream(with: request)
  }

  ...

ストリーミング URL の編集と設定

ライブ配信連続配信広告

IMAAdsLoaderDelegate メソッドを変更し、streamManager.streamId を使用してストリーム ID を取得します。次に、ストリーム ID を STREAM_URL に挿入し、"[[STREAMID]]" を置き換えます。この変更が完了すると、videoDisplay.loadStream() を使用して新しいストリーム URL を設定できます。

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
    let loadedStreamUrl = URL(string:urlString)
    self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
    self.videoDisplay.play()
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

  ...

VOD ストリームの連続配信広告

IMAAdsLoaderDelegate メソッドを変更し、streamManager.streamId を使用してストリーム ID を取得します。次に、動画技術パートナー(VTP)にストリーム URL をリクエストし、IMAStreamManager.loadThirdPartyStream() を呼び出して、そのストリーム URL と TVP から返された字幕を IMA が読み込むようにします。

  ...

  // MARK: - IMAAdsLoaderDelegate
  func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
    let streamManager = adsLoadedData.streamManager
    let streamId = streamManager.streamId
    // 'vtpInterface' is a place holder for your own video technology partner
    // (VTP) API calls.
    let streamUrl = vtpInterface.requestStreamURL(streamID)
    self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
    streamManager.delegate = self
    streamManager.initialize(with: nil)
    self.streamManager = streamManager
  }

これで、これで、IMA DAI SDK for tvOS を使用して、連続配信広告配信ストリームで広告をリクエストして表示します。IMA DAI SDK を使用したその他の使用例については、GitHub のサンプルをご覧ください。