Pod サービス DAI を設定する

プラットフォームを選択: HTML5 Android iOS tvOS Cast Roku

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

IMA DAI Pod Serving の概要

tvOS 向け IMA DAI SDK を使用して連続配信広告の配信を実装するには、主に次の 2 つのコンポーネントが必要です。

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

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

前提条件

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

  • Xcode 13 以降。
  • IMA 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(ライブ配信でのみ使用): マニフェスト マニピュレーターまたは連続広告配信を使用するパートナー事業者から提供される動画ストリームの URL。リクエストを行う前に、IMA DAI SDK から提供されたストリーム ID を挿入する必要があります。この場合、ストリーム URL にはプレースホルダ "[[STREAMID]]" が含まれています。リクエストを行う前に、このプレースホルダをストリーム ID に置き換えます。
  • NETWORK_CODE: アド マネージャー 360 アカウントのネットワーク コード。
  • CUSTOM_ASSET_KEY(ライブ配信でのみ使用): アド マネージャー 360 で広告連続配信イベントを識別するカスタム アセットキー。これは、マニフェスト マニピュレータまたはサードパーティの 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 の連続配信広告ストリーム リクエストを作成する

ライブ配信の連続広告配信

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 ストリームの連続配信

IMAPodVODStreamRequest をインスタンス化して VOD 連続配信広告ストリーム リクエストを作成するように、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 を編集して設定する

ライブ配信の連続広告配信

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() を呼び出して、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 を使用して連続配信ストリームで広告をリクエストして表示する処理が正常に完了したら、連続配信セッションの完了後にリソースをクリーンアップすることをおすすめします。IMAStreamManager.destroy() を呼び出して、ストリームの再生を停止し、すべての広告のトラッキングを停止して、読み込まれたすべてのストリーム アセットを解放します。

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