借助 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 事件的步骤:
- 将媒体事件存储在队列中,同时保存每个媒体 ID 及其 时间戳(如果播放器显示)。
- 每次从播放器进行更新时,或以固定频率更新时(推荐 500 毫秒),检查媒体事件队列中最近播放的事件,方法是 将事件时间戳与进度条指针进行比较。
- 对于您确认已播放的媒体事件,请在列表中查找 存储的广告插播时间点代码中的媒体 ID。请注意,存储的代码 仅包含媒体 ID 前缀,因此无法进行完全匹配。
- 使用“progress”事件来跟踪用户是否在广告插播时间点内。 请勿将这些事件发送到媒体验证端点。其他活动 请将媒体 ID 附加到媒体验证端点,并执行 GET 请求跟踪播放。
- 从队列中移除媒体事件。
请求正文示例
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,在 改为:
最佳做法
请注意,直播索引的元数据端点基于 对应的 ID3 代码的前缀。这是特意设计的,旨在防止使用 元数据端点,用于立即对所有验证节点执行 ping 操作。