适用于直播的动态动态广告插入 API

借助 Google DAI API,您可以在环境中实现已启用 Google DAI 的视频流 不支持实施 IMA SDK 的国家/地区。因此,我们建议您 在支持 IMA SDK 的平台上使用 IMA。

我们建议在以下平台上使用 DAI API:

  • 三星智能电视 (Tizen)
  • LG 电视
  • HbbTV
  • Xbox(JavaScript 应用)
  • KaiOS

该 API 支持 IMA DAI SDK 提供的基本功能。对于 有关兼容性或受支持功能的具体问题,请联系 您的 Google 客户经理

为直播实现 DAI API

DAI API 支持使用 HLS 和 DASH 协议的线性(直播)视频流。 本指南中介绍的步骤适用于这两种协议。

如需将该 API 集成到您的应用以进行直播,请完成以下操作 步骤:

1. 请求数据流

如需通过 DAI API 请求直播,请对该直播进行 POST 调用 端点。JSON 响应包含数据流清单以及 DAI API 端点和值。

请求正文示例

https://dai.google.com/linear/v1/dash/event/0ndl1dJcRmKDUPxTRjvdog/stream

{
  key1 : "value1",
  stream_parameter1 : "value2"
}

响应正文示例

{
"stream_id":"c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL",
"stream_manifest":"https://dai.google.com/linear/dash/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/manifest.mpd",
"media_verification_url":"https://dai.google.com/view/p/service/linear/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/loc/ATL/network/51636543/event/0ndl1dJcRmKDUPxTRjvdog/media/",
"metadata_url":"https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/metadata",
"session_update_url":"https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/session",
"polling_frequency":10
}

错误响应

如果发生错误,系统将返回标准 HTTP 错误代码,而不提供 JSON 响应 正文。

解析 JSON 响应并存储以下值:

stream_id
此值可用于识别返回的数据流。
stream_manifest
系统会将此网址传递到您的媒体播放器,以便播放视频流。
media_verification_url
此网址是用于跟踪播放事件的基础端点。
metadata_url
此网址用于轮询与即将进行的直播有关的定期信息 事件。
session_update_url
此网址用于更新在初始设置期间发送的视频流请求参数 视频流请求请注意,此请求的参数会替换 。
polling_frequency
从 DAI API。

2. 关于新增 AdBreak 元数据的投票

设置一个计时器,使用 元数据网址。如果在视频流响应中未指定,则使用默认建议值 间隔设置为 10 秒。

请求正文示例

https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/metadata

响应正文示例

{
   "tags":{
      "google_0492266569":{
         "ad":"0000229836_ad1",
         "ad_break_id":"0000229836",
         "type":"firstquartile"
      },
      "google_1560331148":{
         "ad":"0000229836_ad1",
         "ad_break_id":"0000229836",
         "type":"thirdquartile"
      },
      "google_1877686714378797835":{
         "ad":"0000229836_slate",
         "ad_break_id":"0000229836",
         "type":"progress"
      },
      "google_1vRyQBYPw_7Gg3MrZ6S5EjmV9aLje-YpW8QHed1DSlU":{
         "ad":"0000229835_ad1",
         "ad_break_id":"0000229835",
         "type":"progress"
      },
      "google_2032765498":{
         "ad":"0000229835_ad1",
         "ad_break_id":"0000229835",
         "type":"midpoint"
      },......
      "google_5646900623":{
         "ad":"0000229837_ad1",
         "ad_break_id":"0000229837",
         "type":"complete"
      }
   },
   "ads":{
      "0000229834_ad1":{
         "ad_break_id":"0000229834",
         "position":1,
         "duration":15.01,
         "title":"truman-e2e-creativeset4",
         "description":"truman-e2e-creativeset4 ad",
         "ad_system":"GDFP",
         "ad_id":"39066884",
         "creative_id":"58092079124",
         "clickthrough_url":"https://pubads.g.doubleclick.net/pcs/click?xai=AKAO...\u0026adurl=http://google.com",
         "universal_ad_id":{
            "id_value":"58092079124",
            "id_registry":"GDFP"
         }
      },
      "0000229834_slate":{
         "ad_break_id":"0000229834",
         "position":-1,
         "duration":14.974977777,
         "slate":true
      },...
   },
   "ad_breaks":{
      "0000229834":{
         "type":"mid",
         "duration":15.01,
         "expected_duration":29.984977776999997,
         "ads":1
      },....
   }
}

3. 监听 ID3 事件并跟踪播放事件

要验证视频流中是否发生了特定事件,请按以下说明操作 处理 ID3 事件的步骤:

  1. 将媒体事件存储在队列中,同时保存每个媒体 ID 及其 时间戳(如果播放器显示)。
  2. 每次从播放器进行更新时,或以固定频率更新时(推荐 500 毫秒),检查媒体事件队列中最近播放的事件,方法是 将事件时间戳与进度条指针进行比较。
  3. 对于您确认已播放的媒体事件,请在列表中查找 存储的广告插播时间点代码中的媒体 ID。请注意,存储的代码 仅包含媒体 ID 前缀,因此无法进行完全匹配。
  4. 使用“progress”事件来跟踪用户是否在广告插播时间点内。 请勿将这些事件发送到媒体验证端点。其他活动 请将媒体 ID 附加到媒体验证端点,并执行 GET 请求跟踪播放。
  5. 从队列中移除媒体事件。

请求正文示例

https://dai.google.com/view/p/service/linear/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/loc/ATL/network/51636543/event/0ndl1dJcRmKDUPxTRjvdog/media/

示例回复

Accepted for asynchronous verification - HTTP/1.1 202 Accepted
Successful empty response - HTTP/1.1 204 No Content
Media verification not found - HTTP/1.1 404 Not Found
Media verification sent by someone else - HTTP/1.1 409 Conflict

您可以在信息流活动中验证跟踪事件 监控

4. 更新直播会话参数

你可能需要在直播结束后调整会话参数 创建。为此,请向会话更新网址发出请求。

请求正文示例

https://dai.google.com/linear/v1/pa/event/0ndl1dJcRmKDUPxTRjvdog/stream/c6bbee18-0d20-4c55-b071-efdf3a81da33:ATL/session

{
  key1 : "value1",
  stream_parameter1 : "value2"
}

响应正文示例

Successful response would be to look for - HTTP/1.1 200

限制

如果在 WebView 中使用该 API,在 改为:

  • 用户代理:用户代理参数作为浏览器专用值进行传递 而不是底层平台
  • rdididtype, is_lat: 设备 ID 未正确传递,这会限制 以下功能:
    • 频次上限
    • 依序广告轮播
    • 受众群细分和定位

最佳做法

请注意,直播索引的元数据端点基于 对应的 ID3 代码的前缀。这是特意设计的,旨在防止使用 元数据端点,用于立即对所有验证节点执行 ping 操作。

其他资源