借助 IMA SDK,您可以轻松将多媒体广告集成到您的网站和应用中。IMA SDK 可以从任何 与 VAST 兼容的广告服务器请求广告,并管理应用中的广告播放。借助 IMA DAI SDK,应用可以针对广告和内容视频(VOD 或直播内容)发出流式传输请求。然后,SDK 会返回一个合并的视频串流,这样您就不必在应用中管理广告视频和内容视频之间的切换。
选择您感兴趣的 DAI 解决方案
Pod Serving DAI
借助 IMA SDK,您可以轻松将多媒体广告集成到您的网站和应用中。IMA SDK 可以从任何 与 VAST 兼容的广告服务器请求广告,并管理应用中的广告播放。借助 IMA DAI SDK,应用可以针对广告和内容视频(VOD 或直播内容)发出流式传输请求。然后,SDK 会返回一个合并的视频串流,这样您就不必在应用中管理广告视频和内容视频之间的切换。
本指南演示了如何将 IMA DAI SDK 与视频播放器搭配使用,以便播放直播和视频点播流。如需查看或遵循已完成的示例集成,请下载Pod 提取示例。
IMA DAI Pod Serving 概览
StreamRequest
:用于定义对 Google 广告服务器的串流请求的对象。必须使用ImaSdkFactory.createPodStreamRequest()
或ImaSdkFactory.createPodVodStreamRequest()
创建,才能启用 Pod 分发。这些方法需要广告网络代码,createPodStreamRequest
还需要自定义素材资源键和可选的 API 密钥。这两种方法都包含其他可选参数。StreamManager
:用于处理视频串流与 IMA DAI SDK 之间的通信的对象,例如触发跟踪 ping 和将串流事件转发给发布商。
前提条件
已使用 IMA DAI SDK 设置的 Android 应用,用于播放包含 DAI 广告的视频流。如果您还没有这样的应用,我们建议您使用 Android DAI BasicExample 作为起点。BasicExample 包含本指南中引用的代码库。
您的应用必须使用
VideoStreamPlayerCallback.onUserTextReceived()
发送 ID3 事件,否则 IMA DAI 将无法正常运行。请参阅此完整服务 DAI 代码段示例。
设置 Pod Serving 变量
所有 Pod 投放所需的更改都在 SampleAdsWrapper.java 中完成。第一步是更新常量变量。
以下是要添加的广告连播数据流请求常量:
STREAM_URL
:仅用于直播 - 您的清单处理方或使用 Pod Serving 的第三方合作伙伴提供的视频串流网址。您需要先插入 IMA DAI SDK 提供的直播 ID,然后才能发出请求。在这种情况下,数据流网址包含一个占位符"[[STREAMID]]"
,系统会在发出请求之前将其替换为数据流 ID。NETWORK_CODE
:您的 Ad Manager 360 账号的广告资源网代码。CUSTOM_ASSET_KEY
:仅适用于直播 - 用于在 Ad Manager 360 中标识广告连播投放事件的自定义素材资源键。此文件可以由您的清单操纵器或第三方广告连播服务合作伙伴创建。API_KEY
:仅用于直播 - 可选 API 密钥,可能需要此密钥才能从 IMA DAI SDK 检索直播 ID。
Android DAI BasicExample 旨在播放各种不同的串流类型,但对于广告连播投放,它会设置为仅播放单个串流。将示例的变量部分更改为以下内容:
/** This class adds ad-serving support to Sample HlsVideoPlayer */
public class SampleAdsWrapper
implements AdEvent.AdEventListener, AdErrorEvent.AdErrorListener, AdsLoader.AdsLoadedListener {
// Podserving Stream Constants.
private static final String STREAM_URL =
"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]]";
private static final String NETWORK_CODE = "51636543";
private static final String CUSTOM_ASSET_KEY = "google-sample";
private static final String API_KEY = "";
private static final String PLAYER_TYPE = "DAISamplePlayer";
/** Log interface, so we can output the log commands to the UI or similar. */
public interface Logger {
...
创建直播或 VOD 连播流请求以启用连播投放
直播连播投放
移除了用于在构建各种数据流类型之间切换的方法 buildStreamRequest()
。然后,更改 requestAndPlayAds()
以调用 ImaSdkFactory.createPodStreamRequest()
来创建实时广告连播投放广告请求。最后,使用 AdsLoader.requestStream()
请求数据流。
public void requestAndPlayAds() {
StreamRequest request =
sdkFactory.createPodStreamRequest(NETWORK_CODE, CUSTOM_ASSET_KEY, API_KEY);
request.setFormat(StreamFormat.HLS);
adsLoader.addAdErrorListener(this);
adsLoader.addAdsLoadedListener(this);
adsLoader.requestStream(request);
}
VOD 视频流 Pod 投放
移除了用于在构建各种数据流类型之间切换的方法 buildStreamRequest()
。然后,更改 requestAndPlayAds()
以调用 ImaSdkFactory.createPodVodStreamRequest()
来创建 VOD 连播广告投放请求。最后,使用 AdsLoader.requestStream()
请求数据流。
public void requestAndPlayAds() {
StreamRequest request =
sdkFactory.createPodVodStreamRequest(NETWORK_CODE);
request.setFormat(StreamFormat.HLS);
adsLoader.addAdErrorListener(this);
adsLoader.addAdsLoadedListener(this);
adsLoader.requestStream(request);
}
修改并设置数据流网址
直播连播投放
调用 StreamManager.getStreamId()
以获取数据流 ID。然后,需要将其插入 STEAM_URL
中,替换 "[[STREAMID]]"
。进行此更改后,您可以使用 videoPlayer.setStreamUrl()
设置新的直播网址。
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent event) {
streamManager = event.getStreamManager();
streamManager.addAdErrorListener(this);
streamManager.addAdEventListener(this);
// To enable streams
String streamID = streamManager.getStreamId();
String streamUrl = STREAM_URL.replace("[[STREAMID]]", streamID);
streamManager.init();
videoPlayer.setStreamUrl(streamUrl);
videoPlayer.play();
}
VOD 视频流 Pod 投放
调用 StreamManager.getStreamId()
以获取数据流 ID。然后,向您的视频技术合作伙伴 (VTP) 请求串流网址。然后调用 StreamManager.loadThirdPartyStream()
,让 IMA 加载您的 TVP 返回的直播网址和所有字幕。
@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent event) {
streamManager = event.getStreamManager();
streamManager.addAdErrorListener(this);
streamManager.addAdEventListener(this);
// To enable streams
String streamID = streamManager.getStreamId();
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
String streamUrl = vtpInterface.requestStreamURL(streamID);
streamManager.init();
// Pass any subtitles returned by your VTP in this step as well.
streamManager.loadThirdPartyStream(streamUrl, subtitles);
}
启用 Pod 广告投放后,IMA 不会调用 VideoStreamPlayer.loadUrl()
,因此您可以从中移除对 videoPlayer.setStreamUrl()
和 videoPlayer.play()
的所有调用。
清理 IMA DAI 素材资源
使用 IMA DAI SDK 在广告连播中成功请求和展示广告后,我们建议您在广告连播会话结束后清理所有资源。调用 StreamManager.destroy()
可停止流式播放、停止所有广告跟踪,并释放所有已加载的流式资产。
如需查看使用 Android SDK 的其他示例,请参阅 GitHub 上的示例。