设置 Pod 服务 DAI

请选择平台: HTML5 Android iOS tvOS Cast Roku

借助 IMA SDK,您可以轻松地将多媒体广告集成到您的网站和应用中。IMA SDK 可以向任何 符合 VAST 规范的广告服务器请求广告,并管理应用中的广告播放。借助 IMA DAI SDK,应用可以针对广告和内容视频(视频点播或直播内容)发出视频流请求。然后,SDK 会返回一个合并的视频流,这样您就不必在应用内管理广告视频和内容视频之间的切换。

本指南演示了如何使用 IMA DAI SDK 搭配视频播放器来播放 DAI Pod Serving 直播和 VOD 视频流。如需查看或遵循已完成的集成示例,请下载 Pod 投放示例。

IMA DAI Pod Serving 概览

  • StreamRequest:一个对象,用于定义向 Google 广告服务器发出的直播请求。必须使用 ImaSdkFactory.createPodStreamRequest() 或 ImaSdkFactory.createPodVodStreamRequest() 创建,才能启用广告连播投放。这些方法需要广告资源网代码,createPodStreamRequest 还需要自定义素材资源键和可选的 API 密钥。两者都包含其他可选参数。

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

前提条件

设置 Pod Serving 变量

Pod Serving 所需的所有更改都在 SampleAdsWrapper.java 中完成。第一步是更新常量变量。

以下是要添加的广告连播直播请求常量:

  • STREAM_URL:仅用于直播 - 由清单操纵器或使用广告连播投放的第三方合作伙伴提供的视频流网址。它应该要求您在发出请求之前插入 IMA DAI SDK 提供的直播 ID。在这种情况下,直播网址包含一个占位符 "[[STREAMID]]",在发出请求之前,该占位符会被替换为直播 ID。

  • NETWORK_CODE:您的 Ad Manager 360 账号的广告资源网代码。

  • CUSTOM_ASSET_KEY:仅用于直播 - 用于在 Ad Manager 360 中标识广告连播投放事件的自定义素材资源键。这可以由您的清单操纵器或第三方 Pod Serving 合作伙伴创建。

  • API_KEY:仅用于直播 - 可选 API 密钥,可能需要此密钥才能从 IMA DAI SDK 检索直播 ID。

Android DAI BasicExample 旨在播放各种不同的直播类型,但对于 Pod Serving,它已设置为仅播放单个直播。将示例的变量部分更改为以下内容:

/** This class implements IMA to add pod ad-serving support to SampleVideoPlayer */
@SuppressLint("UnsafeOptInUsageError")
/* @SuppressLint is needed for new media3 APIs. */
public class SampleAdsWrapper
    implements AdEvent.AdEventListener, AdErrorEvent.AdErrorListener, AdsLoader.AdsLoadedListener {

  // Set up the pod serving variables.
  private static final String NETWORK_CODE = "";
  private static final String CUSTOM_ASSET_KEY = "";
  private static final String API_KEY = "";
  private static final String STREAM_URL = "";
  private static final StreamFormat STREAM_FORMAT = StreamFormat.HLS;

创建直播或 VOD 广告连播视频流请求,以启用广告连播投放

直播广告连播投放

移除了用于在构建各种流类型之间切换的方法 buildStreamRequest()。然后,修改 requestAndPlayAds() 以调用 ImaSdkFactory.createPodStreamRequest(),从而创建 Live Pod Serving 广告请求。

// Live pod stream request.
request = sdkFactory.createPodStreamRequest(NETWORK_CODE, CUSTOM_ASSET_KEY, API_KEY);

VOD 视频流 Pod 投放

移除了用于在构建各种流类型之间切换的方法 buildStreamRequest()。然后,修改 requestAndPlayAds() 以调用 ImaSdkFactory.createPodVodStreamRequest(),从而创建 VOD 广告连播投放广告请求。

// VOD pod stream request.
request = sdkFactory.createPodVodStreamRequest(NETWORK_CODE);

创建直播请求实例后,使用 AdsLoader.requestStream() 请求直播:

request.setFormat(STREAM_FORMAT);
adsLoader.requestStream(request);

修改和设置直播网址

直播广告连播投放

调用 StreamManager.getStreamId() 方法以获取数据流 ID。需要将其插入到 STEAM_URL 中,替换 "[[STREAMID]]"。完成此更改后,使用 videoPlayer.setStreamUrl() 方法设置新的直播网址,并调用 videoPlayer.play() 方法开始直播播放。

// Play the live pod stream.
streamID = streamManager.getStreamId();
String liveStreamUrl = STREAM_URL.replace("[[STREAMID]]", streamID);
// Call videoPlayer.play() here, because IMA doesn't call the VideoStreamPlayer.loadUrl()
// function for livestreams.
videoPlayer.setStreamUrl(liveStreamUrl);
videoPlayer.play();

VOD 视频流 Pod 投放

  1. 调用 StreamManager.getStreamId() 方法以获取数据流 ID。
  2. 向您的视频技术合作伙伴 (VTP) 请求直播网址。
  3. 从 VTP 收到网址后,调用 StreamManager.loadThirdPartyStream() 方法,并传入该网址以加载视频流,同时传入 VTP 返回的所有字幕。
// Play the VOD pod stream.
streamID = streamManager.getStreamId();
String vodStreamUrl = "";
// Refer to your Video Tech Partner (VTP) or video stitching guide to fetch the stream URL
// and the subtitles for a the ad stitched VOD stream.

// In the following commented out code, 'vtpInterface' is a place holder
// for your own video technology partner (VTP) API calls.
// vodStreamUrl = vtpInterface.requestStreamURL(streamID);
List<Map<String, String>> subtitles = new ArrayList<>();
streamManager.loadThirdPartyStream(vodStreamUrl, subtitles);

对于 VOD Pod 投放请求,IMA 会在视频流加载完毕后调用 VideoStreamPlayer.loadUrl() 回调。如需开始播放直播,请将 videoPlayer.setStreamUrl() 和 videoPlayer.play() 调用添加到 VideoStreamPlayer.loadUrl() 回调中:

private VideoStreamPlayer createVideoStreamPlayer() {
  return new VideoStreamPlayer() {
    @Override
    public void loadUrl(String url, List<HashMap<String, String>> subtitles) {
      // IMA doesn't make calls to VideoStreamPlayer.loadUrl() for pod serving live streams.
      // The following code is for VOD streams.
      videoPlayer.setStreamUrl(url);
      videoPlayer.play();
    }

清理 IMA DAI 资源

当您使用 IMA DAI SDK 成功完成在广告连播投放流中请求和展示广告后,我们建议您在广告连播投放会话完成后清理所有资源。调用 StreamManager.destroy() 可停止流播放、停止所有广告跟踪并释放所有已加载的流素材资源。

如需查看 Android SDK 的其他使用示例,请参阅 GitHub 上的示例。