View a markdown version of this page

函数生命周期挂钩 - AWS Elemental MediaTailor

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

函数生命周期挂钩

生命周期挂钩定义了在播放期间何时 MediaTailor 运行您的函数。此页面是输入字段、输出命名空间以及管理每个挂钩数据流的规则的完整参考。

概述

MediaTailor 支持四个生命周期挂钩:

  • PRE_SESSION_INITIALIZATION当查看者启动新会话时触发一次。将其用于一次性设置工作,例如获取受众细分。此时,还没有出现广告插播时间,因此广告插播背景不可用。

  • PRE_ADS_REQUEST在每个广告决策服务器 (ADS) 请求之前触发——直播中每个广告插播时段触发一次。使用它来使用定位数据自定义 ADS 请求、修改 ADS 网址或添加标题。

  • POST_ADS_RESPONSE在 MediaTailor 接收和解析广告响应(包括视频广告投放模板 (VAST) 包装器重定向的解析)后触发。在 MediaTailor 选择要插入的广告之前,使用它来筛选、重新排序、修改或补充广告返回的广告。

  • PRE_MANIFEST_INSERTION在广告插播个性化设置结束时触发,在广告选择、转码检查和填写政策之后,紧接着将广告 MediaTailor 写入清单中。使用它来检查或修改最终的广告集,包括在填充不足的广告插播栏中注入更多广告。

挂钩的时间和范围不同。PRE_SESSION_INITIALIZATION运行一次并设置在整个会话中持续存在的数据。PRE_ADS_REQUEST然后绕POST_ADS_RESPONSE过每次 ADS 互动。PRE_ADS_REQUEST塑造传出的请求,并在选择广告之前对解析后的响应POST_ADS_RESPONSE采取行动。PRE_MANIFEST_INSERTION在选择完成后运行,一次调用即可查看所有新增个性化广告插播时段的最终广告设置。

重要

对于单个请求POST_ADS_RESPONSE,PRE_ADS_REQUEST、和PRE_MANIFEST_INSERTION挂钩的总执行预算为 2,000 毫秒。此预算是对每个挂钩自己的 2,000 毫秒超时时间之外的补充。挂钩的有效超时时间是其自身超时时间和剩余预算中的较小值。较早的挂接所花费的时间减少了同一请求中可供后期挂钩使用的时间。如果剩余预算在挂钩开始之前用尽,则 MediaTailor 跳过该挂钩,在没有挂钩的情况下继续处理请求。PRE_SESSION_INITIALIZATION在会话初始化期间运行,不属于合并预算。有关更多信息,请参阅 限制。

注意

在本文档中,广告插播也称为无济于事。输入字段名称(例如avail.availId和avails.avails)和 CloudWatch 指标使用表avail单。

输入字段参考

下表列出了每个生命周期挂钩中可用的输入字段。在字段列中,parent[].child表示法表示parent数组中每个元素的字段。

注意

POST_ADS_RESPONSE和PRE_MANIFEST_INSERTION挂钩在 camelCase 中显示会话字段(例如,session.clientIp),而前两个挂钩使用 snake_case(例如,)。session.client_ip玩家参数可通过player_params命名空间在前两个挂钩处获得,在另外两个挂钩处作为session.playerParams对象可用。

字段 Type 会话前初始化 PRE_ADS_REQUEST POST_ADS_RESPONSE 预清单插入
session.id长整型✓✓✓✓
session.uuid字符串✓✓✓✓
session.client_ip字符串✓✓✗✗
session.clientIp字符串✗✗✓✓
session.user_agent字符串✓✓✗✗
session.userAgent字符串✗✗✓✓
session.referer*字符串✓✓✗✗
session.avail_duration_secs长整型✗✓✗✗
session.avail_duration_ms长整型✗✓✗✗
session.streamingProtocol字符串✗✗✓✓
session.playerParams对象✗✗✓✓
player_params.*字符串✓✓✗✗
event.id字符串✓✓✓✓
event.hook字符串✓✓✓✓
event.timestamp字符串✓✓✓✓
avail.indexInt✗✓✗✗
avail.random长整型✗✓✗✗
avail.source_content_time_epoch_ms长整型✗✓✗✗
avail.availId†字符串✗✗✓✗
avail.durationSeconds†数字✗✗✓✗
avail.startTime†字符串✗✗✓✗
scte.event_idInt✗✓✗✗
scte.avail_numInt✗✓✗✗
scte.segmentation_event_idInt✗✓✗✗
scte.segmentation_type_idInt✗✓✗✗
scte.segmentation_upid字符串✗✓✗✗
scte.segmentation_upid.assetId字符串✗✓✗✗
scte.segmentation_upid.cueData.key字符串✗✓✗✗
scte.segmentation_upid.cueData.value字符串✗✓✗✗
scte.unique_program_idInt✗✓✗✗
scte.archive_allowed_flag布尔值✗✓✗✗
scte.delivery_not_restricted_flag布尔值✗✓✗✗
scte.device_restrictionsInt✗✓✗✗
scte.no_regional_blackout_flag布尔值✗✓✗✗
scte.segment_numInt✗✓✗✗
scte.segments_expectedInt✗✓✗✗
scte.sub_segment_numInt✗✓✗✗
scte.sub_segments_expectedInt✗✓✗✗
scte.avails_expected长整型✗✓✗✗
asset.*字符串✗✓✗✗
inference.enriched布尔值✗✓✗✗
inference.feedId字符串✗✓✗✗
inference.dataEndpoint字符串✗✓✗✗
inference.pts长整型✗✓✗✗
inference.timescale长整型✗✓✗✗
inference.region字符串✗✓✗✗
inference.previousBreakEndPts长整型✗✓✗✗
inference.parseError布尔值✗✓✗✗
adsRequest.url字符串✗✓✓✗
adsRequest.method字符串✗✓✓✗
adsRequest.headers.<key>字符串✗✓✓✗
adsRequest.body字符串✗✓✗✗
adsResponse.responseType字符串✗✗✓✗
adsResponse.ads数组✗✗✓✗
adsResponse.ads[].adId‡字符串✗✗✓✗
adsResponse.ads[].durationSeconds数字✗✗✓✗
adsResponse.ads[].adSystem字符串✗✗✓✗
adsResponse.ads[].adTitle字符串✗✗✓✗
adsResponse.ads[].creativeId字符串✗✗✓✗
adsResponse.ads[].sequenceInt✗✗✓✗
adsResponse.ads[].mediaFiles数组✗✗✓✗
adsResponse.ads[].mediaFiles[].url字符串✗✗✓✗
adsResponse.ads[].mediaFiles[].mimeType字符串✗✗✓✗
adsResponse.ads[].mediaFiles[].widthInt✗✗✓✗
adsResponse.ads[].mediaFiles[].heightInt✗✗✓✗
adsResponse.ads[].mediaFiles[].bitrateInt✗✗✓✗
adsResponse.ads[].trackingEvents.<eventType>字符串数组✗✗✓✗
avails.avails数组✗✗✗✓
avails.avails[].availId字符串✗✗✗✓
avails.avails[].durationSeconds数字✗✗✗✓
avails.avails[].startTime数字✗✗✗✓
avails.avails[].mediaProtocol字符串 (HLS|DASH)✗✗✗✓
avails.avails[].streamingMode字符串 (LIVE|VOD)✗✗✗✓
avails.avails[].fillDurationSeconds数字✗✗✗✓
avails.avails[].fillRate数字 (0—1)✗✗✗✓
avails.avails[].mutable布尔值✗✗✗✓
avails.avails[].ads数组✗✗✗✓
avails.avails[].ads[].adId§字符串✗✗✗✓
avails.avails[].ads[].vastAdId字符串✗✗✗✓
avails.avails[].ads[].creativeId字符串✗✗✗✓
avails.avails[].ads[].insertionUuid字符串✗✗✗✓
avails.avails[].ads[].sequenceInAvailInt✗✗✗✓
avails.avails[].ads[].durationSeconds数字✗✗✗✓
avails.avails[].ads[].adSystem字符串✗✗✗✓
avails.avails[].ads[].adTitle字符串✗✗✗✓
avails.avails[].ads[].mediaUrl字符串✗✗✗✓
avails.avails[].ads[].trackingEvents.<eventType>字符串数组✗✗✗✓
avails.avails[].ads[].mediaFiles数组✗✗✗✓
avails.avails[].skippedAds数组✗✗✗✓
avails.avails[].skippedAds[].adId字符串✗✗✗✓
avails.avails[].skippedAds[].vastAdId字符串✗✗✗✓
avails.avails[].skippedAds[].durationSeconds数字✗✗✗✓
avails.avails[].skippedAds[].creativeUrl字符串✗✗✗✓
avails.avails[].skippedAds[].reason字符串✗✗✗✓

* session.referer 仅当会话初始化请求中包含 Referer 标头时才会出现。用于$exists(session.referer)在访问之前进行检查。

† 仅当 ADS 响应适用于单个广告插播时段时,avail命名空间才会出现。它不适用于多重中断 (VMAP) 响应或预取的响应。用于$exists(avail)在访问之前进行检查。

‡ At POST_ADS_RESPONSE adId 是 VAST <Ad> 元素的id属性。

§ AtPRE_MANIFEST_INSERTION,adId是内部放置标识符。它对于广告时段内的广告来说是稳定的,但它不是 VAST 广告 ID,在广告时段或挂钩之间无法进行比较。要进行跨广告插播或挂钩的身份检查,请使用vastAdId(VAST <Ad> 元素的id属性)或creativeId。

在 DASH VOD 上直播,adTitle并且adSystemnull处于挂机状态。在那里creativeId的谓词中使用vastAdId或。