DAI Early Ad Break Notification API

使用 Google DAI 平台时,您可能想要为 直播中下一个即将开始的直播/线性广告插播时间点。广告插播提前 借助 Notification (EABN) API,您可以使用 键值对,可提供可扩展性,以便在大批量发生时进行广告决策 。

对 EABN API 进行的调用必须包含目标资产键和预期 时长时长必须与实际广告的时长一致 。如果发送的预期时长短于 提供的广告插播时间点, 广告填充不足时的广告插播时间点填充类型 (默认为空白可选广告)。如果 发送的时长预计超过提供的广告插播时间点,您的广告插播时间点可能会 结束。

除了这些必填字段之外,您还可以 参数,要应用的广告连播模板的名称,或 SCTE35 Cue Out 数据(如果 可用。

前提条件

创建服务账号

如需访问 EABN API,您需要拥有 Google 服务账号。

  • 如果您有 Google Cloud 账号,则可以使用 IAM 模块来创建 服务账号。如需了解详情,请参阅创建和管理服务账号
  • 如果您没有 Google Cloud 账号,可以创建一个服务账号 进入 Google API 控制台, 按照以下步骤操作: <ph type="x-smartling-placeholder">
      </ph>
    1. 创建新项目或选择现有项目。
    2. 凭据页面中,点击管理服务账号
    3. 服务账号页面中,点击创建服务账号
    4. 创建服务账号页面中,输入账号详细信息。然后 点击创建

成功创建服务账号后,复制账号的 JSON 密钥,该密钥将用于身份验证。

启用 EABN API

创建服务账号后,请让您的客户经理启用 该账号的 EABN API。

启用 DAI API

为您的服务账号启用 EABN API 后,再启用 DAI API 针对该账号:

  1. Google API 库中, 搜索“DAI API”

  2. 选择并启用 DAI API。

使用 EABN API

您可以使用 JSON/REST 请求调用 EABN API。

身份验证

要对 EABN API 进行经过身份验证的调用,您需要生成 OAuth2 服务 使用服务账号中的 JSON 密钥和范围的 JSON 密钥提供账号凭据 https://www.googleapis.com/auth/video-ads。如需了解详情,请参阅 针对“服务器到服务器”应用使用 OAuth 2.0

必须将生成的身份验证令牌作为每个 的 Auth 标头 对 EABN API 的调用。

发送广告插播提前通知

要发送广告插播提前通知,请使用以下命令发送 POST 请求 网址和请求正文:

POST dai.googleapis.com/v1/adBreaks

请求正文

对象
adBreak 必填 adBreak 属性的封装容器对象
assetKey 必填 LiveStreamEvent 的唯一标识符, 已创建广告插播时间点
expectedDuration 必填 此广告插播时间点的时长(使用 Google 的标准时长格式) (xx.xxxs,其中 xx.xxx 表示秒数)
scte35CueOut 可选 scte35 cue out 中采用 Base-64 编码的数据。可包含 splice_insert()time_signal() 命令。
示例: <ph type="x-smartling-placeholder">
    </ph>
  • time_signal():
    /DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==
  • splice_insert(): /DAvAAAAAAAA///wFAVIAACPf+/+c2nALv4AUsz1AAAAAAAKAAhDVUVJAAABNWLbowo=
custParams 可选 自定义的这一插播时间点的广告请求中包含的键值对 AM360 中的条件定位,用 = 分隔,用 &
示例:
key=value&key2=value2,value3
有关定位的详情,请参阅 供应定位 参数
ptpln 可选 广告连播模板名称

响应标头

HTTP/1.1 200 OK

响应正文

响应正文包含 adBreak 对象中发送的所有参数, 还有一个额外的 daiBreakId 字段,其中包含内部 DAI 视频流中创建的广告插播时间点的标识符。

示例

请求

POST /v1/adBreaks HTTP/1.1
Content-Type: application/json

{
  "adBreak": {
    "assetKey": "asset1",
    "expectedDuration": "30s",
    "scte35CueOut": "/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==",
    "custParams": "param1=value1&param2=value2",
    "ptpln": "podtemplate"
  }
}

响应

HTTP/1.1 200 OK

{
  "assetKey": "asset1",
  "expectedDuration": "30s",
  "custParams": "param1=value1&param2=value2",
  "scte35CueOut": "/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==",
  "ptpln": "podtemplate",
  "daiBreakId": 1
}

实现示例 (Python)

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from absl import app

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account

SERVICE_ACCOUNT_KEY_FILE = "~/eabn_key.json"
ASSET_KEY = "asset1"

SCOPES = ['https://www.googleapis.com/auth/video-ads']
EABN_API_URL = 'https://dai.googleapis.com/v1/adBreaks'


def main():
  credentials = service_account.Credentials.from_service_account_file(
      SERVICE_ACCOUNT_KEY_FILE, scopes=SCOPES)

  authed_session = AuthorizedSession(credentials)

  data = {
      'assetKey': ASSET_KEY,
      'expectedDuration': '120s',
      'custParams': 'param1=value1&param2=value2',
      'scte35CueOut': '/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==',
  }

  r = authed_session.post(EABN_API_URL, json={'adBreak': data})
  print(r.status_code)
  print(r.headers)
  print(r.text)

if __name__ == '__main__':
  app.run(main)