IMA SDK 可让您轻松地将多媒体广告集成到您的网站和应用中。IMA SDK 可以 向任意 <ph type="x-smartling-placeholder"></ph> 符合 VAST 标准的广告服务器,并管理应用中的广告播放。借助 IMA DAI SDK,应用 针对广告和内容视频(VOD 或直播内容)的视频流请求。然后,SDK 会返回 组合视频流,因此您无需管理在广告与内容视频之间的切换 。
选择您感兴趣的 DAI 解决方案
广告连播投放 DAI
本指南将演示如何使用 结合使用 IMA DAI SDK for iOS 与简单的视频播放器。如果您想关注 以及完整的示例,请下载 广告连播投放示例
IMA DAI Pod Serving 概览
使用适用于 iOS 的 IMA DAI SDK 实现广告连播投放涉及到两个主要 组件:
StreamRequest
:一个对象,用于定义流请求 与 Google 的广告服务器通信必须使用IMAPodStreamRequest
或IMAPodVODStreamRequest
来启用 Pod 传送这两种方法都需要网络代码和IMAPodStreamRequest
还需要一个自定义资产键。API 密钥是 可选属性。IMAStreamManager
:用于处理 视频流和 IMA DAI SDK(例如,触发跟踪 ping 和 将视频流事件转发给发布商。
前提条件
在开始之前,您需要做好以下准备:
- Xcode 13 或更高版本。
- CocoaPods(首选)、Swift Package Manager 或 下载了 适用于 iOS 的 IMA DAI SDK。
- 已设置 IMA DAI SDK 的 iOS 应用可通过 DAI 广告。如果您还没有此类应用程序,我们建议您使用 iOS DAI BasicExample 的形式 起点BasicExample 中包含这个 指南。如需详细了解如何实施 IMA DAI SDK,请参阅 快速入门指南。
设置 Pod 服务变量
Pod 传送所需的所有更改都在 ViewController.swift 中完成: swift 或 ViewController.m(在 Objective-C 中)。本指南中的代码段 默认使用 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
方法以通过以下方法创建实时 Pod 流请求:
正在实例化 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 视频流广告连播投放
使用 streamManager.streamId
修改 IMAAdsLoaderDelegate
方法,
获取数据流 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 上的示例。