設定 DAI 專用的 IMA SDK

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

選取您感興趣的 DAI 解決方案

廣告連播放送 DAI

本指南說明如何使用 tvOS 適用的 IMA DAI SDK,透過影片播放器播放 DAI 廣告連播放送直播或隨選影片串流。如要查看或追蹤完成的整合範例,請下載 Pod Serving 範例應用程式 (Obj CSwift)。

IMA DAI 廣告連播放送總覽

使用 tvOS 適用的 IMA DAI SDK 導入廣告連播放送功能時,會用到兩個主要元件:

  • StreamRequest:這個物件會定義向 Google 廣告伺服器發出的串流請求。必須使用 IMAPodStreamRequestIMAPodVODStreamRequest 建立,才能啟用廣告連播放送。這兩種方法都需要網路代碼,而 IMAPodStreamRequest 也需要自訂資產金鑰API 金鑰為選用項目。

  • IMAStreamManager:處理影片串流和 IMA DAI SDK 之間通訊的物件,例如觸發追蹤 Ping 和將串流事件轉送給發布商。

必要條件

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

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

設定 Pod Serving 變數

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

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

  • STREAM_URL (僅用於直播):由資訊清單操控器或第三方合作夥伴提供,使用廣告連播放送的影片串流網址。您必須先插入 IMA DAI SDK 提供的串流 ID,才能提出要求。在本例中,串流網址包含預留位置 "[[STREAMID]]",系統會在提出要求前將其替換為串流 ID。
  • NETWORK_CODE:Ad Manager 360 帳戶的聯播網代碼。
  • CUSTOM_ASSET_KEY (僅適用於直播):自訂資產金鑰,用於在 Ad Manager 360 中識別 Pod Serving 事件。這類資訊可由資訊清單操控器或第三方廣告連播放送合作夥伴建立。
  • API_KEY (僅適用於直播):選用 API 金鑰,可從 IMA DAI SDK 擷取串流 ID,但可能需要此金鑰。

將範例的變數區段變更為下列內容:

...
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 放送

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

  ...

編輯及設定串流網址

直播 Pod 放送

使用 streamManager.streamId 取得串流 ID,然後修改 IMAAdsLoaderDelegate 方法。然後將資料串流 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 串流廣告連播放送

使用 streamManager.streamId 取得串流 ID,然後修改 IMAAdsLoaderDelegate 方法。接著,向影片技術合作夥伴 (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
  }

清理 IMA DAI 資產

使用 IMA DAI SDK 成功在 Pod Serving 串流中請求及顯示廣告後,建議您在 Pod Serving 工作階段完成後清除所有資源。呼叫 IMAStreamManager.destroy() 即可停止串流播放、停止所有廣告追蹤,並釋出所有已載入的串流資產。

如要查看 tvOS SDK 的其他使用範例,請參閱 GitHub 上的範例