DAI 用 IMA SDK を設定する

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

関心のある DAI ソリューションを選択する

Pod Serving DAI

このガイドでは、tvOS 向け IMA DAI SDK と動画プレーヤーを使用して、DAI Pod Serving のライブ ストリームまたは VOD ストリームを再生する方法について説明します。完了したサンプル統合を表示またはフォローするには、Pod Serving サンプルアプリ(Obj C または Swift)をダウンロードします。

IMA DAI Pod Serving の概要

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

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

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

前提条件

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

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

Pod Serving 変数を設定する

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

追加する広告ポッド ストリーム リクエスト定数は次のとおりです。

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

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

...
class ViewController:
  UIViewController,
  IMAAdsLoaderDelegate,
  IMAStreamManagerDelegate,
  AVPlayerViewControllerDelegate
{
  static let streamUrl = ""
  static let networkCode = ""
  static let customAssetKey = ""
  static let APIKey = ""
  static let backupStreamURLString = ""

  var adsLoader: IMAAdsLoader?
  ...

ライブまたは VOD ポッド ストリーム リクエストを作成する

ライブ配信 Pod の配信

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

  ...

  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 ストリームの Pod Serving

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

  ...

  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 を編集して設定する

ライブ配信 Pod の配信

streamManager.streamId を使用してストリーム ID を取得するように IMAAdsLoaderDelegate メソッドを変更します。次に、STREAM_URL にストリーム ID を挿入し、"[[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 ストリームの Pod Serving

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

  ...

  // 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 アセットをクリーンアップする

IMA DAI SDK を使用して Pod サービング ストリームで広告のリクエストと表示を正常に完了したら、Pod サービング セッションの完了後にリソースをクリーンアップすることをおすすめします。IMAStreamManager.destroy() を呼び出して、ストリームの再生を停止し、すべての広告トラッキングを停止して、読み込まれたすべてのストリーム アセットを解放します。

tvOS SDK の使用例については、GitHub のサンプルをご覧ください。