使用 Google DAI 平台时,您可能需要为视频流中下一个即将进行的直播/线性广告插播提供定位数据。借助提前广告插播通知 (EABN) API,您可以使用键值对实现特定于广告插播时间点的定位,从而为高流量流中的广告决策提供可伸缩性。
对 EABN API 的调用必须包含要定位的素材资源键以及下一次广告插播的预期时长。此时长需要尽可能接近实际的广告插播时长。如果发送的预期时长短于所提供的广告插播时长,系统会使用填充不足时的广告插播时间点填充类型(默认为空白可选广告)。如果发送的预期时长超过提供的广告插播时长,您的广告插播时间点可能在广告结束之前结束。
除了这些必填字段之外,您还可以发送自定义定位参数、要应用的广告连播模板的名称或 SCTE35 Cue Out 数据(如果有)。
前提条件
创建服务账号
如需访问 EABN API,您需要拥有 Google 服务帐号。
- 如果您有 Google Cloud 帐号,则可以使用 IAM 模块创建服务帐号。如需了解详情,请参阅创建和管理服务账号。
- 如果您还没有 Google Cloud 帐号,可以按照以下步骤在 Google API 控制台中创建服务帐号:
- 创建新项目或选择现有项目。
- 在凭据页面中,点击管理服务帐号。
- 在服务帐号页面中,点击创建服务帐号。
- 在创建服务帐号页面中,输入帐号详细信息。然后点击创建。
成功创建服务帐号后,复制该帐号的 JSON 密钥,该密钥将用于身份验证。
启用 EABN API
创建服务帐号后,请让您的客户经理为该帐号启用 EABN API。
启用 DAI API
为您的服务帐号启用 EABN API 后,请为该帐号启用 DAI API:
在 Google API 库中,搜索“DAI API”。
选择并启用 DAI API。
使用 EABN API
您可以使用 JSON/REST 请求调用 EABN API。
身份验证
如需对 EABN API 进行经过身份验证的调用,您需要使用服务帐号中的 JSON 密钥和范围 https://www.googleapis.com/auth/video-ads
生成 OAuth2 服务帐号凭据。如需了解详情,请参阅针对服务器到服务器应用使用 OAuth 2.0。
每次调用 EABN API 时,都必须包含生成的身份验证令牌,作为 Auth 标头。
发送广告插播提前通知
如需发送广告插播提前通知,请使用以下网址和请求正文发送 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() 命令。示例:
|
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¶m2=value2",
"ptpln": "podtemplate"
}
}
响应
HTTP/1.1 200 OK
{
"assetKey": "asset1",
"expectedDuration": "30s",
"custParams": "param1=value1¶m2=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¶m2=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)