使用细分重定向插入广告

本指南介绍了如何配置清单操纵器,以使用广告连播细分方法请求广告或平板电视细分。

选择一种流式传输协议:

前提条件

在继续操作之前,您必须为插播广告组的重定向设置直播活动,并设置动态广告插播 (DAI) 类型和编码配置文件。如需设置直播活动,请选择以下方法之一:

设置直播活动后,通过调用 DaiEncodingProfileService.getDaiEncodingProfilesByStatement 方法,从 Ad Manager 界面或 API 中检索活动的编码配置文件。

检索内容流

当用户选择直播活动时,客户端应用会向 Google Ad Manager 发出直播请求。在流式响应中,应用会提取 Google DAI 会话 ID 和元数据,以包含在流清单请求中。

以下示例将 Google DAI 会话 ID 传递给清单操纵器:

https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY

在处理视频内容播放请求时,存储请求中的 Google DAI 会话 ID 和 CUSTOM_ASSET_KEY,以便为广告拼接做好准备。

识别广告插播时间点片段并插入不连续性

在处理每个变体清单时,请在您的信息流中识别 EXT-X-CUE-INEXT-X-CUE-OUT 标记,它们分别表示广告插播的开始和结束。

EXT-X-CUE-INEXT-X-CUE-OUT 标记替换为 EXT-X-DISCONTINUITY 元素,以便客户端视频播放器在内容和广告之间切换。

以下示例清单替换了 EXT-X-CUE-INEXT-X-CUE-OUT 标记:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

以下示例展示了一个替换清单:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4

Google DAI 广告片段未加密。如果您的内容已加密,请在每个广告插播时段的第一个广告片段之前插入 EXT-X-KEY:METHOD=NONE 元素,以移除加密。在广告插播时间点结束时,通过插入适当的 EXT-X-KEY 重新添加加密。

跟踪即将到来的广告插播时段的开始时间、时长和索引。

生成基于哈希的消息认证码 (HMAC) 令牌

使用分段重定向 Pod 服务发出的每个分段请求都必须包含用于身份验证的 HMAC 签名令牌。

每个广告插播时段计算一次此令牌,并在所有视频流会话中共享该令牌。

收集令牌参数

如需填充令牌正文,请从当前广告插播时间点收集以下信息:

令牌参数
custom_asset_key 必需 Google Ad Manager 中的自定义直播素材资源键。
cust_params 可选 自定义定位参数。请参阅 cust_params
exp 必需 当前令牌的到期时间戳(以秒为单位)。
network_code 必需 Ad Manager 360 广告资源网代码。
pod_id 必需 广告插播的标识符。一个从 1 开始的整数。对于每个广告插播时间点,此标识符都会递增 1。

此值对于当前活动中观看同一广告插播的所有用户必须相同。

pd 必需,但启用了无时长广告插播的活动除外。 广告插播时段的时长(以毫秒为单位)。称为 ad_pod_duration
scte35 可选 采用 Base64 编码的 SCTE-35 信号。Google DAI 始终会将信号复制到创建的广告插播时间,即使信号不正确也是如此。 如果时间戳不正确,您会在响应的 X-Ad-Manager-Dai-Warning HTTP 标头中收到一条消息,但信号仍会继续创建广告插播时间。如需详细了解 DAI 如何使用 SCTE-35 信号,请参阅支持的广告标记

创建令牌字符串

如需创建令牌字符串,请按字母顺序列出每个参数,格式为 NAME=VALUE,并使用 ~ 波浪号分隔每个名称-值对。

对于未使用的可选参数,请使用空字符串作为值,或完全移除该参数。

以下示例展示了如何设置令牌字符串的格式:

custom_asset_key=CUSTOM_ASSET_STRING~exp=EXPIRATION~network_code=NETWORK_CODE~pd=POD_DURATION~pod_id=AD_POD_INDEX~scte35=SCTE35_MESSAGE

生成 HMAC 签名

HMAC 签名是令牌字符串的 SHA-256 哈希(采用十六进制格式)。密钥是与 Google Ad Manager 中的直播活动相关联的 HMAC 身份验证密钥

签名令牌字符串

生成 HMAC 签名后,请以以下格式将签名附加到令牌字符串:

~hmac=HMAC_SIGNATURE

对令牌字符串进行编码

如需将令牌作为网址参数传递,请对网址进行编码以确保安全。

以下示例会生成一个已签名且已编码的 HMAC 令牌,其中未使用的可选参数为空字符串:

custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g~cust_params=~exp=1489680000~network_code=6062~pd=180000~pod_id=5~scte35=

Secret key:
A7490591290583E4B93189DEE7E287C299FC686872ABC7ADC9F9F536443505F

HMAC signature:
86d7e5f8c96fe4c83141d764df376ae14a0e2066f2e6b2ccfb9e1e2d3c869a88

Signed token:
custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g~cust_params=~exp=1489680000~network_code=6062~pd=180000~pod_id=5~scte35=~hmac=86d7e5f8c96fe4c83141d764df376ae14a0e2066f2e6b2ccfb9e1e2d3c869a88

URL-encoded signed token:
custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~scte35%3D~hmac%3D86d7e5f8c96fe4c83141d764df376ae14a0e2066f2e6b2ccfb9e1e2d3c869a88

以下示例会生成一个已签名且已编码的 HMAC 令牌,其中不包含未使用的可选参数:

custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g3~exp=1489680000~network_code=6062~pd=180000~pod_id=5

Secret key:
A7490591290583E4B93189DEE7E287C299FC686872ABC7ADC9F9F536443505F

HMAC signature:
6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9

Signed token:
custom_asset_key=iYdOkYZdQ1KFULXSN0Gi7g~exp=1489680000~network_code=6062~pd=180000~pod_id=5~hmac=6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9

URL-encoded signed token:
custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9

构建广告细分网址

EXT-X-DISCONTINUITY 标记之间的每个内容段替换为指向广告插播时段段方法的一个网址。

以下示例组装了一个广告插播时段片段。请注意,广告片段使用从零开始的索引:

https://dai.google.com/linear/pods/v1/seg/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/0.ts?sd=AD_SEGMENT_DURATION&pd=AD_BREAK_DURATION&stream_id=SESSION_ID&auth-token=HMAC

以下示例将广告插播时段片段插入到清单中:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/seg/network/
NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/0.ts?sd=5000&so=0&pd=15000&stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/seg/network/
NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/1.ts?sd=5000&so=5000&pd=15000&stream_id=SESSION_ID
#EXTINF:5.00,
https://dai.google.com/linear/pods/v1/seg/network/
NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/profile/ENCODING_PROFILE/2.ts?sd=5000&so=10000&pd=15000&stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4

可选:安排广告插播时间

为了提高填充率,请发送广告插播提前通知 (EABN),其中包含广告连播时长、自定义定位参数和 SCTE-35 信号数据。如需了解详情,请参阅发送提前插播广告通知