适用于 VOD 视频流的动态广告插播 API

借助 Google DAI API,您可以在不支持实现 IMA SDK 的环境中实现支持 Google DAI 的视频流。我们建议您在支持 IMA SDK 的平台上仍使用 IMA。

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

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

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

为 VOD 视频流实现 DAI API

DAI API 支持同时使用 HLS 和 DASH 协议的 VOD 视频流。本指南中介绍的步骤同时适用于这两种协议。

如需将该 API 集成到您的应用以用于 VOD 视频流,请完成以下步骤:

  1. 通过对流端点发出 POST 调用来请求流:

    请求正文示例

    https://dai.google.com/ondemand/v1/dash/content/2559737/vid/tos-dash/stream
    
      {
        key1 : "value1",
        stream_parameter1 : "value2"
      }
    

    响应正文示例

    {
       "stream_id":"d32f8920-612a-4d46-8bc7-d73fd6c17c85",
       "total_duration":636.458,
       "content_duration":596.458,
       "valid_for":"8h0m0s",
       "valid_until":"2020-06-04T20:39:41.274707306-07:00",
       "stream_manifest":"https://dai.google.com/ondemand/dash/content/2559737/vid/tos-dash/ATL/streams/d32f8920-612a-4d46-8bc7-d73fd6c17c85/manifest.mpd",
       "media_verification_url":"https://dai.google.com/view/p/service/vod/stream/d32f8920-612a-4d46-8bc7-d73fd6c17c85/loc/ATL/network/124319096/content/2559737/vid/tos-dash/media/",
       "ad_breaks":[
          {
             "type":"pre",
             "start":0,
             "duration":10,
             "ads":[
                {
                   "seq":1,
                   "duration":10,
                   "title":"External NCA1C1L1 Preroll",
                   "description":"External NCA1C1L1 Preroll ad",
                   "clickthrough_url":"https://dai.google.com/ondemand/v1/dash/content/2474148/vid/bbb-clear/location/ATL/stream/d32f8920-612a-4d46-8bc7-d73fd6c17c85/videoclick/5489259204425938365",
                   "events":[
                      {
                         "time":0.1,
                         "type":"start"
                      },
                      {
                         "time":2.5,
                         "type":"firstquartile"
                      },
                      {
                         "time":4.75,
                         "type":"midpoint"
                      },
                      {
                         "time":7.5,
                         "type":"thirdquartile"
                      },
                      {
                         "time":9,
                         "type":"complete"
                      }
                   ]
                }
             ]
          },
          {
             "type":"mid",
             "start":45,
             "duration":10,
             "ads":[
                {.... }
                   ]
                }
             ]
          },
          {
             "type":"post",
             "start":626.458,
             "duration":10,
             "ads":[...]
          }
       ]
    }
    

    错误响应

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

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

    • stream_id
    • stream_manifest
    • media_verification_url
    • ad_breaks
  3. 如需执行媒体验证,请监听 ID3 事件:

    1. 将媒体事件存储在队列中,同时保存每个媒体 ID 及其时间戳(如果播放器显示的话)。
    2. 每次从播放器进行更新时,或以设定的频率(建议 500 毫秒)更新时,通过将事件时间戳与进度条指针进行比较,检查媒体事件队列中是否有最近播放的事件。
    3. 对于您确认已播放的媒体事件,请通过将媒体 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. 可选:使用数据流创建响应中的 ad_breaks 数据来查找触发的事件类型。

  5. 从队列中移除媒体事件。

限制

如果在 WebView 中使用 API,则在定位方面存在以下限制:

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

最佳实践

在 VOD 上,将 ID3 标记映射到适当的事件类型非常繁琐。使用 JSON 中返回的 ad_breaks 信息来直接查找活动,就像查找直播内容一样。

其他资源