View a markdown version of this page

Client-side 广告追踪 - AWS Elemental MediaTailor

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Client-side 广告追踪

使用 AWS Elemental MediaTailor 客户端跟踪 API,您可以在直播工作流程中加入广告插播期间的玩家控件。在客户端跟踪中,玩家或客户向广告决策服务器 (ADS) 和其他广告验证实体发出跟踪事件,例如曝光量和四分位数广告信标。这些事件既跟踪整体广告时段状态,也跟踪每个广告插播时间内的单个广告的可用性。了解有关曝光量和四分位数 (ADS) 和其他广告验证实体的更多信息。有关曝光量和四分位数广告信标的更多信息,请参阅。Client-side 信标有关 ADS 和其他广告验证实体的更多信息,请参阅Client-side 广告跟踪集成

有关向 ADS 传递玩家参数和会话数据以进行客户端跟踪的信息,请参阅MediaTailor ADS 请求的玩家变量和。MediaTailor ADS 请求的会话变量

Client-side 跟踪启用了如下功能:

使用 MediaTailor 客户端跟踪 API,您可以向播放设备发送元数据,该设备除了支持客户端跟踪之外还能启用其他功能:

Client-side 报告工作流程

下图显示了从会话初始化到广告播放和信标的完整客户端报告工作流程:

MediaTailor 客户端报告序列图显示了从会话初始化到广告播放和信标的完整工作流程中, MediaTailor视频播放器、广告决策服务器、内容来源和广告验证服务之间的交互。

客户端报告工作流程包括以下步骤:

  1. 会话初始化 -视频播放器向会 MediaTailor 话端点发送 POST 请求,其中包含 JSON 元数据adsParams,包括原始令牌和会话功能。 MediaTailor 使用manifestUrl和对会话trackingUrl进行响应。

  2. 清单请求和广告决定 -玩家向其请求个性化清单 MediaTailor。 MediaTailor 从来源请求原始内容清单,使用玩家参数向广告决策服务器 (ADS) 发出广告请求,接收包含广告元数据的 VAST 响应,并向玩家提供带有广告标记的个性化清单。

  3. 追踪数据检索 -玩家定期轮询跟踪网址(与 HLS 的目标持续时间或 DASH 的最小更新周期相匹配)。 MediaTailor 返回包含可用性、广告、跟踪事件、信标网址和广告验证数据的 JSON 跟踪元数据。

  4. 广告播放和信标 -在广告休息期间,玩家解析跟踪元数据,在广告开始呈现时触发曝光信标,在适当的时间触发四分位信标(开始、firstQuartile、中点、第三四分位数、完成),必要时加载和执行广告验证,并将事件发送到第三方验证服务。 JavaScript viewability/verification

  5. 持续投票 -玩家在整个会话中继续轮询跟踪网址,以接收即将到来的广告插播时间和动态内容的更新元数据。

该工作流程支持广告倒计时器、点击功能、伴随广告、可跳过广告和 VAST 图标显示等高级功能,以实现隐私合规。

启用客户端跟踪

您可以为每个会话启用客户端跟踪。玩家POST向 MediaTailor 配置的会话初始化前缀端点创建 HTTP。或者,玩家可以发送额外的元数据, MediaTailor 以便在进行广告调用、调用源以获取清单以及在会话级别调用或禁用 MediaTailor功能时使用。

以下示例显示了 JSON 元数据的结构:

{ "adsParams": { # 'adsParams' is case sensitive "param1": "value1", # key is not case sensitive "param2": "value2", # Values can contain spaces. For example, 'value 2' is an allowed value. }, "origin_access_token":"abc123", # this is an example of a query parameter designated for the origin "overlayAvails":"on" # 'overlayAvails' is case sensitive. This is an example of a feature that is enabled at the session level. }

使用 MediaTailor 控制台或 API 配置 ADS 请求模板网址以引用这些参数。在以下示例中,player_params.param1是的玩家参数param1player_params.param2是的玩家参数param2

https://my.ads.com/path?param1=[player_params.param1]&param2=[player_params.param2]

广告服务器参数

在 JSON 结构的最顶层是一个 J adsParams SON 对象。该对象内部有 key/value 几对, MediaTailor 可以在所有会话请求中读取并发送到广告服务器。 MediaTailor 支持以下广告服务器:

  • 谷歌广告管理器

  • SpringServe

  • FreeWheel

  • Publica

Origin 交互查询参数

JSON 结构最顶层的任何预留 key/value 对,例如adsParamsavailSuppressionoverlayAvails、和,都不会以查询参数的形式添加到原始请求网址中。向源发出的 MediaTailor 每个会话清单请求都包含这些查询参数。源会忽略无关的查询参数。例如, MediaTailor 可以使用这些 key/value 对向源发送访问令牌。

Session-configured features

使用会话初始化 JSON 结构来启用、禁用或覆盖overlayAvailsavailSuppression、和等 MediaTailor功能。adSignaling会话初始化期间传递的任何功能配置都会覆盖 MediaTailor 配置级别的设置。

注意

会话初始化 MediaTailor 时提交给的元数据是不可变的,并且在会话期间无法添加其他元数据。使用 SCTE-35标记来携带会话期间发生变化的数据。有关更多信息,请参阅 MediaTailor ADS 请求的会话变量

例: 为 HLS 执行客户端广告跟踪
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.m3u8 { "adsParams": { "deviceType": "ipad" # This value does not change during the session. "uid": "abdgfdyei-2283004-ueu" } }
例: 为 DASH 执行客户端广告跟踪
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.mpd { "adsParams": { "deviceType": "androidmobile", "uid": "xjhhddli-9189901-uic" } }

报告模式参数

通过在请求正文中加入reportingMode参数,可以在初始化会话时指定报告模式。此参数控制是 MediaTailor 对会话执行客户端还是服务器端广告跟踪。

  • client-玩家执行广告跟踪并将信标发送到广告服务器。如果未指定,则reportingMode这是默认模式。

  • server- MediaTailor 执行服务器端广告跟踪并将信标直接发送到广告服务器。

例使用服务器端报告模式初始化会话
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.m3u8 { "adsParams": { "deviceType": "ipad", "uid": "abdgfdyei-2283004-ueu" }, "reportingMode": "server" }
例使用客户端报告模式初始化会话(显式)
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.mpd { "adsParams": { "deviceType": "androidmobile", "uid": "xjhhddli-9189901-uic" }, "reportingMode": "client" }
注意

reportingMode参数是在会话初始化时设置的,在会话期间无法更改。如果未指定,reportingMode则 MediaTailor 默认为客户端报告以保持向后兼容性。

成功的响应是200带有响应正文的 HTTP。正文包含一个带有manifestUrltrackingUrl密钥的 JSON 对象。这些值是相对网址,玩家可以将其用于播放和广告事件跟踪目的。

{ "manifestUrl": "/v1/dashmaster/hashed-account-id/origin-id/asset-id.m3u8?aws.sessionId=session-id", "trackingUrl": "/v1/tracking/hashed-account-id/origin-id/session-id" }

有关客户端跟踪架构的更多信息,请参阅。Client-side 广告跟踪架构和属性

客户端跟踪的最佳实践

本节概述了直播和视频点播(VOD) MediaTailor 工作流程中客户端跟踪的最佳实践。

直播工作流程

按照与 HLS 的每个目标持续时间或 DASH 的最小更新周期相匹配的间隔对跟踪端点进行轮询,以便始终获得最新的广告跟踪元数据。在创意人员可能具有交互式或叠加组件的工作流程中,匹配此间隔尤为重要。

注意

一些玩家支持事件监听器,可以将其用作投票的替代方案。例如,需要为每个会话启用 MediaTailor 广告 ID 装饰功能。有关更多信息,请参阅 广告 ID 装饰。使用此功能可在每个广告上添加日期范围 (HLS) 或事件元素 (DASH) 标识符。玩家可以使用这些清单标签作为提示来调用会话的 MediaTailor跟踪端点。

VOD 工作流程

成功初始化会话后,在 MediaTailor 收到第一个包含媒体的清单后,您只需要调用一次跟踪端点。

VOD 工作流程的呼叫流程。在会话初始化并 MediaTailor 接收第一个包含媒体的清单后,调用客户端跟踪端点。

Server-guided 广告插入

Server-guided 广告插入 (SGAI) 会话不使用 GetTracking API。取而代之的是aws.reportingMode=CLIENT,当你使用时,当玩家请求广告内容时,会在每个资产列表响应的TRACKING部分中 MediaTailor提供跟踪信息。会话初始化响应不包括trackingUrl

客户端跟踪的 SGAI 会话的资产清单响应具有以下结构:

{ "ASSETS": [ { "DURATION": 20.0, "URI": "https://cdn.example.com/ad1/master.m3u8" }, { "DURATION": 10.0, "URI": "https://cdn.example.com/ad2/master.m3u8" } ], "TRACKING": { ...VAST tracking events and beacon URLs for each ad... } }

在为 SGAI 方法实现客户端跟踪时:

  • 从资产列表响应中解析该TRACKING部分,而不是调用 GetTracking

  • 使用素材资源列表中提供的跟踪 URL 进行广告事件报告

  • 根据玩家中的实际广告播放事件发射追踪信标

  • 在提取资产列表时独立处理每个广告插播时间段的跟踪

重要

TRACKING部分仅在设置时包含在资产列表aws.reportingMode=CLIENT中。使用服务器端报告(SGAI 的默认设置)时,会省 MediaTailor 略该TRACKING部分,改为在广告 URI 中嵌入信标数据。有关更多信息,请参阅 Server-side 使用服务器引导的广告插入 (SGAI) 进行跟踪

使用以下方式浏览广告信标 GetTracking

使用终GetTracking端节点缩小向玩家返回的广告数量。例如,如果清单窗口很宽,跨越很长时间,则返回的广告信标的数量可能会影响玩家的表现。

GetTracking返回一个NextToken值,您可以使用该值通过浏览返回的信标列表来缩小返回信标的数量。您可以循环浏览这些NextToken值,找到广告信标StartTimeInSeconds字段的所需值。

  • 首次调用时GetTracking,将返回所有可能落入清单窗口的广告,包括每个广告的NextToken和值。

  • 如果GetTracking请求包含NextToken,则会返回清单窗口中的所有广告。

  • 如果GetTracking请求包含NextToken但没有新的信标可返 MediaTailor 回,则返回您在原始请求NextToken中发送的相同值。

  • 当没有与广告相对应的信标时,将该广告从其响应中GetTracking移除。

  • 来自的代币GetTracking将在 24 小时后过期。如果某个NextToken值大于 24 小时,则下次调用将GetTracking返回空值。NextToken

GetTracking 来自玩家的通用调用顺序

来自客户端玩家的GetTracking请求是一个 POST,其请求正文包含与令牌相关的广告NextToken和信标。

https://YouMediaTailorUrl/v1/tracking { "NextToken": "value" . . . }

GetTracking与一起使用的一般顺序NextToken如下:

  1. 拨打第一个电话GetTracking

    将返回所有广告和信标以及后续通话NextToken的第一个广告和信标。

  2. 如果的值NextToken为空,则 MediaTailor 返回所有广告信标。

  3. 如果已过期,NextToken则 MediaTailor 返回 HTTP 返回码 400 错误消息。

    再次致电GetTracking以检索有效的 NextToken s。

  4. 扫描整个响应,找StartTimeInSeconds出在所需范围内的广告信标。

  5. GetTracking使用与所需NextToken关联的值向进行新呼叫StartTimeInSeconds

  6. 如有必要,可以再次循环浏览返回的广告,直到找到想要玩的确切广告。

扩展示例

此示例说明如何使用 GetTracking's NextToken 来限制返回给玩家的广告信标的数量。

MediaTailor 收到GetTracking请求。该响应包含一个 ID 为 9935407 的广告和两个StartTimeInSeconds值分别为 52.286 和 48.332 秒的信标。

MediaTailor 发送 JSON 响应,NextToken如下所示:

{ "NextToken": JF57ITe48t1441mv7TmLKuZLroxDzfIslp6BiSNL1IJmzPVMDN0lqrBYycgMbKEb "avails": [ { "ads": [ { "adId": "9935407", "adVerifications": [], "companionAds": [], "creativeId": "", "creativeSequence": "", "duration": "PT15S", "durationInSeconds": 15, "extensions": [], "mediaFiles": { "mediaFilesList": [], "mezzanine": "" }, "startTime": "PT30S", "StartTimeInSeconds": 45, "trackingEvents": [ { "beaconUrls": [ "http://adserver.com/tracking?event=Impression " ], "duration": "PT0S", "durationInSeconds": 0, "eventId": "9935414", "eventType": "secondQuartile", "startTime": "PT52.286S", "StartTimeInSeconds": 52.286 }, { "beaconUrls": [ "http://adserver.com/tracking?event=firstQuartile" ], "duration": "PT0S", "durationInSeconds": 0, "eventId": "9935412", "eventType": "firstQuartile", "startTime": "PT48.332S", "StartTimeInSeconds": 48.332 } ], "vastAdId": "" } ], "startTime": "PT46.47S", "StartTimeInSeconds": 46.47 } ] }

在下一个GetTracking请求中,使用NextToken值:进行 MediaTailor 响应 JF57ITe48t1441mv7TmLKuZLroxDzfIslp6BiSNL1IJmzPVMDN0lqrBYycgMbKEb。

MediaTailor 使用与上次通话中设置的StartTimeInSeconds广告和信标相匹配NextToken的广告和信标进行响应。

假设现在的响应中除了之前的 ID 为 9935407 的广告外,还包括另一个 ID 为 9235407 的广告。ID 为 9235407 的信标有 StartTimeInSeconds s 132.41 和 70.339。

MediaTailor 对会话中的所有信标进行迭代,选择时间StartTimeInSeconds大于 52.286 秒的信标,即 ID 为 9235407 的广告中的信标 3 和信标 4:

{ "NextToken": ZkfknvbfsdgfbsDFRdffg12EdffecFRvhjyjfhdfhnjtsg5SDGN "avails": [ { "ads": [ { "adId": "9235407", "adVerifications": [], "companionAds": [], "creativeId": "", "creativeSequence": "", "duration": "PT15.816S", "durationInSeconds": 19.716, "extensions": [], "mediaFiles": { "mediaFilesList": [], "mezzanine": "" }, "startTime": "PT2M0S", "StartTimeInSeconds": 120.0, "trackingEvents": [ { "beaconUrls": [ "http://adserver.com/tracking?event=complete" ], "duration": "PT0S", "durationInSeconds": 0, "eventId": "8935414", "eventType": "firstQuartile", "startTime": "PT1M10.330S", "StartTimeInSeconds": 70.339 }, { "beaconUrls": [ "http://adserver.com/tracking?event=thirdQuartile" ], "duration": "PT0S", "durationInSeconds": 0, "eventId": "8935412", "eventType": "secondQuartile", "startTime": "PT2M12.41S", "StartTimeInSeconds": 132.41 } ], "vastAdId": "" }, ], "startTime": "PT36.47S", "StartTimeInSeconds": 36.47 } ] }