開始使用 IMA DAI SDK

使用 IMA SDK,您就能輕鬆地將多媒體廣告整合至網站和應用程式。IMA SDK 可以 向任何 符合 VAST 規定的廣告伺服器請求廣告,並管理應用程式中的廣告播放情形。透過 IMA DAI SDK,應用程式會針對 VOD 或直播內容,對廣告和內容影片發出串流請求。接著,SDK 會傳回合併的影片串流,這樣您無須管理應用程式內的廣告和內容影片切換作業。

選取感興趣的 DAI 解決方案

廣告連播放送 DAI

本指南說明如何透過簡易影片播放器,使用 iOS 適用的 IMA DAI SDK 播放 DAI 廣告連播放送直播或 VOD 串流。如果想要跟著完成的範例,請下載 Pod 提供範例

IMA DAI 廣告連播放送總覽

使用 iOS 版 IMA DAI SDK 導入 Pod 放送功能時涉及兩個主要元件:

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

  • IMAStreamManager:這個物件會處理影片串流與 IMA DAI SDK 之間的通訊,例如觸發追蹤連線偵測 (ping),以及轉送串流事件給發布商。

必要條件

開始之前,您需要擁有下列項目:

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

設定 Pod 放送變數

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

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

  • STREAM_URL (僅適用於直播):資訊清單操控器或使用 Pod 放送功能的第三方合作夥伴所提供的影片串流網址。在提出要求之前,您應該先插入 IMA DAI SDK 提供的串流 ID。在此例中,串流網址在提出要求之前,會包含一個預留位置 "[[STREAMID]]",而該預留位置會替換成串流 ID。
  • NETWORK_CODE:Ad Manager 360 帳戶的聯播網代碼。
  • CUSTOM_ASSET_KEY (僅適用於直播):自訂素材資源鍵,可用來識別 Ad Manager 360 中的廣告連播放送事件。這可透過資訊清單操控器或第三方 Pod 放送合作夥伴建立。
  • 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 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)
  }

  ...

編輯及設定串流網址

直播廣告連播放送

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

大功告成!您目前使用 iOS 版 IMA DAI SDK,在廣告連播放送串流中請求及顯示廣告。若想查看使用中 IMA DAI SDK 的其他範例,請查看 GitHub 上的範例