開始使用 IMA DAI SDK

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

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

DAI 廣告連播放送

本指南將說明如何使用 iOS 專用的 IMA DAI SDK 搭配影片播放器,播放 DAI 廣告連播放送直播或 VOD 串流。如要查看或瞭解完成的整合範例,請下載 Objective-CSwift 的 Pod 服務範例。

IMA DAI 廣告連播放送功能總覽

使用 iOS 版 IMA DAI SDK 導入廣告連播放送功能,需要兩個主要元件:

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

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

必要條件

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

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

設定 Pod 放送變數

您可以在 Swift 的 ViewController.swift 或 Objective-C 的 ViewController.m 中,完成 Pod 服務所需的所有變更。本指南中的程式碼片段預設使用 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 廣告連播串流要求

直播 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 串流 Pod 放送

修改 requestStream 方法,透過例項化 IMAPodVODStreamRequest 建立 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)
  }

  ...

編輯並設定串流網址

直播 Pod 放送

修改 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 串流 Pod 放送

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

大功告成!您現在可以使用 iOS 版 IMA DAI SDK 在 Pod 放送串流中,要求及顯示廣告。如要查看其他 IMA DAI SDK 使用範例,請參閱 GitHub 上的範例