开始使用 IMA DAI SDK

IMA SDK 可让您轻松地将多媒体广告集成到您的网站和应用中。IMA SDK 可以 向任意 <ph type="x-smartling-placeholder"></ph> 符合 VAST 标准的广告服务器,并管理应用中的广告播放。借助 IMA DAI SDK,应用 针对广告和内容视频(VOD 或直播内容)的视频流请求。然后,SDK 会返回 组合视频流,因此您无需管理在广告与内容视频之间的切换 。

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

广告连播投放 DAI

本指南将演示如何使用 集成了适用于 tvOS 的 IMA DAI SDK 与简单的视频播放器。如果您想按照已完成的示例操作,请下载 Pod 服务示例应用(Objective-CSwift)。

IMA DAI Pod Serving 概览

使用适用于 tvOS 的 IMA DAI SDK 实现广告连播投放涉及两个主要步骤 组件:

  • StreamRequest:一个对象,用于定义流请求 与 Google 的广告服务器通信必须使用 IMAPodStreamRequestIMAPodVODStreamRequest 创建,才能启用 pod 分发。这两种方法都需要影音平台代码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 投放变量

Pod 传送所需的全部更改都在以下位置的 ViewController.swift 中完成: 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 中标识广告连播投放事件此文件可以由清单操纵器或第三方连播投放合作伙伴创建。
  • 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

  ...

  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 方法,以便通过以下方式创建 VOD Pod 视频流请求: 正在实例化 IMAPodVODStreamRequest

  ...

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

  ...

修改并设置数据流网址

直播广告连播投放

使用 streamManager.streamId 修改 IMAAdsLoaderDelegate 方法, 获取数据流 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 上的示例