开始使用 IMA DAI SDK

IMA SDK 可让您轻松地将多媒体广告集成到您的网站和应用中。IMA SDK 可从任何 符合 VAST 标准的广告服务器请求广告,并管理您应用中的广告播放。使用 IMA DAI SDK 时,应用会针对广告和内容视频(VOD 或直播内容)发出视频流请求。然后,SDK 会返回组合的视频流,因此您无需在应用中管理广告与内容视频之间的切换。

选择您感兴趣的 DAI 解决方案

广告连播投放 DAI

本指南演示了如何结合使用 IMA DAI SDK for iOS 和简单的视频播放器来播放 DAI Pod Serving 直播或 VOD 视频流。如果您想查看已完成的示例,请下载 pod 传送示例

IMA DAI Pod Serving 概览

使用 iOS 版 IMA DAI SDK 实现广告连播投放涉及两个主要组件:

  • StreamRequest:用于定义向 Google 广告服务器的数据流请求的对象。必须使用 IMAPodStreamRequestIMAPodVODStreamRequest 创建,才能启用 Pod 传送。这两种方法都需要网络代码IMAPodStreamRequest 还需要自定义资产键API 密钥是可选的。

  • IMAStreamManager:用于处理视频流与 IMA DAI SDK 之间的通信的对象,例如触发跟踪 ping 以及将视频流事件转发给发布商。

前提条件

在开始之前,您需要做好以下准备:

  • Xcode 13 或更高版本。
  • CocoaPods(首选)、Swift Package Manager 或 IMA DAI SDK for iOS 的下载副本。
  • 已设置 IMA DAI SDK 的 iOS 应用可播放包含 DAI 广告的视频流。如果您还没有此类应用,我们建议您使用 iOS DAI BasicExample 作为起点。BasicExample 包含本指南中引用的代码库。如需详细了解如何实现 IMA DAI SDK,请参阅快速入门指南

设置 Pod 服务变量

Pod 传送所需的所有更改在 swift 中的 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 投放事件。这可以由您的清单操纵器或第三方 Pod 传送合作伙伴创建。
  • API_KEY(仅用于直播活动):从 IMA DAI SDK 检索视频流 ID 时需要使用的可选 API 密钥。

更改示例的变量部分以匹配以下内容:

...
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 广告连播视频流请求

直播广告连播投放

通过实例化 IMAPodStreamRequest 修改 requestStream 方法以创建实时 Pod Stream 请求。

  ...

  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 修改 requestStream 方法,以创建 VOD Pod Stream 请求。

  ...

  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
  }

大功告成!现在,您正在通过 IMA DAI SDK for iOS 在广告连播投放流中请求并展示广告。要查看正在使用的 IMA DAI SDK 的其他示例,请参阅 GitHub 上的示例