开始使用 IMA DAI SDK

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

选择您感兴趣的 DAI 解决方案

Pod 投放 DAI

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

本指南将演示如何使用 IMA Android DAI SDK 和简单的视频播放器来播放 DAI Pod Serving 流,以进行直播和 VOD 流播放。如果您想要查看或跟进完成的示例集成,请下载 Pod 投放示例

IMA DAI Pod Serving 概览

前提条件

设置 Pod 服务变量

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

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

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

  • NETWORK_CODE:您的 Ad Manager 360 帐号的广告联盟代码。

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

  • API_KEY仅用于直播 - 从 IMA DAI SDK 检索视频流 ID 时需要使用的可选 API 密钥。

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

/** 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 视频流广告连播投放

移除了曾用于在构建各种流类型之间切换的 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 视频流广告连播投放

调用 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 Android DAI SDK 请求在 Pod 投放流中展示广告。如需查看正在使用的 Android SDK 的其他示例,请参阅 GitHub 上的示例