開始使用 IMA DAI SDK

您可以使用 IMA SDK 輕鬆將多媒體廣告整合至網站和應用程式。IMA SDK 可以從任何 符合 VAST 規定的廣告伺服器請求廣告,並管理在應用程式中播放的廣告。使用 IMA DAI SDK 時,應用程式會向廣告和內容影片 (VOD 或直播內容) 發出串流請求。接著,SDK 會傳回合併的影片串流,因此您不必在應用程式中管理廣告和內容影片之間的切換。

選取感興趣的動態廣告解決方案

廣告連播放送 DAI

本指南將示範如何使用 tvOS 的 IMA DAI SDK 搭配簡易的影片播放器,播放 DAI 廣告連播放送直播或 VOD 串流。如果您想按照完成的範例操作,請下載 Pod 服務範例應用程式 (Obj CSwift)。

IMA DAI 廣告連播放送總覽

使用 IMA DAI SDK for tvOS 實作 Pod 服務,需要兩個主要元件:

  • StreamRequest:定義傳送至 Google 廣告伺服器的串流要求的物件。您必須使用 IMAPodStreamRequestIMAPodVODStreamRequest 建立,才能啟用 Pod 服務。這兩種方法都需要網路代碼IMAPodStreamRequest 也需要自訂資產金鑰API 金鑰為選填項目。

  • IMAStreamManager:這個物件會處理影片串流和 IMA DAI SDK 之間的通訊,例如發送追蹤 ping 和將串流事件轉寄給發布者。

必要條件

開始之前,請先備妥以下項目:

  • Xcode 13 以上版本。
  • CocoaPods (建議使用)、Swift Package Manager 或 IMA DAI SDK for tvOS 的下載副本。
  • 已使用 IMA DAI SDK 設定 tvOS 應用程式,以便播放含有 DAI 廣告的影片串流。如果您還沒有這類應用程式,建議您使用 tvOS DAI 基本範例做為起點。BasicExample 包含本指南所參照的程式碼集。如要進一步瞭解如何導入 IMA DAI SDK,請參閱快速入門指南

設定廣告連播放送變數

Pod 放送所需的所有變更都是在 ViewController.swiftSwift 或 ViewController.m Objective-C 中完成。本指南中的程式碼片段預設使用 Swift 語言。第一步是更新常數變數。

以下是新增的廣告連播串流要求常數:

  • STREAM_URL (僅用於直播):使用 Pod 服務的資訊清單操作者或第三方合作夥伴提供的影片串流網址。在發出請求之前,您應該先插入 IMA DAI SDK 提供的串流 ID。在這種情況下,串流網址會包含預留位置 "[[STREAMID]]",系統會在提出要求前將其替換為串流 ID。
  • NETWORK_CODE:Ad Manager 360 帳戶的聯播網代碼。
  • CUSTOM_ASSET_KEY (僅用於直播):在 Ad Manager 360 中,用於識別廣告連播放送事件的自訂資產鍵。資訊清單操控工具或第三方廣告連播放送合作夥伴可以建立這項資訊。
  • API_KEY (僅適用於直播):此為選用的 API 金鑰,可從 IMA DAI SDK 擷取串流 ID。

將範例的變數區段改為以下內容:

...
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 廣告連播串流要求

直播廣告連播放送

修改 requestStream 方法,透過例項化 IMAPodStreamRequest 建立直播 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 串流廣告連播放送

修改 requestStream 方法,透過例項化 IMAPodVODStreamRequest 建立 VOD 專輯串流要求。

  ...

  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)
  }

  ...

編輯並設定串流網址

直播廣告連播放送

修改 IMAAdsLoaderDelegate 方法,使用 streamManager.streamId 取得串流 ID。然後將串流 ID 插入 STREAM_URL,取代 "[[STREAMID]]"。變更完成後,您可以使用 videoDisplay.loadStream() 設定新的串流網址。

  ...

  // 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) 要求串流網址,然後呼叫 IMAStreamManager.loadThirdPartyStream(),讓 IMA 載入串流網址和 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
  }

大功告成!現在,您會使用適用於 tvOS 的 IMA DAI SDK,在廣告連播放送串流中要求及顯示廣告。如要查看其他使用 IMA DAI SDK 的範例,請參閱 GitHub 上的範例