HLS 插页式广告规范提供了一种灵活的方式来安排广告并将其插入视频或音频流中。采用客户端方法时,您的应用可以通过创建 AVPlayerInterstitialEvent 类来完全控制何时请求和播放广告插播。此方法不需要在内容流清单中添加 EXT-X-DATERANGE 标记。借助客户端 HLS 插播广告,您可以将广告动态插入到任何内容中,而无需修改流清单或媒体文件。
本指南介绍了如何将互动式媒体广告 (IMA) SDK 集成到视频播放器应用中,该应用可创建服务器引导的广告插播 (SGAI) 直播会话,并在客户端安排插页式广告。如需了解详情,请参阅服务器引导的 DAI。
前提条件
在开始之前,您需要做好以下准备:
一个使用
Storyboard作为用户界面的新 Xcode 项目。如需了解详情,请参阅为应用创建 Xcode 项目。Google IMA SDK。如需了解详情,请参阅为 DAI 设置 IMA SDK。
DAI 直播请求的以下参数:
NETWORK_CODE:您的 Google Ad Manager 广告资源网代码。CUSTOM_ASSET_KEY:用于标识 DAI 直播活动的自定义字符串。直播活动必须具有“广告连播投放清单”DAI 类型。
配置分镜画面
在 iPhone.storyboard 文件中,执行以下操作:
- 创建一个
UIView对象,作为视频播放器和广告界面的容器。 - 创建
ViewController类的adUIView属性,以与UIView对象连接。 - 在
adUIView对象中,创建一个UIButton作为播放按钮。 - 创建
ViewController类的playButton属性以与UIButton对象建立连接,并创建onPlayButtonTouch函数来处理用户点按操作。
初始化广告加载程序
在主视图控制器的 viewDidLoad 事件中,执行以下操作:
- 使用
AVPlayer和AVPlayerLayer类设置视频播放器。 - 创建
IMAAdDisplayContainer和IMAAVPlayerVideoDisplay对象。广告显示容器指定了adUIView,以便 IMA DAI SDK 插入广告界面子视图。视频显示对象充当 IMA DAI SDK 的广告逻辑与 AVFoundation 播放系统之间的桥梁,用于跟踪视频广告的播放情况。 - 使用广告播放和广告界面本地化设置初始化
IMAAdsLoader对象。
以下示例使用空的 IMASettings 对象初始化广告加载器:
发出流式请求
如需为内容流请求广告,请创建一个 IMAPodStreamRequest 对象并将其传递给 IMAAdsLoader 实例。(可选)设置 adTagParameters 属性,为您的视频流提供 DAI 选项和定位参数。
此示例在 viewDidAppear 事件中调用 loadAdStream 方法:
在正式版应用中,请在用户选择内容流后调用 loadAdStream 方法。
处理流加载事件
实现 IMAAdsLoaderDelegate 协议,以处理流请求的成功或失败情况:
- 成功后,您会收到一个包含
IMAStreamManager的IMAAdsLoadedData对象。存储当前 DAI 会话的streamManager.streamId值。 - 如果失败,则记录错误。
以下示例处理了流加载事件,并记录了流加载失败事件:
安排广告插播时间
如需安排广告插播时间,请创建一个 AVPlayerInterstitialEvent 对象。将事件对象的 templateItems 属性设置为 AVPlayerItem 对象数组,其中每个商品对象都包含一个广告插播清单网址。
如需构建广告插播清单网址,请参阅方法:HLS 插播清单文档。
出于演示目的,以下示例使用内容直播的当前时间生成 pod 标识符字符串。generatePodIdentifier 函数以 ad_break_id/mid-roll-{minute} 形式返回 pod 标识符。
在正式版应用中,从一个为每个广告插播时间点提供唯一值的来源检索 pod 标识符,该标识符会针对直播的所有观看者进行同步。
以下示例安排了一个广告插播,该插播将在用户点击播放按钮后的两分钟内开始:
scheduleAdInsertion 方法用于计算广告插播开始时间并构建广告连播清单网址。使用此网址创建 AVPlayerInterstitialEvent 对象。
(可选)使用 AVPlayerInterstitialEvent.Restrictions 结构体来限制用户在广告播放期间跳过或快退。
处理广告事件
如需处理广告事件,请实现 IMAStreamManagerDelegate 协议。借助此方法,您可以跟踪广告插播的开始和结束时间,并获取有关各个广告的信息。
运行您的应用。如果成功,您可以使用 Pod 服务清单流请求和播放插页式广告。