将 IMA DAI SDK 与 HTML5 客户端搭配使用

播放通过 Google Cloud Video Stitcher API 注册的直播

本指南介绍了如何使用 HTML5 版 IMA DAI SDK 为通过 Google Cloud Video Stitcher API 注册的事件请求并播放直播,以及如何在播放期间插入广告插播时间点。

本指南对 IMA DAI 入门指南中的基本示例进行了扩展。

如需了解如何与其他平台集成或使用 IMA 客户端 SDK,请参阅互动式媒体广告 SDK

设置 Google Cloud 项目

输入以下变量,以便在 IMA SDK 中使用:

位置
创建实时配置的 Google Cloud 区域LOCATION
项目编号
使用 Video Stitcher API 的 Google Cloud 项目编号:PROJECT_NUMBER
OAuth 令牌

具有 Video Stitcher 用户角色的服务帐号的短期有效 OAuth 令牌:

OAUTH_TOKEN

详细了解如何为服务帐号创建短期有效凭据。只要 OAuth 令牌未过期,就可以在多个请求中重复使用。

广告资源网代码

用于请求广告的 Ad Manager 广告资源网代码: NETWORK_CODE

实时配置 ID
您在创建直播活动时指定的直播配置 ID: LIVE_CONFIG_ID
自定义素材资源键
在使用 Video Stitcher API 为直播活动创建配置的过程中生成的 Ad Manager 自定义素材资源键: CUSTOM_ASSET_KEY

配置开发环境

IMA 示例应用仅展示 HLS 视频流请求。在构建 VideoStitcherLiveStreamRequest 类时,您仍然可以使用 DASH 流。设置与 DASH 兼容的播放器时,您需要为视频播放器的进度事件设置监听器,该监听器可将视频的元数据提供给 StreamManager.processMetadata()。此函数采用三个参数:

  1. type:一个字符串,对于 HLS 视频流,必须设置为 'ID3';对于 DASH 视频流,必须设置为 'urn:google:dai:2018'

  2. data:对于 DASH 事件消息,则为消息数据字符串。

  3. timestamp:一个数字,即 DASH 流的事件消息开始时间。

根据您的播放器事件所提供的频率和频率,尽快发送元数据。如果元数据缺失或不正确,则 IMA DAI SDK 可能不会触发广告事件,从而导致广告事件报告不正确。

下载适用于 HTML5 的 IMA DAI 示例,并将 HLS.js Simple 示例提取到新文件夹中。此示例是一个可托管在本地以进行测试的 Web 应用。

如需在本地托管示例,请导航到新文件夹,然后运行以下 Python 命令来启动 Web 服务器:

python3 -m http.server 8000

http.server 仅适用于 Python 3.x。您可以使用任何其他 Web 服务器,例如 Apache HTTP Server 或 Node JS。

打开网络浏览器并转到 localhost:8000 以查看视频播放器。 您的浏览器必须支持 HLS.js 库。

如果一切正常,在播放一个短视频后,点击视频播放器上的播放按钮即可开始播放《Tears of Steel》。此内容使用视频点播 (VOD) 流提交。

请求直播

如需将示例 VOD 视频流替换为您的直播视频流,请使用 VideoStitcherLiveStreamRequest 类,该类可通过 Google Ad Manager 自动创建广告会话。您可以使用 Google Ad Manager 界面找到生成的 DAI 会话,以进行监控和调试。

在现有示例中,有用于请求 VOD 流或直播的函数。如需使其与 Google Cloud Video Stitcher API 配合使用,您需要添加一个新函数以返回 VideoStitcherLiveStreamRequest 对象。

示例如下:

// StreamManager which will be used to request ad-enabled streams.
let streamManager;
...
function initPlayer() {
  videoElement = document.getElementById('video');
  adUiElement = document.getElementById('adUi');
  streamManager = new google.ima.dai.api.StreamManager(
    videoElement,
    adUiElement
  );
  streamManager.addEventListener(
      [
        google.ima.dai.api.StreamEvent.Type.LOADED,
        google.ima.dai.api.StreamEvent.Type.ERROR,
        google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,
        google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED
      ],
      onStreamEvent, false);

  hls.on(Hls.Events.FRAG_PARSING_METADATA, function(event, data) {
    if (streamManager && data) {
      // For each ID3 tag in our metadata, we pass in the type - ID3, the
      // tag data (a byte array), and the presentation timestamp (PTS).
      data.samples.forEach(function(sample) {
        streamManager.processMetadata('ID3', sample.data, sample.pts);
      });
    }
  });

  videoElement.addEventListener('pause', () => {
    playButton.style.display = 'block';
  });

  playButton.addEventListener('click', initiatePlayback);
}

function initiatePlayback() {
  requestVideoStitcherStream();

  playButton.style.display = "none";
  playButton.removeEventListener('click', initiatePlayback);
  playButton.addEventListener('click', resumePlayback);
}
...

function requestVideoStitcherStream() {
  const streamRequest = new google.ima.dai.api.VideoStitcherLiveStreamRequest();
  streamRequest.liveStreamEventId = 'LIVE_CONFIG_ID';
  streamRequest.region = 'LOCATION';
  streamRequest.projectNumber = 'PROJECT_NUMBER';
  streamRequest.oAuthToken = 'OAUTH_TOKEN';
  streamRequest.networkCode = 'NETWORK_CODE';
  streamRequest.customAssetKey = 'CUSTOM_ASSET_KEY';

  streamManager.requestStream(streamRequest);
}

对于本地测试,如果实时流式传输文件位于 Cloud Storage 存储桶中,则需要为源 http://localhost:8000 启用 CORS

重新加载页面。 然后,您可以请求并播放自定义直播。

(可选)添加直播会话选项

通过添加会话选项来自定义视频流请求,以使用 VideoStitcherLiveStreamRequest.videoStitcherSessionOptions 替换默认的 Cloud Video Stitcher API 配置。如果您提供的选项无法识别,则 Cloud Video Stitcher API 将返回 HTTP 400 错误作为响应。如需帮助,请参阅问题排查指南

例如,您可以使用以下代码段替换清单选项,该代码段请求两个数据流清单,它们的呈现结果按比特率从低到高排序。

...

streamRequest.videoStitcherSessionOptions = {
  "manifestOptions": {
    "includeRenditions": [
      {"bitrateBps": 3000, "codecs": "hvc1.1.4.L126.B0, mp4a.40.2"},
      {"bitrateBps": 2000, "codecs": "avc1.64001f, mp4a.40.2"},
    ],
    "bitrateOrder": "ascending"
  }
};

streamManager.requestStream(streamRequest);

插入广告插播时间点

Google Cloud Video Stitcher API 会针对每个广告插播时间点插入从广告代码中检索到的广告。在清单中使用广告标记来指明广告插播时间点。广告标记由直播编码器插入。

插入广告插播时间点之后,广告会立即播放。

清理

现在,您已成功使用 Google Cloud Video Stitcher API 托管了直播,并使用适用于 HTML5 的 IMA DAI SDK 发出了请求,请务必清除所有投放资源。

请按照直播清理指南移除所有不需要的资源和资产。

最后,在启动 Python 3 Web 服务器的终端窗口中,使用命令 ctrl+C 结束本地服务器。