开始使用 IMA DAI SDK

借助 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 和将串流事件转发给发布商。

前提条件

设置 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 上的示例