

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

# AWS Elemental MediaTailor 用于插入广告
<a name="configurations"></a>

配置是您在 AWS Elemental MediaTailor中与之交互的对象。该配置包含源服务器和广告决策服务器 (ADS) 的映射信息。您还可以定义默认播放 MediaTailor ，以便在广告不可用或无法填满整个广告时使用。

如果您将内容分发网络 (CDN) 与一起使用 MediaTailor，则必须先在 CDN 中设置行为规则，然后才能将 CDN 信息添加到配置中。有关设置 CDN 的更多信息，请参阅[使用 CDN 优化 MediaTailor 广告个性化和内容交付](integrating-cdn.md)。

**Topics**
+ [支持的音频和视频编解码器](#supportedcodecs)
+ [了解 AWS Elemental MediaTailor 广告插入行为](ad-behavior.md)
+ [MediaTailor 服务器引导的广告插入概述和实现](server-guided.md)
+ [MediaTailor 广告服务器集成要求](vast.md)
+ [MediaTailor 播放配置管理](working-with-configurations.md)
+ [整合用于 MediaTailor 广告插入的内容来源](integrating-origin.md)
+ [AWS Elemental MediaTailor 与谷歌广告管理器集成](gam-integration.md)
+ [使用广告中断抑制功能自定义广告中断行为](ad-rules.md)
+ [MediaTailor 保险杠广告插入](bumpers.md)
+ [MediaTailor 片前广告插播](ad-behavior-preroll.md)
+ [MediaTailor slate 广告插入](slate-management.md)
+ [预取广告](prefetching-ads.md)
+ [将预处理广告与 AWS Elemental MediaTailor](precondition-ads.md)
+ [MediaTailor ADS 请求的动态广告变量](variables.md)
+ [MediaTailor 清单查询参数](manifest-query-parameters.md)
+ [报告广告跟踪数据](ad-reporting.md)
+ [叠加广告](overlay-ads.md)
+ [广告 ID 装饰](ad-id-decoration.md)

## 支持的音频和视频编解码器
<a name="supportedcodecs"></a>

MediaTailor 支持以下编解码器。
+ 音频编解码器：mp4a、ac-3和 ec-3
+ 视频编解码器：h.264(AVC)、h.265 (HEVC)、av01 () AV1

# 了解 AWS Elemental MediaTailor 广告插入行为
<a name="ad-behavior"></a>

AWS Elemental MediaTailor 通过将广告替换或插入到来源清单中，将广告拼接到直播或视频点播 (VOD) 内容中。是插入还是替换广告取决于来源清单中广告插播时间的配置方式，以及内容是 VOD 还是直播。广告插播时间是节目中展示广告的时间段，而广告可用量是广告时段内可以充斥广告的具体广告时间单位。
+ 使用*广告替换*， MediaTailor 将内容区段替换为广告。
+ 通过*广告插入*， MediaTailor 可以在不存在区段的地方插入广告内容。

要了解如何将广告 MediaTailor 拼接到直播和 VOD 内容中，请选择适用的主题。

**Topics**
+ [VOD 的广告拼接行为](#ad-behavior-vod)
+ [直播广告拼接行为](#ad-behavior-live)

## VOD 的广告拼接行为
<a name="ad-behavior-vod"></a>

MediaTailor 根据来源清单中广告标记的配置方式以及广告决策服务器 (ADS) 是否发送 VMAP 响应，在 VOD 内容中插入或替换广告。

对于按标记配置显示的广告行为，请参阅以下各节。

### 如果存在广告标记
<a name="markers-present"></a>

AWS Elemental MediaTailor 在来源清单中存在 SCTE-35 广告标记的地方插入广告。时`0`长`EXT-X-CUE-OUT`值为的广告标记表示广告的插入。

#### HLS 广告标记指南
<a name="markers-present-hls"></a>

 请遵循以下指导方针进行后贴片和广告 Pod SCTE 信号：

##### 片前广告
<a name="post-roll-ad-markers"></a>

对于 HLS 后置式广告，`CUE-OUT/IN` 标记必须位于最后一个内容分段之前。这是因为 HLS 规范要求必须在分段之前明确声明标记装饰器。

例如，考虑以下声明：

```
#EXT-X-CUE-OUT: 0
#EXT-X-CUE-IN
#EXTINF:4.000,
Videocontent.ts
#EXT-X-ENDLIST
```

AWS Elemental MediaTailor 插入如下所示的帖子。

```
#EXTINF:4.000,
Videocontent.ts
#EXT-X-DISCONTINUITY
#EXTINF:3.0,
Adsegment1.ts
#EXTINF:3.0,
Adsegment2.ts
#EXTINF:1.0,
Adsegment3.ts
#EXT-X-ENDLIST
```

**Example 2: 广告面板**  
 `CUE-OUT/IN`标签必须明确附加到区段。您不能连续使用多个 `CUE-OUT/IN` 标记来模拟广告 pod 行为。  
例如，以下声明是描绘广告窗格的有效用法。`CUE-OUT/IN`  

```
#EXT-X-CUE-OUT: 0
#EXT-X-CUE-IN
#EXTINF:4.000,
Somecontent1.ts
#EXT-X-CUE-OUT: 0
#EXT-X-CUE-IN
#EXTINF:4.000,
Somecontent2.ts
#EXT-X-CUE-OUT: 0
#EXT-X-CUE-IN
#EXTINF:4.000,
Videocontent.ts
```
上述声明会导致如下所示的输出。  

```
Ad 1
Somecontent.ts
Ad 2
Somecontent2.ts
Videocontent.ts
Post-Roll Ad 3
```
以下声明无效。  

```
#EXT-X-CUE-OUT: 0
#EXT-X-CUE-IN
#EXT-X-CUE-OUT: 0
#EXT-X-CUE-IN
#EXT-X-CUE-OUT: 0
#EXT-X-CUE-IN
#EXTINF:4.000,
Videocontent.ts
```

### 如果没有广告标记
<a name="no-markers"></a>

广告标记是在清单中发出广告中断信号的推荐方式。但是，不需要广告标记。如果清单中不包含 DASH 或 HLS 的广告标 MediaTailor 记，则只需调用 ADS 并根据响应创建广告插播时间：
+ 如果 ADS 发送了 VAST 响应，则 MediaTailor 会在清单开头的广告插播时段中插入响应中的所有广告。这是一种前置式广告。
+ 如果 ADS 发送 VMAP 响应，则 MediaTailor 使用广告中断时间偏移来创建广告片段，并在指定时间（前置片段、中片或片尾片段）将其插入到整个清单中。 MediaTailor 使用清单中每个广告时段的 VMAP 响应中每个广告时段的所有广告。
**注意**  
对于 VOD 内容，当片段与具有 VMAP 的插入点重叠时， MediaTailor 会向下舍入到最近的插入点。
**提示**  
如果您希望创建中置式广告时段，但您的 ADS 不支持 VMAP，请确保清单中有广告标记。 MediaTailor 将在标记处插入广告，如以下各个部分中所述。

**注意**  
对于服务器引导的广告插入方法， MediaTailor 请在清单的顶部插入前置广告，然后玩家在其他广告类型之前播放这些广告。

## 直播广告拼接行为
<a name="ad-behavior-live"></a>

在直播中， AWS Elemental MediaTailor 始终执行广告替换，尽可能保持广告标记之间的总时间。当广告标记包含该`DURATION`属性时， MediaTailor 使用该值来确定广告时段的持续时间。在实时工作流程中，每个`CUE-OUT``CUE-IN`指标都必须有持续时间或匹配的指标。

MediaTailor 替换 HLS 和 DASH 直播内容的广告。有关如何 MediaTailor 计算广告插播时间和时间的信息，请参阅[HLS 支持的广告标记](hls-ad-markers.md)和[DASH 广告标记](dash-ad-markers.md)。

### 广告选择和替换
<a name="ad-behavior-live-ad-selection"></a>

AWS Elemental MediaTailor 包括来自广告决策服务器 (ADS) VAST 响应的广告，如下所示：
+ 如果指定了持续时间，则 MediaTailor 选择一组适合时长的广告并将其包括在内。
+ 如果未指定持续时间，则会尽可能多地 MediaTailor 播放广告，直到遇到表示返回主内容的广告标记为止。

AWS Elemental MediaTailor 在直播广告替换期间，请遵守以下准则：
+ MediaTailor 尝试播放完整的广告，而不进行剪辑或截断。
+ 每当 MediaTailor 遇到表明广告插播结束的广告标记时，它都会返回到底层内容。这可能意味着缩短当前播放的广告。
+ 在持续时间结束时， MediaTailor 返回到基础内容。
+ 如果 MediaTailor 在广告时段内没有广告可供播放，则它要么播放 slate（如果已配置），要么恢复底层内容流的播放。这种情况通常出现在没有足够的转码广告来填补广告时段的持续时间时。

  
**提示**  
您可以使用个性化的阈值配置设置，定义广告时段中允许的有限未填充广告时间。有关更多信息，请参阅[PlaybackConfiguration 参考](https://docs.aws.amazon.com/mediatailor/latest/apireference/API_PutPlaybackConfiguration.html#mediatailor-PutPlaybackConfiguration-request-PersonalizationThresholdSeconds)资料。

### 服务器引导式广告插入的实时预告片
<a name="ad-behavior-live-preroll-sgai"></a>

与服务器端广告插入相比，对于服务器引导的广告插入方法，Live preroll 的工作方式有所不同：

服务器端广告插入（拼接模式）  
每位观众会话开始时，前置广告会取代部分直播内容。每位观众根据加入直播的时间在不同的时间看到预告片。

服务器引导的广告插入方法  
MediaTailor 在所有带有属性的媒体清单的顶部放置一个 preroll daterange 标签。`CUE="PRE,ONCE"`这会导致玩家在播放开始时请求和播放前贴片广告一次，尽管他们共享的是相同的非个性化清单。

**配置要求：**
+ **直播前片广告决策服务器：**为前置广告配置 VAST 端点（可能与插播广告不同）
+ **直播前片允许的最大持续时间：**设置前置广告的最大持续时间（可选，如果省略，则将使用所有返回的广告）

**技术实现：**
+ Preroll 日期范围标签使用`START-DATE="1970-01-01T00:00:00.000Z"`（Unix 时代）
+ 素材资源列表请求使用配置的预贴广告决策服务器，而不是普通的 ADS
+ 玩家通过资产列表`availId="aws-mediatailor-preroll-1"`中的数据识别预览请求

**重要**  
对于直播，前置广告会覆盖内容，而不是延迟内容。未来的版本可能会通过其他配置选项支持内容延迟模式。

**注意**  
对于服务器引导的广告插入，直播内容和 VOD 内容的预贴行为各不相同。直播内容需要明确的预贴片配置，而 VOD 内容默认包含使用常规广告决策服务器的预贴片。

### 示例
<a name="ad-behavior-live-examples"></a>
+ 如果广告时段的持续时间设置为 70 秒，并且 ADS 响应包含两个 40 秒的广告，则会 AWS Elemental MediaTailor 播放其中一个 40 秒的广告。在剩下的时间内，它将切换到配置的画面或基础内容。在此过程中的任何时间点，如果 MediaTailor 遇到广告插入指示器，则它将立即切换到基础内容。
+ 如果广告时段的持续时间设置为 30 秒，而 ADS 响应提供的最短广告为 40 秒，则不 MediaTailor 播放任何广告。如果配置了广告名单，则会 MediaTailor 播放 30 秒钟或直到遇到提示指示器。否则， MediaTailor 播放基础内容。

# MediaTailor 服务器引导的广告插入概述和实现
<a name="server-guided"></a>

AWS Elemental MediaTailor 服务器引导式广告插入 (SGAI) 通过将广告引用为单独的播放列表，而不是将其直接拼接到媒体播放列表中，从而为服务器端广告插入提供了一种替代方案。这种方法通过可缓存的清单提高了性能，并实现了更好的可扩展性。

有关如何使用服务器引导式广告插入功能的信息 MediaTailor，请从以下列表中选择适用的主题。

## 在播放配置中启用
<a name="enable-in-config"></a>

要允许玩家使用服务器引导的广告插入，您必须在 MediaTailor播放配置`PLAYER_SELECT`中`Insertion Mode`将其设置为。这允许玩家在会话初始化时选择拼接广告或引导式广告插入。

## 创建服务器引导式会话
<a name="create-guided-session"></a>

创建播放会话时，请选择引导模式。如何做到这一点取决于你的玩家是使用隐式会话还是显式会话。

### 隐式创建的服务器引导会话
<a name="create-implicit-guided-session"></a>

追加到 `aws.insertionMode=GUIDED` HLS 多变体播放列表请求中。示例：

```
playback-endpoint/v1/master/hashed-account-id/origin-id/index.m3u8?aws.insertionMode=GUIDED
```

其中：
+ `playback-endpoint` 是 AWS Elemental MediaTailor 在创建配置后生成的唯一播放终端节点。

  示例

  ```
  https://777788889999.mediatailor.us-east-1.amazonaws.com
  ```
+ `hashed-account-id`是你的 AWS 账户 身份证。

  示例

  ```
  777788889999
  ```
+ `origin-id` 是您在创建配置时提供的名称。

  示例

  ```
  myOrigin
  ```
+ `index.m3u8`或者是测试流中清单的名称及其文件扩展名。定义此项，从而在将它附加到您在[第 4 步：创建配置](getting-started-ad-insertion.md#getting-started-add-mapping)中配置的视频内容源时获得完全标识的清单。

使用前面示例中的值，完整 URLs 内容如下。
+ 示例：

  ```
  https://777788889999.mediatailor.us-east-1.amazonaws.com/v1/master/777788889999/myOrigin/index.m3u8?aws.insertionMode=GUIDED
  ```

### 明确创建的服务器引导会话
<a name="create-explicit-guided-session"></a>

将玩家通过 HTTP `POST` 发送`insertionMode=GUIDED`到 MediaTailor 配置的会话初始化前缀端点的 JSON 元数据中添加。

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

```
{
  # other keys, e.g. "adsParams"
  "insertionMode": "GUIDED"       # this can be either GUIDED or STITCHED
}
```

使用此初始化元数据，播放会话将使用服务器引导的广告插入。

# 使用 SGAI 进行广告跟踪
<a name="sgai-ad-tracking"></a>

SGAI 支持服务器端和客户端广告跟踪。您在会话初始化时设置报告模式。模式在会话期间无法更改。

服务器端跟踪（默认）  
MediaTailor 当玩家请求广告区段时，会自动触发 VAST 信标。资产列表 URIs 中的广告包含加密的信标元数据（`awsBeaconData`、`awsBeaconDomain`、`awsConfigurationName`）。玩家必须支持 HLS `#EXT-X-DEFINE:QUERYPARAM` 变量替换。资产列表响应不包含任何`TRACKING`部分。  
有关 SGAI 服务器端信标的工作原理的详细信息，请参阅。[使用服务器引导广告插入 (SGAI) 进行服务器端跟踪](ad-reporting-server-side-sgai.md)

客户端跟踪  
`aws.reportingMode=CLIENT`添加到您的会话初始化请求中。素材资源列表响应包括一个带有信标的`TRACKING`部分 URLs ，玩家可以在广告播放期间触发该信标。`GetTracking`API 端点*不*用于 SGAI 会话。相反，每个资产清单响应都直接包含跟踪数据。跟踪数据使用与服务器端广告插入 (SSAI) 跟踪响应相同的 JSON 架构。  
有关更多信息，请参阅 [服务器引导的广告插入](ad-reporting-client-side.md#ad-reporting-client-side-best-practices-sgai)。

# 引导式预取，带有明显的心跳声
<a name="sgai-guided-prefetch"></a>

对于 SGAI 直播，您可以通过在会话初始化请求中添加`aws.guidedPrefetchMode=MANIFEST`以下内容来启用基于清单的广告预取：

```
https://777788889999.mediatailor.us-east-1.amazonaws.com/v1/master/777788889999/myOrigin/index.m3u8?aws.insertionMode=GUIDED&aws.guidedPrefetchMode=MANIFEST
```

启用后， MediaTailor 将会话标识符 (`?aws.sessionId=<id>`) 作为查询参数附加到多变体播放列表中的每个插页式媒体清单 (`/v1/i-media`) 网址。每次播放器刷新 i-media 清单时，请求都会到达 MediaTailor 会话 ID，该 MediaTailor 会话 ID 用于为即将到来的广告中断排队预取请求。
+ 该`aws.guidedPrefetchMode`参数接受两个值：`MANIFEST`（启用）和`OFF`（禁用，默认）。
+ 引导式预取模式仅对 SGAI 会话有效。在拼接会话中使用它会返回错误。
+ DASH 尚不支持引导式预取模式。
+ 引导式预取与报告模式无关 — 信标在播放时触发，而不是在预取时触发。
+ **使用引导式预取时，请勿在 CDN 中缓存 i-media 清单。**预取机制取决于玩家 MediaTailor 直接收到的清单刷新请求。如果您的 CDN 缓存了`/v1/i-media`响应，则 MediaTailor 不会收到心跳请求，也无法触发预取。

# MediaTailor 服务器引导的广告插入功能兼容性矩阵
<a name="sgai-feature-compatibility"></a>

AWS Elemental MediaTailor 提供了两种具有不同功能兼容性的广告插入方法。服务器引导式广告插入与服务器端广告插入的工作方式不同，后者会影响与某些 MediaTailor 功能的兼容性。使用此表来了解每种广告插入方法都有哪些功能。


**按广告插入方法划分的功能兼容性**  

| 功能 | 服务器端广告插入 (SSAI) | 服务器引导式广告插入 (SGAI) | 
| --- | --- | --- | 
| 广告预取 | ✓ 支持 | 暂不支持 | 
| 广告抑制 | ✓ 支持 | 不适用 | 
| 片前广告行为 | 由 MediaTailor 配置控制 | 由 MediaTailor 配置控制 | 
| 客户端广告跟踪 | 使用 GetTracking API | 资产列表中的 TRACKING “使用” 部分（未使用 GetTracking API） | 
| 服务器端广告跟踪 | ✓ 支持 — 信标根据使用会话 ID 的/v1/segment请求触发 | ✓ 支持（仅限 HLS）— 使用无会话信标，在广告中嵌入加密信标数据。 URIs \$1EXT-X-DEFINE:QUERYPARAM需要 HLS v11 或更高版本。尚不支持达世币。 | 
| 广告标识装饰 | ✓ 支持 | ✗ 不兼容 | 

## 兼容性详情
<a name="compatibility-details"></a>

### 广告预取
<a name="prefetch-compatibility"></a>

目前不支持广告预取。

### 广告抑制
<a name="prefetch-compatibility"></a>

服务器引导的广告插入方法不支持广告抑制，因为玩家只能获取他们要播放的广告。

### 片前广告行为
<a name="preroll-compatibility"></a>

不同的插入方法不同，片前广告的时机有所不同：
+ **服务器端广告插入：**根据 MediaTailor 配置设置控制何时播放前置广告
+ **服务器引导的广告插入：**在清单的顶部插入 MediaTailor 片前广告。你的玩家会先展示这些广告，然后开始播放你的内容

### 广告跟踪
<a name="tracking-compatibility"></a>

根据广告插入方法，**客户端跟踪**使用不同的机制：
+ **服务器端广告插入 (SSAI)：使用 AP** I 端点 `GetTracking`
+ **服务器引导式广告插入 (SGAI)：**在每个资产列表响应的`TRACKING`部分 MediaTailor 提供跟踪信息。未使用 `GetTracking` API 端点。会话初始化响应不包括`trackingUrl`。

**服务器端跟踪**也因方法而异：
+ **服务器端广告插入 (SSAI)：**当玩家使用会话 ID 获取拼接的广告段时，会 MediaTailor 触发信标。`/v1/segment/`
+ **服务器引导广告插入 (SGAI)：** MediaTailor 使用无会话信标。 MediaTailor 在广告清单中嵌入加密的信标数据 (`awsBeaconData``awsBeaconDomain`、、`awsConfigurationName`) URIs ，然后在资产列表中返回这些数据。广告清单使用`#EXT-X-DEFINE:QUERYPARAM`标签，因此玩家可以将这些值替换为细分 URLs。当玩家请求每个广告段时， MediaTailor 会解密数据，触发相应的信标，然后重定向到内容区段。当服务器端报告处于活动状态时， MediaTailor 在资产列表响应中省略该`TRACKING`部分。有关更多信息，请参阅 [使用服务器引导广告插入 (SGAI) 进行服务器端跟踪](ad-reporting-server-side-sgai.md)。

### 广告标识装饰
<a name="ad-id-compatibility"></a>

广告-ID 装饰与服务器引导的广告插入不兼容，因为填充 X-AD-CREATIVE-SIGNALING标题的字段只有在获取素材资源列表时才会知道，而不是在写入清单时才知道。

# MediaTailor 服务器引导的直播广告插入配置
<a name="sgai-live-configuration"></a>

AWS Elemental MediaTailor 服务器引导的直播内容广告插入通过可缓存的清单带来显著的性能优势。为直播内容配置 SGAI 使用的核心参数与 VOD 相同，但需要特别考虑直播特性和实时处理。

## 直播 SGAI 的要求
<a name="sgai-live-requirements"></a>

在为直播内容启用 SGAI 之前，请确保具备以下条件：
+ 您的直播包含格式正确的 DATERANGE 标记
+ 广告时长一致且可预测
+ 您的 CDN 已配置为适当地缓存 SGAI 清单
+ 玩家支持服务器引导的广告插入工作流程
+ 您的广告决策服务器可以处理直播内容的实时请求

### 玩家要求
<a name="sgai-live-player-integration"></a>

必须将玩家配置为正确处理 SGAI 直播清单：
+ Support 支持服务器引导的广告插入工作流程
+ 能够处理清单中的广告插入指导
+ 正确处理直播定时和同步
+ 对于 HLS 内容：支持 HLS 版本 8 并 EXT-X-DATERANGE带有 CLASS 属性。服务器端信标的版本 11。
+ 对于 HLS 内容：支持 EXT-X-DEFINE变量替换

## 直播回放配置
<a name="sgai-live-playback-config"></a>

要为直播内容启用 SGAI，请创建具有以下设置的播放配置：

**Example SGAI 直播回放配置**  

```
{
  "Name": "LiveSGAIConfig",
  "VideoContentSourceUrl": "https://your-live-origin.com/live/stream.m3u8",
  "AdDecisionServerUrl": "https://your-ads.com/ads",
  "PersonalizationThresholdSeconds": 1,
  "InsertionMode": "PLAYER_SELECT"
}
```

以下是实时 SGAI 配置的关键注意事项：

`VideoContentSourceUrl`  
必须指向带有格式正确的 SCTE-35 DATERANGE 标记的直播 HLS 直播。直播应保持一致的片段持续时间和比特率变体。

## SGAI 实时清单请求
<a name="sgai-live-manifest-requests"></a>

SGAI 直播清单使用与传统广告插入相同的网址模式：

```
https://your-config.mediatailor.region.amazonaws.com/v1/master/config-name/manifest.m3u8?aws.insertionMode=GUIDED
```

## 实时 SGAI 的基于清单的预取
<a name="sgai-live-guided-prefetch"></a>

对于实时 SGAI 工作流程，您可以启用基于清单的预取检测信号，以减少广告填充延迟。在清单`aws.guidedPrefetchMode=MANIFEST`请求中添加：

```
https://your-config.mediatailor.region.amazonaws.com/v1/master/config-name/manifest.m3u8?aws.insertionMode=GUIDED&aws.guidedPrefetchMode=MANIFEST
```

启用后， MediaTailor 将会话标识符 (`?aws.sessionId=<id>`) 作为查询参数附加到多变体播放列表中的每个插页式媒体清单 (`/v1/i-media`) 网址。每次玩家刷新 i-media 清单时，请求都会到达 MediaTailor会话 ID，该 MediaTailor 会话 ID 用于识别会话，并将预取请求排队等候即将到来的广告时段。

**重要**  
**使用引导式预取时，请勿在 CDN 中缓存 i-media 清单。**预取心跳机制取决于玩家直接收到的清单刷新请求。 MediaTailor 如果您的 CDN 缓存并提供`/v1/i-media`响应，则 MediaTailor 不会收到心跳请求，也无法触发预取。将您的 CDN 配置为在使用 MediaTailor `aws.guidedPrefetchMode=MANIFEST`时传递`/v1/i-media/*`请求。

引导式预取与报告模式无关。无论您使用服务器端（默认）还是客户端（`aws.reportingMode=CLIENT`）跟踪，信标都会在播放时触发，而不是在预取广告时触发。有关广告预取工作原理的一般信息 MediaTailor，请参阅。[预取广告](prefetching-ads.md)

## 测试 SGAI 实时配置
<a name="sgai-live-testing"></a>

使用以下验证步骤验证您的 SGAI 实时设置：

1. **生成测试清单**

   请求 SGAI Live 清单网址，并验证其返回的可缓存内容以及正确的广告插入指导。

1. **验证 CDN 缓存**

   检查您的 CDN 是否正在根据配置的 TTL 值缓存 SGAI 清单。

1. **测试广告插入**

   根据 SGAI 清单中提供的指南，确认玩家可以成功插入广告。

1. **监控性能**

   使用 CloudWatch 指标来验证源负载减少和缓存命中率的提高。

# MediaTailor VOD 内容的服务器引导式广告插入配置
<a name="sgai-vod-configuration"></a>

AWS Elemental MediaTailor 通过高度可缓存的清单和减少服务器处理量，VOD 内容的服务器引导式广告插入可显著提高性能。为 VOD 内容配置 SGAI 可以利用 video-on-demand资产的静态特性来最大限度地提高缓存效率并最大限度地减少源请求，因此非常适合具有重复观看模式的大型内容库。

## VOD SGAI 的要求
<a name="sgai-vod-requirements"></a>

在为 VOD 内容启用 SGAI 之前，请确保满足以下条件：
+ 您的 VOD 内容包含格式正确的广告标记（SCTE-35 或定时元数据）
+ 内容存储在可靠的来源中，且可用性始终如一
+ 您的 CDN 已配置为缓存带有相应的 TTL 值的 SGAI 清单
+ 玩家支持服务器引导的广告插入工作流程
+ 您的广告决策服务器可以处理特定于 VOD 的元数据和定位

### 玩家要求
<a name="sgai-vod-player-requirements"></a>

必须将玩家配置为处理 SGAI VOD 清单和广告插入：
+ Support 支持服务器引导的广告插入工作流程
+ 能够处理 VOD 清单中的广告插入指导
+ Support 支持在 VOD 播放期间插入客户端广告
+ 正确处理广告时段内的搜索操作
+ Support 支持内容时长和位置跟踪

## VOD 播放配置
<a name="sgai-vod-playback-config"></a>

要为 VOD 内容启用 SGAI，请创建具有以下设置的播放配置：

**Example SGAI VOD 播放配置**  

```
{
  "Name": "VODSGAIConfig",
  "VideoContentSourceUrl": "https://your-vod-origin.com/content/",
  "AdDecisionServerUrl": "https://your-ads.com/ads",
  "PersonalizationThresholdSeconds": 5,
  "InsertionMode": "PLAYER_SELECT"
}
```

以下是 VOD SGAI 配置的关键注意事项：

`VideoContentSourceUrl`  
应使用一致的网址模式指向你的 VOD 内容库。确保源站能够处理预期的请求量并提供可靠的内容传输。

`ConfigurationAliases`  
包括特定于 VOD 的参数，例如内容时长、流派或系列信息，这些参数可用于广告定位，而不会影响清单的可缓存性。

`ManifestProcessingRules`  
启用广告标记直通以保留原创内容的时序信息，这对于具有预定义广告插播位置的 VOD 内容尤其重要。

## SGAI VOD 清单请求
<a name="sgai-vod-manifest-requests"></a>

SGAI VOD 清单使用与传统 VOD 广告插入相同的网址模式。

```
https://your-config.mediatailor.region.amazonaws.com/v1/master/config-name/content-path/manifest.m3u8?aws.insertionMode=GUIDED
```

## 特定于 VOD 的广告定位
<a name="sgai-vod-ad-targeting"></a>

VOD 内容提供了独特的广告定位机会：

### 内容元数据定位
<a name="sgai-vod-content-metadata"></a>

利用 VOD 内容元数据改善广告定位：
+ **类型和类别：**根据内容类型（剧情、喜剧、纪录片）定位广告
+ **内容分级：**确保广告内容与年龄相符（G、PG、R 评级）
+ **系列和季节：**针对连续剧或相关内容投放广告
+ **发布日期：**基于内容年龄（新版本与目录内容）进行定位
+ **内容时长：**根据内容总长度调整广告加载量

### 查看情境定位
<a name="sgai-vod-viewing-context"></a>

VOD 观看模式支持情境广告定位：
+ **一天中的时间：**根据观看内容的时间来定位广告
+ **狂看：调整观看**多集的用户的广告频率
+ **完成率：**根据用户的历史内容完成模式进行定位
+ **设备类型：**优化用于观看设备（电视、手机、平板电脑）的广告格式

## 测试 SGAI VOD 配置
<a name="sgai-vod-testing"></a>

使用以下验证步骤验证您的 SGAI VOD 设置：

1. **生成测试清单**

   请求不同内容类型的 SGAI VOD 清单 URLs ，并通过适当的广告插入指导验证它们返回可缓存的内容。

1. **验证 CDN 缓存**

   检查您的 CDN 是否根据配置的 TTL 值缓存 SGAI 清单并实现较高的缓存命中率。

1. **测试广告插播情况**

   根据各种 VOD 内容的 SGAI 清单中提供的指南，确认玩家可以成功插入广告。

1. **测试寻道操作**

   验证在 VOD 内容中搜索是否能在广告间隔中正常运行，并保持正确的播放位置。

1. **监控性能**

   使用 CloudWatch 指标来验证源站负载减少、缓存命中率提高以及广告成功插入率。

### 关键测试场景
<a name="sgai-vod-testing-scenarios"></a>

测试以下特定的 VOD 场景：
+ **热门内容：**验证经常访问的 VOD 资产的高缓存命中率
+ **长篇内容：**测试带有多个广告插播时间的电影或长剧集中的广告插入
+ **系列内容：**验证系列中各剧集的广告定位一致性
+ **不同类型：**根据内容元数据和流派测试广告定位

## VOD SGAI 优化最佳实践
<a name="sgai-vod-optimization"></a>

优化 SGAI VOD 实现以获得最佳性能：

### 缓存优化
<a name="sgai-vod-cache-optimization"></a>
+ **最大化 TTL 值：**由于内容不会改变，因此对 VOD 清单使用更长的缓存持续时间
+ **最小化缓存密钥：**减少缓存密钥的变化以提高命中率
+ **预热热门内容：**缓存热门或精选 VOD 内容的清单
+ **监控缓存性能：**跟踪缓存命中率并根据使用模式进行优化

### 内容分发优化
<a name="sgai-vod-content-optimization"></a>
+ **一致的 URL 模式：**使用可预测的 URL 结构实现更好的缓存
+ **元数据标准化：**确保内容元数据一致，实现可靠的广告定位
+ **广告插播定位：**优化广告插播位置，实现自然的内容转换
+ **质量变体：**确保 SGAI 适用于您的 VOD 内容的所有比特率变体

# MediaTailor 广告服务器集成要求
<a name="vast"></a>

要将您的广告服务器与集成 AWS Elemental MediaTailor，您的广告服务器必须发送符合支持版本的 VAST 和 VMAP 的 IAB 规范的 XML。您可以使用公有 VAST 验证器确保标签的格式正确。

AWS Elemental MediaTailor 支持来自广告决策服务器的 VAST 和 VMAP 响应。 AWS Elemental MediaTailor 还支持通过我们的客户端报告 API 代理 VPAID 元数据，用于客户端广告插入。有关客户端报告的信息，请参阅[客户端广告跟踪](ad-reporting-client-side.md)。

MediaTailor 支持以下版本的 VAST、VMAP 和 VPAID：
+ 最高 V [AST 4.3](https://iabtechlab.com/standards/vast/) 

  MediaTailor 接受 VAST 4.3 以上的响应版本，但不支持 VAST 4.0 及更高版本的某些高级功能。
+ [VMAP 1.0](https://www.iab.com/guidelines/digital-video-multiple-ad-playlist-vmap-1-0-1/)
+ [VPAID 2.0](https://www.iab.com/guidelines/digital-video-player-ad-interface-definition-vpaid-2-0/)

## 大量的要求
<a name="vast-integration"></a>

广告服务器的 VAST 响应必须包含符合 IAB 的 `TrackingEvents` 元素和标准事件类型，例如 `impression`。如果您包含非标准的跟踪事件，则 AWS Elemental MediaTailor 会拒绝 VAST 响应，并且不提供广告以供使用。

VAST 3.0 引入了对广告连播的支持，广告连播是一组线性广告序列的投放。如果广告栏中的特定广告不可用， AWS Elemental MediaTailor 则会在广告的互动日志中记录错误。 CloudWatch然后，它会尝试在连播中插入下一个广告。通过这种方式， MediaTailor 遍历窗格中的广告，直到找到可以使用的广告。

### 设置目标
<a name="targeting"></a>

要为您的广告定位特定的玩家，您可以为广告代码创建模板，然后 URLs。有关更多信息，请参阅 [MediaTailor ADS 请求的动态广告变量](variables.md)。

AWS Elemental MediaTailor 当玩家发送广告服务器 VAST `x-forwarded-for` 请求`user-agent`以及进行服务器端跟踪调用时，代理播放器的标题和标头。确保您的广告服务器可以处理这些标头。或者，您也可以使用 `[session.user_agent]` 或 `[session.client_ip]` 并在广告标签或广告 URL 上的查询字符串中传递这些值。有关更多信息，请参阅 [MediaTailor ADS 请求的会话变量](variables-session.md)。

### 广告电话
<a name="ad-calls"></a>

AWS Elemental MediaTailor 按照您的配置中的定义调用您的 VAST 广告网址。在进行广告调用时，它会替换任何特定于玩家或会话特定的参数。 MediaTailor 在 VAST 响应中遵循多达七个级别的 VAST 包装器和重定向。在直播场景中 MediaTailor ，连接的玩家在广告开始时同时拨打广告电话。实际上，由于抖动，这些广告调用可能会相差几秒钟。请确保您的广告服务器能够处理此类呼叫所需的并发连接数。 MediaTailor 支持为实时工作流程预取 VAST 响应。有关更多信息，请参阅 [预取广告](prefetching-ads.md)。

### 创造性的操控
<a name="creative-handling"></a>

当 AWS Elemental MediaTailor 收到 ADS VAST 响应时，它会为每个广告素材识别`MediaFile`出转码的最高比特率并将其用作来源。它将此文件发送到 on-the-fly转码器，以便转换为适合玩家多变体播放列表比特率和分辨率的格式副本。为了获得最佳效果，请确保比特率最高的媒体文件是具有有效清单预设的高质量 MP4 资产。当清单预设无效时，转码任务将失败，从而导致广告无法显示。无效的预设示例包括不支持的输入文件格式（例如）和某些格式副本规范 ProRes，例如分辨率 855X481。

有关媒体文件输入支持的格式列表，请参阅《*AWS Elemental MediaConvert 用户指南*》中的 “[支持的输入格式](https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html)” **MP4**行。

**创意索引**  
AWS Elemental MediaTailor 根据`<Creative>`元素中提供的`id`属性的值对每个广告素材进行唯一索引。如果未指定广告素材的 ID，则 MediaTailor 使用媒体文件网址作为索引。

以下示例声明显示了广告素材 ID。

```
<Creatives>
        <Creative id="57859154776" sequence="1">
```

如果您定义自己的广告素材 IDs，请为每个广告素材使用一个新的、唯一的 ID。不要重复使用创意 IDs。 AWS Elemental MediaTailor 存储创意内容以供重复使用，并按其索引 ID 查找每个内容。当新广告素材传入时，该服务首先会对照索引检查其 ID。如果 ID 存在， MediaTailor 将使用存储的内容，而不是重新处理传入的内容。如果您重复使用广告素材 ID，则会 MediaTailor 使用存储的较旧广告，并且不会播放您的新广告。

**广告服务合作伙伴提供的 VAST 扩展程序**  
为了帮助防止与广告素材发生冲突 IDs，您可以使用广告投放合作伙伴提供的扩展程序来响应 VAST 响应。 MediaTailor 支持来自 SpringServe、Publica 和 FreeWheel的扩展。启用 VAST 扩展覆盖后，会将默认的广告素材 ID MediaTailor 替换为扩展值。

要启用此功能，[请提交 Su AWS pport 工单](https://console.aws.amazon.com/support/home#/)，请求启用基于 VAST 扩展的广告素 IDs 材。在 Support 请求中包含以下信息：
+ AWS 区域
+ AWS 账号
+ MediaTailor 播放配置名称

要验证您的账户 IDs 是否启用了基于 VAST 扩展的广告素材，我们建议您同时请求在暂存或测试播放配置上启用`RAW_ADS_RESPONSE`日志记录。通过日志记录，您可以查看 ADS 收到的原始 VAST 响应，并确认使用了正确的广告 IDs 素材。

## VPAID 要求
<a name="vpaid"></a>

VPAID 允许发布商提供高度互动的视频广告并在其货币化流上提供可见性指标。有关 VPAID 的信息，请参阅 V [PAID 规范。](https://www.iab.com/guidelines/digital-video-player-ad-interface-definition-vpaid-2-0/)

AWS Elemental MediaTailor 在相同的广告可用性中支持 V server-side-stitched AST MP4 线性广告 client-side-inserted和 VPAID 互动广告的组合。它保留了它们在 VAST 响应中出现的顺序。 MediaTailor 通过最多七个级别的包装器跟踪 VPAID 重定向。客户端报告响应包含未打包的 VPAID 元数据。

要使用 VPAID，请遵循以下准则：
+ 为您的 VP MP4 AID 广告素材配置名单。 AWS Elemental MediaTailor 使用您配置的广告位填充 VPAID 广告位，并提供 VPAID 广告元数据供客户玩家投放互动广告。如果您尚未配置画面，则在 VPAID 广告出现时， MediaTailor 会像往常一样通过客户端报告提供广告元数据。它还会记录 CloudWatch 有关丢失的板块的错误。有关更多信息，请参阅[MediaTailor slate 广告插入](slate-management.md)和[创建 MediaTailor 播放配置](configurations-create.md)。
+ 使用客户端报告。 AWS Elemental MediaTailor 通过我们的客户端报告 API 支持 VPAID。有关更多信息，请参阅 [客户端广告跟踪](ad-reporting-client-side.md)。

  理论上，可以将默认服务器端报告模式与 VPAID 一起使用。但是，如果您使用服务器端报告，则会丢失有关 VPAID 广告是否存在及其相关元数据的任何信息，因为这些信息只能通过客户端 API 获得。
+ 在直播场景中，请确保您的广告可用时间（用表示）足够长`EXT-X-CUE-OUT: Duration`，足以容纳 VPAID 上的任何用户互动。例如，如果 VAST XML 指定的 VPAID 广告时长为 30 秒，则可以考虑将广告投放时间配置为超过 30 秒。这段额外的时间为用户提供了更多与广告互动的机会。如果您不添加时间，则可能会丢失 VPAID 元数据，因为广告可用中的剩余时长不足以容纳 VPAID 广告。



# MediaTailor 播放配置管理
<a name="working-with-configurations"></a>

本节介绍管理 AWS Elemental MediaTailor 播放配置的关键任务。您可以学习如何创建新配置来设置内容流和为播放设备提供访问权限、查看现有配置的详细信息、编辑配置以更新源服务器和广告决策服务器等设置，以及删除不再需要的配置。

**Topics**
+ [创建 MediaTailor 播放配置](configurations-create.md)
+ [查看 MediaTailor 配置详情](configurations-view.md)
+ [编辑 MediaTailor 配置设置](configurations-edit.md)
+ [删除 MediaTailor 配置](configurations-delete.md)

# 创建 MediaTailor 播放配置
<a name="configurations-create"></a>

本主题介绍如何创建用于开始接收内容流的配置 AWS Elemental MediaTailor。它还展示了如何为下游播放设备提供请求内容的接入点。

您可以使用 AWS Elemental MediaTailor 控制台、 AWS Command Line Interface (AWS CLI) > 或 MediaTailor API 来创建配置。有关通过 AWS CLI 或 MediaTailor API 创建配置的信息，请参阅 AP [https://docs.aws.amazon.com/mediatailor/latest/apireference/what-is.html](https://docs.aws.amazon.com/mediatailor/latest/apireference/what-is.html)。

创建配置时，请勿将敏感的标识信息放入自由格式字段（例如**配置名称**字段）中。识别信息可以包括客户账号之类的内容。此外，在 MediaTailor控制台、REST API、或中工作时，请勿使用识别信息 AWS SDKs。 AWS CLI您输入的任何数据都 MediaTailor 可能会被提取以包含在诊断日志或 Amazon Ev CloudWatch ents 中。

**添加配置（控制台）**

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1. 在 **Configurations (配置)** 页面上，选择 **Create configuration (创建配置)**。

1. 填写配置和其他配置字段，如以下主题所述：
   +  [必需的设置](#configurations-create-main) 
   +  [可选配置设置](#configurations-create-addl) 

1. 选择**创建配置**。

   AWS Elemental MediaTailor 在 “配置” 页面的表格中显示了新的**配置**。

1. （推荐） AWS Elemental MediaTailor 为清单和报告请求设置 CDN。您可以将配置回放用 URLs 于 CDN 设置。有关为清单和报告请求设置 CDN 的信息，请参阅[使用 CDN 优化 MediaTailor 广告个性化和内容交付](integrating-cdn.md)。

## 必需的设置
<a name="configurations-create-main"></a>

当您创建配置时，必须包括以下必需的设置。

**Name**  
输入描述配置的唯一名称。此名称是配置的主要标识符。允许的最大长度为 512 个字符。

**内容来源**  
 输入此流的清单的 URL 前缀（去掉资产 ID）。最大长度为 512 个字符。  
例如，网址前缀对`http://origin-server.com/a/`于 HLS 多变体播放列表网址`http://origin-server.com/a/main.m3u8`和 DASH MPD 网址有效。`http://origin-server.com/a/dash.mpd`或者，您可以输入一个较短的前缀（如 `http://origin-server.com`），但 `/a/` 必须包含在播放器内容请求的资产 ID 中。  
如果您的内容源使用 HTTPS，则其证书必须来自知名的证书颁发机构。它不能是自签名证书。如果您使用自签名证书， AWS Elemental MediaTailor 则无法连接到内容来源，也无法根据玩家请求提供清单。

**广告决策服务器**  
 输入您的广告决策服务器 (ADS) 的 URL。这是包含变量的 URL（如[步骤 3：配置 ADS 请求网址和查询参数](getting-started-ad-insertion.md#getting-started-configure-request)中所述），或用于测试用途的静态 VAST URL。最大长度为 25000 个字符。  
如果您的 ADS 使用 HTTPS，则其证书必须来自知名的证书颁发机构。它不能是自签名证书。这同样适用于ADS URLs 返回的夹层广告。如果您使用自签名证书，则 AWS Elemental MediaTailor 无法从内容来源检索广告并将其拼接到清单中。

## 可选配置设置
<a name="configurations-create-addl"></a>

您可以选择在 MediaTailor 控制台、 MediaTailor API 或 AWS Command Line Interface (AWS CLI) 中**配置配置别名**、**个性化详细信息和****高级设置**。

### 配置别名
<a name="configurations-configuration-aliases"></a>

以下是可在 MediaTailor 控制台中或通过 MediaTailor API 配置的可选配置别名。

**玩家参数变量**  
要在会话初始化期间进行动态域配置，请添加一个或多个玩家参数变量。  
有关使用玩家参数变量动态配置域名的更多信息，请参阅[MediaTailor 多个内容源的域变量](variables-domains.md)。

### 日志配置
<a name="configurations-log-configurations"></a>

以下是日志配置设置。

**已启用百分比**  
设置 MediaTailor 写入日志的播放配置会话 CloudWatch 日志的百分比。例如，如果您的播放配置有 1000 个会话，并且您将启用百分比设置为 **60，则会将 600 个**会话日志 MediaTailor 写入 CloudWatch 日志。  
 启用此选项后， MediaTailor 会自动创建一个服务相关角色， MediaTailor 允许在您的日志账户中写入和管理会话 CloudWatch 日志。有关更多信息，请参阅 [将服务相关角色用于 MediaTailor](using-service-linked-roles.md)。

**日志策略**  
表示用于收集 MediaTailor发出的日志的方法。要将日志直接发送到 CloudWatch 日志，请选择`LEGACY_CLOUDWATCH`。要将日志发送到 CloudWatch 日志，然后日志将日志发送到您选择的目的地，请`VENDED_LOGS`选择。支持的目标包括 CloudWatch 日志组、Amazon S3 存储桶和 Amazon Data Firehose 流。  
对于已售日志，需要进行其他设置。有关设置，请参阅[使用已售日志](vended-logs.md)。

**ADS 互动记录选择加入事件**  
表示 MediaTailor 将为使用此配置初始化的会话发出`RAW_ADS_RESPONSE`日志。  
`RAW_ADS_RESPONSE`日志事件包含来自 ADS 的整个 VAST 或 VMAP 响应。因此，日志可能非常广泛，可能会增加您的日志成本。

**ADS 互动日志排除事件**  
表示 MediaTailor 不会在描述与 ADS 互动的日志中发出选定事件。  
有关 ADS 日志事件的描述，请参阅[广告日志](ads-log-format.md)。

**清单服务交互日志排除事件**  
表示 MediaTailor 不会在描述与清单服务交互的日志中发出选定事件。  
有关清单服务日志事件的描述，请参阅[清单日志](log-types.md)。

### 广告调节
<a name="configurations-ad-conditioning"></a>

以下内容确定了在将广告拼接到内容流中之前， MediaTailor 需要采取哪些措施来对其进行调节。

**流媒体文件调节**  
确定在决定拼接哪些广告时 MediaTailor 使用的逻辑。  
+ 当 “**流媒体文件调节**” 设置为 “**转码**” 时，在`progressive`交付时对媒体文件进行 MediaTailor 转码，然后将其拼接到清单中。如果没有足够的带有`progressive`投放媒体文件的广告来填补空缺，请对这些广告进行 MediaTailor 转码并使用带有`streaming`投放效果的广告。
+ 当 “**流媒体文件调节**” 设置为 “**无**” 时，将包含 MediaTailor `streaming`投放媒体文件的广告拼接到清单中，而无需对其进行转码。如果没有足够的带有`streaming`投放媒体文件的广告来填补空缺，请对这些广告进行 MediaTailor 转码并使用带有`progressive`投放效果的广告。

### 个性化详情
<a name="configurations-personalization-details"></a>

以下是您可以在 MediaTailor 控制台中或使用 MediaTailor API 配置的个性化详细信息。

**画面广告**  
输入用于填充未填充广告时间的优质素 MP4 材资源的网址。 MediaTailor 对于大多数工作流程，Slate 配置是可选的，但对于 VPAID 广告来说是强制性的。有关 slate 行为、配置要求以及何时显示 slate 的全面信息，请参阅。[MediaTailor slate 广告插入](slate-management.md)

**起动保险杠**  
起始保险杠资产位置的 URL。Bumpers 是在广告时段的开头或结尾播放的简短视频或音频片段。它们可以存储在亚马逊的S3或其他存储服务上。要了解有关保险杠的更多信息，请参阅。[MediaTailor 保险杠广告插入](bumpers.md)

**端部保险杠**  
末端保险杠资产位置的 URL。Bumpers 是在广告时段的开头或结尾播放的简短视频或音频片段。它们可以存储在亚马逊的S3或其他存储服务上。要了解有关保险杠的更多信息，请参阅。[MediaTailor 保险杠广告插入](bumpers.md)

**个性化阈值**  
仅在与 slate 广告结合使用时适用。定义在 MediaTailor 放弃个性化设置并显示底层内容之前，广告插播时间允许的最大广告投放时间（以秒为单位）。此功能适用于直播和 VOD 流中的广告替换 而不是广告插入，因为它依赖于基础内容流。有关详细的行为场景和全面的信息，请参阅[个性化阈值的工作原理](slate-management.md#personalization-threshold-scenarios)。

**实时前置式广告决策服务器**  
要在主要内容开始播放之前在实时流的开头插入广告，请从广告决策服务器 (ADS) 输入前置式广告的 URL。这是包含变量的 URL（如[步骤 3：配置 ADS 请求网址和查询参数](getting-started-ad-insertion.md#getting-started-configure-request)中所述），或用于测试用途的静态 VAST URL。最大长度为 25000 个字符。  
如果您的 ADS 使用 HTTPS，则其证书必须来自知名的证书颁发机构。它不能是自签名证书。这同样适用于ADS URLs 返回的夹层广告。如果您使用自签名证书，则 AWS Elemental MediaTailor 无法从内容来源检索广告并将其拼接到清单中。
有关前置式广告工作方式的信息，请参阅[MediaTailor 片前广告插播](ad-behavior-preroll.md)。

**实时前置式广告最大允许持续时间**  
当您在直播流的开头插入广告时，请输入前置式广告效用的最大允许持续时间。 MediaTailor 插入广告时不会超过此持续时间。如果来自 ADS 的回复中包含的广告数量超过了此时段所能承受的范围，则在不超过持续时间的情况下使用尽可能多的广告来 MediaTailor 填补空缺。有关如何使用 MediaTailor 填充的更多详细信息，请参阅[直播广告拼接行为](ad-behavior.md#ad-behavior-live)。

**可用抑制模式**  
设置效用禁止模式，也称为广告禁止。默认情况下，广告抑制功能处于关闭状态，所有广告都 MediaTailor 填满了广告或名单。当该模式设置为时`BEHIND_LIVE_EDGE`，广告抑制处于活动状态，并且 MediaTailor 不会填充清单回顾窗口中可用抑制值时段或之后的广告中断。当模式设置为时`AFTER_LIVE_EDGE`，广告抑制处于活动状态。 MediaTailor不会填充在可用抑制期（即实时边缘加上可用抑制值加上缓冲时间）之内或之后的广告中断。

**可用抑制值**  
可用抑制值是实时边缘偏移时间`HH:MM:SS`。 MediaTailor 不会在清单回顾窗口中填充此时或之后的广告插播时间。

**插入模式**  
插入模式控制玩家是可以使用拼接广告还是引导式广告插入。默认设置为强制所有玩家会话使用拼接（服务器端）广告插入。`STITCHED_ONLY`设置 InsertionMode 为`PLAYER_SELECT`允许玩家在会话初始化时选择拼接广告或引导式广告插入。对于未指定插入模式的玩家，默认设置为拼接。

### 高级设置
<a name="configurations-advanced-settings"></a>

以下是可选的高级设置。您可以在 MediaTailor 控制台中使用 AWS Command Line Interface (AWS CLI) 或 MediaTailor API 进行配置。

**CDN 内容分段前缀**  
 AWS Elemental MediaTailor 允许使用内容分段的 CDN 路径创建清单。 URLs 在执行此步骤之前，请在 CDN 中设置规则以从来源服务器中拉取分段。对于 **CDN content segment prefix (CDN 内容分段前缀)**，输入 CDN 前缀路径。  
有关 MediaTailor 与 CDN 集成的更多信息，请参阅[使用 CDN 优化 MediaTailor 广告个性化和内容交付](integrating-cdn.md)。

**CDN 广告分段前缀**  
 AWS Elemental MediaTailor 允许使用您自己的 CDN 路径为广告细分创建清单。 URLs 默认情况下， MediaTailor使用默认缓存设置来自 Amazon 内部 CloudFront 分发的广告区段。您必须先在 CDN 中设置规则以从以下来源拉取广告分段，然后才能填写 **CDN ad segment prefix (CDN 广告分段前缀)** 字段，如下例所示。  

```
https://segments.mediatailor.<region>.amazonaws.com
```
对于 **CDN ad segment prefix (CDN 广告分段前缀)**，在配置中输入您的 CDN 前缀的名称。  
有关 MediaTailor 与 CDN 集成的更多信息，请参阅[使用 CDN 优化 MediaTailor 广告个性化和内容交付](integrating-cdn.md)。

**DASH 原始清单类型**  
如果您的源服务器生成单周期 DASH 清单，请打开下拉列表并选择 **SINGLE\$1PERIOD**。默认情况下， MediaTailor 会将 DASH 清单作为多周期清单处理。有关更多信息，请参阅 [集成 MPEG-DASH 信号源](manifest-dash.md)。

**DASH mpd 位置**  
（根据需要，DASH 可选）媒体演示文稿描述 (mpd) 位置。对于以下情况，请选择 “**已禁用**”：  
+ 您可以设置用于访问 MediaTailor 清单的 CDN 路由规则。
+ 你使用客户端报告，或者你的玩家支持粘性 HTTP 重定向。
有关 **Location (位置)** 功能的更多信息，请参阅 [DASH 定位功能](dash-location-feature.md)。

**对配置文件名称进行转码**  
将此配置与自定义转码配置文件关联的名称。此名称将覆盖动态转码的默认值。 MediaTailor只有在您已经在 AWS Support 的帮助下设置了自定义配置文件时，才填写此字段。

**广告标记直通**  
对于 HLS，启用或禁用广告标记直通。启用广告标记直通后， MediaTailor 会通过`EXT-X-CUE-IN``EXT-X-CUE-OUT`、并将`EXT-X-SPLICEPOINT-SCTE35`广告标记从来源清单传送到 MediaTailor 个性化清单。不对广告标记值应用任何逻辑；它们按原样从来源清单传递到个性化清单。例如，如果`EXT-X-CUE-OUT`来源清单`60`中的值为，但未投放广告，则 MediaTailor 不会在个性化清单`0`中将该值更改为。

# 查看 MediaTailor 配置详情
<a name="configurations-view"></a>

除了创建配置时提供的值外，还 AWS Elemental MediaTailor 会显示配置名称、播放端点和相关访问权限 URLs。要查看配置，请按以下步骤操作。



 **查看配置** 

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1. 在 **Configurations (配置)** 页面上，选择要查看的配置的 **Configuration name (配置名称)**。

# 编辑 MediaTailor 配置设置
<a name="configurations-edit"></a>

您可以编辑配置以更新源服务器和广告决策服务器 (ADS) 映射，或者更改与内容分发网络 (CDN) 的 AWS Elemental MediaTailor 交互方式。



 **编辑配置** 

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1. 在 **Configurations (配置)** 页面上，选择要编辑的配置的名称。

1. 在配置详细信息页面上，选择 **Edit (编辑)**，然后根据需要修改配置设置。您无法编辑配置名称。有关配置属性的信息，请参阅[创建 MediaTailor 播放配置](configurations-create.md)。

1. 选择**保存**。

# 删除 MediaTailor 配置
<a name="configurations-delete"></a>

您可以删除配置，使其无法使用播放 AWS Elemental MediaTailor。



 **删除配置** 

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1. 在 **Configurations (配置)** 页面上，执行下列操作之一：
   + 选择要删除的配置的名称。
   + 在 **Configuration name (配置名称)** 列中，选择名称旁的选项，然后选择 **Delete (删除)**。

1. 在 **Delete (删除)** 确认框中，输入 **Delete**，然后选择 **Delete (删除)**。

# 整合用于 MediaTailor 广告插入的内容来源
<a name="integrating-origin"></a>

本主题介绍如何将不同类型的视频内容源与集成 MediaTailor。 MediaTailor支持直播和点播内容的 HLS 和 DASH 流媒体协议。该服务可以在指定的广告时段进行广告插入或替换，并且对输入视频清单的结构和格式有特定的要求，以启用这些功能。以下主题详细介绍了输入来源要求以及集成 HLS 和 DASH 内容 MediaTailor 以实现个性化广告体验的步骤。

**Topics**
+ [MediaTailor 广告插入的输入来源要求](stream-reqmts.md)
+ [集成 HLS 源代码](manifest-hls.md)
+ [集成 MPEG-DASH 信号源](manifest-dash.md)
+ [使用 Sig AWS Elemental MediaTailor V4 保护源站互动](origin-sigv4.md)

# MediaTailor 广告插入的输入来源要求
<a name="stream-reqmts"></a>

输入源必须满足以下要求才能使用 MediaTailor：
+ 使用 Apple HLS（HTTP 直播流）或 MPEG DASH（基于 HTTP 的动态自适应流）
+ 使用直播或视频点播 (VOD)
+ 可通过公共 Internet 访问并具有公有 IP 地址
+ 使用标准 HTTP 端口（端口 80）或 HTTPS 端口（端口 443）。 MediaTailor 不支持源服务器通信的自定义端口。
+ 使用广告[插入入门教程中描述的其中一种格式包含 MediaTailor 广告](getting-started-ad-insertion.md#getting-started-prep-stream)标记 

# 集成 HLS 源代码
<a name="manifest-hls"></a>

AWS Elemental MediaTailor 支持等于`3`或更高的 `.m3u8` HLS 清单，用于直播和视频点播 (VOD)。`EXT-X-VERSION` MediaTailor 遇到广告插播时，它会根据内容类型尝试插入或替换广告。如果没有足够的广告来填补持续时间，则在广告插播的剩余时间内， MediaTailor 将显示底层内容流或配置的名单。有关基于内容类型的 HLS 广告行为的更多信息，请参阅[了解 AWS Elemental MediaTailor 广告插入行为](ad-behavior.md)。

以下各节提供了有关如何 MediaTailor 处理 HLS 清单的更多信息。

**Topics**
+ [HLS 支持的广告标记](hls-ad-markers.md)
+ [启用广告标记直通功能](ad-marker-passthrough.md)
+ [HLS 清单标签处理](manifest-hls-tags.md)
+ [HLS 清单示例](manifest-hls-example.md)

# HLS 支持的广告标记
<a name="hls-ad-markers"></a>

AWS Elemental MediaTailor 通过解析输入清单中支持的广告标记，识别 HLS 清单中的广告可用性边界。以下各节介绍 MediaTailor 使用什么样的标记。

## EXT-X-ASSET
<a name="hls-ad-markers-asset"></a>

标签 `EXT-X-ASSET` 包含广告决策服务器 (ADS) 用于为查看者个性化内容的元数据。`EXT-X-ASSET` 参数是以逗号分隔的键值对。

要使用该标签，必须满足以下要求：
+ 您必须对源清单中的 `EXT-X-ASSET` *值* 进行 URL 编码。以下示例显示了带有键和 URL 编码值的 `EXT-X-ASSET` 标签。

  ```
              #EXT-X-ASSET:GENRE=CV,CAID=12345678,EPISODE="Episode%20Name%20Date",SEASON="Season%20Name%20and%20Number",SERIES="Series%2520Name"
  ```
+ 您必须在 MediaTailor ADS 配置中包含动态`[asset.]`变量和*密钥*。以下示例显示了使用动态`[asset.]`变量和密钥的 MediaTailor ADS 配置。

  ```
              https://myads.com/stub?c=[asset.GENRE]&g=[asset.CAID]&e=[asset.EPISODE]&s=[asset.SEASON]&k=[asset.SERIES]
  ```

**VAST 请求示例**  
以下示例显示了一个针对 ADS 的 VAST `GET` 请求。

```
            https://myads.com/stub?c=CV&g=12345678&e=Episode%20Name%20Date&s=Season%20Name%20and%20Number&k=Series%2520Name
```

## EXT-X-CUE-OUT 和 EXT-X-CUE-IN
<a name="hls-ad-markers-cue"></a>

这种广告标记类型最为常见。以下示例显示了这些提示标记的选项。

```
#EXT-X-CUE-OUT:DURATION=120
    ...
    #EXT-X-CUE-IN
```

```
#EXT-X-CUE-OUT:30.000
    ...
    #EXT-X-CUE-IN
```

```
#EXT-X-CUE-OUT
    ...
    #EXT-X-CUE-IN
```

## EXT-X-DATERANGE
<a name="hls-ad-markers-range"></a>

借助 `EXT-X-DATERANGE` 广告标记标签，您可以使用 `SCTE35-OUT` 属性来指定广告效用的计时。

**注意**  
AWS Elemental MediaTailor 忽略为`EXT-X-DATERANGE`广告标记提供的任何`START-DATE`属性。

您可以通过以下方式之一指定广告效用：
+ 符合 `SCTE35-OUT` 和 `DURATION` 规范的 `EXT-X-DATERANGE` 标签。

  示例

  ```
  #EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2019-01T00:15:00Z\",DURATION=60.000,SCTE35-OUT=0xF
  ```
+ 成对的 `EXT-X-DATERANGE` 标签，第一个符合 `SCTE35-OUT` 规范，第二个符合 `SCTE35-IN` 规范。

  示例

  ```
  #EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2019-01T00:15:00Z\",SCTE35-OUT=0xF
      ...
      #EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2019-01T00:15:00Z\",SCTE35-IN=0xF
  ```
+ 先前选项的组合。使用 `SCTE35-OUT` 和 `DURATION` 规范指定 `EXT-X-DATERANGE` 标签，然后使用 `SCTE35-IN` 规范指定 `EXT-X-DATERANGE` 标签。在这种情况下， MediaTailor 使用两个规格中最早的提示设置。

  示例

  ```
  #EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2019-01T00:15:00Z\",DURATION=60.000,SCTE35-OUT=0xF
      ...
      #EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2019-01T00:15:00Z\",SCTE35-IN=0xF
  ```

## EXT-X-SPLICEPOINT-SCTE35
<a name="hls-ad-markers-splice"></a>

以 base64 编码的二进制附加具有 SCTE-35 有效负载的 `EXT-X-SPLICEPOINT-SCTE35` 广告标记。解码后的二进制必须为提供商放置机会开始时、广告插入标记 `0x35`、提供商放置机会结束时提供包含广告去除标记 `0x34` 的 SCTE-35 `splice_info_section`。

以下示例显示了带有 base64 编码的二进制有效负载的拼接点规范，这些有效负载指定了广告去除和广告插入标记。

```
    #EXT-X-SPLICEPOINT-SCTE35:/DA9AAAAAAAAAP/wBQb+uYbZqwAnAiVDVUVJAAAKqX//AAEjW4AMEU1EU05CMDAxMTMyMjE5M19ONAAAmXz5JA==
    ...
    #EXT-X-SPLICEPOINT-SCTE35:/DA4AAAAAAAAAP/wBQb+tTeaawAiAiBDVUVJAAAKqH+/DBFNRFNOQjAwMTEzMjIxOTJfTjUAAIiGK1s=
```

# 启用广告标记直通功能
<a name="ad-marker-passthrough"></a>

默认情况下，HLS 的 MediaTailor 个性化清单不包含来源清单中的 SCTE-35 广告标记。启用广告标记直通后， MediaTailor会将以下广告标记从来源清单传递到个性化清单中：
+ EXT-X-CUE-IN
+ EXT-X-CUE-OUT
+ EXT-X-SPLICEPOINT-SCTE35

 广告标记直通是一项可选设置。如果您希望将 SCTE 广告标记包含在 MediaTailor 个性化清单中，请使用广告标记直通。常见用例包括：
+ 内容替换-执行内容替换或内容限制。
+ 广告跟踪-根据是否存在一个或多个广告标记来触发广告跟踪信息。
+ 播放器设置-根据是否存在广告标记，在玩家的用户界面中启用清理或倒计时器功能。

**注意**  
MediaTailor 不会更改这些标记的值。例如，如果`EXT-X-CUE-OUT`来源清单`60`中的值为，但未投放广告，则 MediaTailor 不会在个性化清单`0`中将该值更改为。

## 启用广告标记直通功能
<a name="enable-ad-marker-passthrough"></a>

您可以使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 启用广告标记直通功能。

**使用控制台启用广告标记直通功能**

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1.  选择 “**新建配置****” 或 “编辑配置”**。

1. 在 **“高级设置”** 部分，从下拉菜单中选择 “**启用**”。

**要启用广告标记直通功能，请使用 AWS Command Line Interface ()AWS CLI**  
使用 [put-playback-configuration](https://docs.aws.amazon.com/cli/latest/reference/mediatailor/put-playback-configuration.html) 命令。

# HLS 清单标签处理
<a name="manifest-hls-tags"></a>

本节介绍如何 AWS Elemental MediaTailor 管理个性化输出清单中的标签。

## EXT-X-CUE 标签
<a name="manifest-hls-tags-cue"></a>

MediaTailor 将输入清单中的`EXT-X-CUE-OUT``EXT-X-CUE-OUT-CONT`、和`EXT-X-CUE-IN`标签替换为输出清单中的`EXT-X-DISCONTINUITY`标签。`DISCONTINUITY` 标记标出以下边界：
+ 主要内容过渡到广告的边界
+ 一个广告转换到另一个广告的位置
+ 广告过渡回主内容的边界

## EXT-X-DATERANGE 标签
<a name="manifest-hls-tags-daterange"></a>

MediaTailor 将`EXT-X-DATERANGE`标签从输入清单传递到输出清单。 MediaTailor 还会插入与`EXT-X-DISCONTINUITY`标签对应的`DATERANGE`标签。`DISCONTINUITY` 标记标出以下边界：
+ 主要内容过渡到广告的边界
+ 一个广告转换到另一个广告的位置
+ 广告过渡回主内容的边界

## EXT-X-KEY 标签
<a name="manifest-hls-tags-key"></a>

MediaTailor 传递输入清单中的`EXT-X-KEY`标签。这些标记指示主要内容已加密。由于广告未加密，因此 MediaTailor 可在广告效用的开头插入 `EXT-X-KEY:METHOD=NONE`。当回放返回到主内容时，通过插入定义为加密类型的`METHOD`值的`EXT-X-KEY`标签来 MediaTailor 重新启用加密。

## 无法识别的标签
<a name="manifest-hls-tags-unknown"></a>

MediaTailor 将所有未知标签和自定义标签从输入清单传递到输出清单。

# HLS 清单示例
<a name="manifest-hls-example"></a>

以下部分提供了 HLS 源清单和个性化清单的示例。了解这些示例可以帮助您配置 MediaTailor工作流程并对其进行故障排除。

有关如何将查询参数应用于 HLS 清单和区段的信息，请参阅。[MediaTailor HLS 隐式会话初始化](manifest-query-parameters-hls-implicit-session-initialization.md)

## 了解 HLS 播放列表类型
<a name="hls-playlist-overview"></a>

HTTP 直播 (HLS) 使用两种主要的播放列表类型：

多变体播放列表  
多变体播放列表是列出内容所有可用格式副本的顶级索引文件。它包含对媒体播放列表的引用，但本身不包含任何媒体片段。该播放列表允许玩家根据网络条件、设备功能或用户偏好选择最合适的节目。  
这种播放列表类型在各种上下文中也有其他几个名称，包括主播放列表、主清单、主播放列表、主播放列表、索引文件或主 M3U8。  
在 MediaTailor 工作流程中，多变体播放列表是播放请求的入口点，也是广告个性化的起点。

媒体播放列表  
媒体播放列表包含特定内容再现（质量级别）的实际媒体片段信息。它包括播放单个格式副本所需的时间信息 URLs、片段和其他元数据。  
这种播放列表类型也称为媒体播放列表、子清单、区块列表、媒体 M3U8 或格式副本播放列表。  
在 MediaTailor 工作流程中，媒体播放列表会进行个性化设置，以按适当顺序包括内容细分和广告细分。

有关 HLS 播放列表类型的更多详细信息，请参阅[HLS 播放列表类型](hls-playlist-types.md)。

## HLS 起源清单示例
<a name="manifest-hls-ex-origin"></a>

以下示例显示了 HLS 从内容来源 AWS Elemental MediaTailor 收到的 HLS 多变体播放列表。

```
#EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-INDEPENDENT-SEGMENTS
    #EXT-X-STREAM-INF:BANDWIDTH=2665726,AVERAGE-BANDWIDTH=2526299,RESOLUTION=960x540,FRAME-RATE=29.970,CODECS="avc1.640029,mp4a.40.2",SUBTITLES="subtitles"
    index_1.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=3956044,AVERAGE-BANDWIDTH=3736264,RESOLUTION=1280x720,FRAME-RATE=29.970,CODECS="avc1.640029,mp4a.40.2",SUBTITLES="subtitles"
    index_2.m3u8
    #EXT-X-STREAM-INF:BANDWIDTH=995315,AVERAGE-BANDWIDTH=951107,RESOLUTION=640x360,FRAME-RATE=29.970,CODECS="avc1.4D401E,mp4a.40.2",SUBTITLES="subtitles"
    index_3.m3u8
    #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitles",NAME="caption_1",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="eng",URI="index_4_0.m3u8"
```

在这个多变体播放列表示例中：
+ 这些`#EXT-X-STREAM-INF`标签定义了具有不同分辨率和比特率的不同格式副本
+ 每个格式副本都引用一个媒体播放列表（例如`index_1.m3u8`）
+ 该`#EXT-X-MEDIA`标签定义了字幕曲目

以下示例显示了 HLS 从内容来源 AWS Elemental MediaTailor 收到的 HLS 媒体播放列表。本示例使用 `EXT-X-CUE-OUT` 和 `EXT-X-CUE-IN` 标签来描述广告效用机会。

```
#EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:7
    #EXT-X-MEDIA-SEQUENCE:8779957
    #EXTINF:6.006,
    index_1_8779957.ts?m=1566416212
    #EXTINF:6.006,
    index_1_8779958.ts?m=1566416212
    #EXTINF:5.372,
    index_1_8779959.ts?m=1566416212
    #EXT-OATCLS-SCTE35:/DAlAAAAAsvhAP/wFAXwAAAGf+/+AdLfiP4AG3dAAAEBAQAAXytxmQ==
    #EXT-X-CUE-OUT:20.020
    #EXTINF:0.634,
    index_1_8779960.ts?m=1566416212
    #EXT-X-CUE-OUT-CONT:ElapsedTime=0.634,Duration=21,SCTE35=/DAlAAAAAsvhAP/wFAXwAAAGf+/+AdLfiP4AG3dAAAEBAQAAXytxmQ==
    #EXTINF:6.006,
    index_1_8779961.ts?m=1566416212
    #EXT-X-CUE-OUT-CONT:ElapsedTime=6.640,Duration=21,SCTE35=/DAlAAAAAsvhAP/wFAXwAAAGf+/+AdLfiP4AG3dAAAEBAQAAXytxmQ==
    #EXTINF:6.006,
    index_1_8779962.ts?m=1566416212
    #EXT-X-CUE-OUT-CONT:ElapsedTime=12.646,Duration=21,SCTE35=/DAlAAAAAsvhAP/wFAXwAAAGf+/+AdLfiP4AG3dAAAEBAQAAXytxmQ==
    #EXTINF:6.006,
    index_1_8779963.ts?m=1566416212
    #EXT-X-CUE-OUT-CONT:ElapsedTime=18.652,Duration=21,SCTE35=/DAlAAAAAsvhAP/wFAXwAAAGf+/+AdLfiP4AG3dAAAEBAQAAXytxmQ==
    #EXTINF:1.368,
    index_1_8779964.ts?m=1566416212
    #EXT-X-CUE-IN
    #EXTINF:4.638,
    index_1_8779965.ts?m=1566416212
    #EXTINF:6.006,
    index_1_8779966.ts?m=1566416212
    #EXTINF:6.006,
    index_1_8779967.ts?m=1566416212
    #EXTINF:6.006,
    index_1_8779968.ts?m=1566416212
```

在此媒体播放列表示例中：
+ `#EXTINF`标签指定每个片段的持续时间
+ 该`#EXT-X-CUE-OUT`标签标志着广告插播的开始
+ 这些`#EXT-X-CUE-OUT-CONT`标签提供有关正在进行的广告中断的信息
+ 该`#EXT-X-CUE-IN`标签标志着广告插播的结束

## HLS 个性化清单示例
<a name="manifest-hls-ex-personalized"></a>

以下示例显示了个性化的 HLS 多变体播放列表。 AWS Elemental MediaTailor 

```
#EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA:LANGUAGE="eng",AUTOSELECT=YES,FORCED=NO,TYPE=SUBTITLES,URI="../../../manifest/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/3.m3u8",GROUP-ID="subtitles",DEFAULT=YES,NAME="caption_1"
    #EXT-X-INDEPENDENT-SEGMENTS
    #EXT-X-STREAM-INF:CODECS="avc1.640029,mp4a.40.2",AVERAGE-BANDWIDTH=2526299,RESOLUTION=960x540,SUBTITLES="subtitles",FRAME-RATE=29.97,BANDWIDTH=2665726
    ../../../manifest/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/0.m3u8
    #EXT-X-STREAM-INF:CODECS="avc1.640029,mp4a.40.2",AVERAGE-BANDWIDTH=3736264,RESOLUTION=1280x720,SUBTITLES="subtitles",FRAME-RATE=29.97,BANDWIDTH=3956044
    ../../../manifest/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/1.m3u8
    #EXT-X-STREAM-INF:CODECS="avc1.4D401E,mp4a.40.2",AVERAGE-BANDWIDTH=951107,RESOLUTION=640x360,SUBTITLES="subtitles",FRAME-RATE=29.97,BANDWIDTH=995315
    ../../../manifest/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/2.m3u8
```

请注意如何 MediaTailor 修改媒体播放列表 URLs 以包含特定会话的信息，从而实现个性化广告插入。

以下示例显示了 AWS Elemental MediaTailor 个性化的媒体播放列表。

```
#EXTM3U
    #EXT-X-VERSION:6
    #EXT-X-TARGETDURATION:7
    #EXT-X-MEDIA-SEQUENCE:8779957
    #EXT-X-DISCONTINUITY-SEQUENCE:0
    #EXTINF:6.006,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779957.ts?m=1566416212
    #EXTINF:6.006,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779958.ts?m=1566416212
    #EXTINF:5.372,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779959.ts?m=1566416212
    #EXT-X-DISCONTINUITY
    #EXTINF:3.066667,
    ../../../../segment/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/0/8779960
    #EXTINF:3.0,
    ../../../../segment/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/0/8779961
    #EXTINF:3.0,
    ../../../../segment/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/0/8779962
    #EXTINF:3.0,
    ../../../../segment/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/0/8779963
    #EXTINF:2.966667,
    ../../../../segment/43f3e412052f2808dd84ea1da90e92e914edddee/external-canary-hls/ee1696a8-4f7f-4c4c-99de-9821131847e8/0/8779964
    #EXT-X-DISCONTINUITY
    #EXTINF:6.006,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779963.ts?m=1566416212
    #EXTINF:1.368,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779964.ts?m=1566416212
    #EXTINF:4.638,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779965.ts?m=1566416212
    #EXTINF:6.006,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779966.ts?m=1566416212
    #EXTINF:6.006,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779967.ts?m=1566416212
    #EXTINF:6.006,
    https://777788889999.mediapackage.us-west-2.amazonaws.com/out/v1/e309ffd02ba8498d864dcaacff7a5ad9/index_1_8779968.ts?m=1566416212
```

在此个性化媒体播放列表示例中：
+ MediaTailor 在内容区段之间插入了广告区段
+ 这些`#EXT-X-DISCONTINUITY`标签标记了内容和广告之间的过渡
+ 内容分段由源服务器提供（MediaPackage 在本例中）
+ 广告区段是从 MediaTailor的广告细分存储空间中提供的

## 个性化清单的主要区别
<a name="manifest-hls-key-differences"></a>

 MediaTailor 对HLS清单进行个性化设置时，它会进行一些重要的更改：

多变体播放列表更改  
+ 变体播放列表 URLs 被重写为指向包含会话信息的 MediaTailor-man URLs aged
+ 为了获得最佳播放效果，可以重新组织标签的顺序

变体播放列表更改  
+ 广告标记 (`EXT-X-CUE-OUT`,`EXT-X-CUE-IN`) 将替换为实际的广告细分
+ 在边界处 content/ad 添加不连续标记 (`EXT-X-DISCONTINUITY`)
+ 内容段 URLs 被重写为指向源或 CDN
+ 广告区段 URLs 已添加到 point to MediaTailor 的广告区段存储空间

了解这些更改可以帮助您解决 MediaTailor 工作流程中的问题，并确保正确配置 CDN 和播放器。

## 相关主题
<a name="manifest-hls-related-topics"></a>

有关 HLS 清单和的更多信息 MediaTailor，请参阅以下主题：
+ [HLS 播放列表类型](hls-playlist-types.md)-HLS 播放列表类型的详细说明
+ [使用 CDN 优化 MediaTailor 广告个性化和内容交付](integrating-cdn.md)-有关将 CDN 与以下内容一起使用的信息 MediaTailor
+ [MediaTailor 广告插入的工作原理](what-is-flow.md)- MediaTailor 广告插入工作原理概述

# 集成 MPEG-DASH 信号源
<a name="manifest-dash"></a>

AWS Elemental MediaTailor 支持`.mpd`符合 DASH 动态配置文件指南的直播和视频点播 (VOD) 清单。 MediaTailor 接受符合 Dash 的多周期和单周期清单输入，并交付符合 Dash 的多周期清单输出。

输入清单必须具有以下内容：
+ 带有适用于 `splice insert ` 或 ` time signal` 的拼接信息设置的 SCTE-35 事件流。可以使用清除 XML 或 base64 编码的二进制提供设置。
+ 带有 `segment timelines` 的 `Segment templates`。

对于已发布的清单， MediaTailor 要求源服务器的更新保持以下内容不变：
+ 在 `start` 属性中指定的时段开始时间。
+ 时段表示形式的分段模板中的 `presentationTimeOffset` 值。

作为最佳实践，为广告提供与内容流时段相同的`Representation`设置`AdaptationSet`和设置。 AWS Elemental MediaTailor 使用这些设置对广告进行转码以匹配内容流，从而在两者之间顺畅切换。

以下各节提供了有关如何 MediaTailor 处理 DASH 清单中的广告的更多信息。

**Topics**
+ [DASH 广告标记](dash-ad-markers.md)
+ [DASH 广告可用时长](dash-ad-avail-duration.md)
+ [DASH 舱单分段编号](dash-manifest-segment-numbering.md)
+ [DASH MPD 示例](manifest-dash-example.md)
+ [DASH 定位功能](dash-location-feature.md)

# DASH 广告标记
<a name="dash-ad-markers"></a>

MediaTailor 

AWS Elemental MediaTailor 使用 SCTE-35 提示标记通过以下逻辑识别 DASH 清单中的可用广告：
+ **多时段 DASH**：`Event`在每个时段中 MediaTailor 插入第一个`Period`包含`SpliceInsert`或`TimeSignal`提示标记的广告。 MediaTailor忽略中的其他`Event`标记。`Period`
+ **单周期 DASH**：`Event`在每个广告中 MediaTailor 插入`Period`包含其中一个`SpliceInsert`或一个`TimeSignal`提示标记的广告。

默认情况下，将 DASH 清单作为多周期清单进行 AWS Elemental MediaTailor 管理。您可以更改配置以处理源服务器中的单周期 DASH 清单。有关信息，请参阅[创建 MediaTailor 播放配置](configurations-create.md)。

以下各节提供了有关DASH广告标记处理的更多详细信息，并提供了来自来源的装饰清单。

## DASH 起源清单 XML 要求
<a name="dash-ad-markers-examples"></a>

来自来源的 DASH 清单中的广告标记必须格式正确， MediaTailor 才能识别广告插播时间。以下主题以清晰的 XML 形式描述了这些格式要求。

### `SpliceInsert`用清晰的 XML
<a name="dash-splice-xml"></a>

`SpliceInsert`透明 XML 中的广告标记必须包含以下内容：
+ `EventStream`必须具有以下属性：`schemeIdUri=urn:scte:scte35:2013:xml`
+ `Event`必须持有 `scte35:SpliceInfoSection` 
+ `scte35:SpliceInfoSection`必须持有 `scte35:SpliceInsert` 
+ `scte35:SpliceInsert`必须具有以下属性：`outOfNetworkIndicator="true"`

**Example `SpliceInsert`在 XML 中**  
在以下示例中，所需的 SCTE 标记以粗体显示。  

```
<Period start="PT444806.040S" id="123586" duration="PT15.000S">
  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
    <Event duration="1350000">
      <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="180832" tier="4095">
        <scte35:SpliceInsert spliceEventId="4026531855" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
            <scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
            <scte35:BreakDuration autoReturn="true" duration="1350000"/>
        </scte35:SpliceInsert>
      </scte35:SpliceInfoSection>
    </Event>
  .
  .
  .
</Period>
```

### `TimeSignal`用清晰的 XML
<a name="dash-signal-xml"></a>

`TimeSignal`透明 XML 中的广告标记必须包含以下内容：
+ `EventStream`必须具有以下属性：`schemeIdUri=urn:scte:scte35:2013:xml`
+ `Event`必须持有 `scte35:SpliceInfoSection`
+ `scte35:SpliceInfoSection`必须持有 `scte35:TimeSignal`
+ `scte35:SpliceInfoSection`还必须持有 `scte35:SegmentationDescriptor`
+ `scte35:SegmentationDescriptor`必须具有以下属性，其中值是有效的[提示数字](#dash-signal-xml-values)：`segmentationTypeId="xx"`
+ `scte35:SegmentationDescriptor`必须持有 `scte35:SegmentationUpid` 
<a name="dash-signal-xml-values"></a>
**提示数字**  
以下是支持的提示数字。`segmentationTypeId`


| 分段消息 | segmentationTypeId 值 | 十六进制值 | 
| --- | --- | --- | 
| 分销商广告已结束 | 51 | 0x51 | 
| 分销商广告开始 | 50 | 0x32 | 
| 分销商安置机会结束 | 55 | 0x37 | 
| 分销商安置机会开始 | 54 | 0x36 | 
| 结束时刻 | 35 | 0x23 | 
| 提供商广告已结束 | 49 | 0x31 | 
| 提供商广告开始 | 48 | 0x30 | 
| 提供商叠加放置机会结束 | 57 | 0x39 | 
| 提供商叠加放置机会开始 | 56 | 0x38 | 
| 提供商安置机会结束 | 53 | 0x35 | 
| 提供商安置机会开始 | 52 | 0x34 | 
| 开始休息 | 34 | 0x22 | 

**Example `TimeSignal`在 XML 中**  
在以下示例中，所需的 SCTE 标记以粗体显示。  

```
<Period start="PT346530.250S" id="178443" duration="PT61.561S">
  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
    <Event duration="5310000">
      <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="183003" tier="4095">
        <scte35:TimeSignal>
          <scte35:SpliceTime ptsTime="3442857000"/>
         </scte35:TimeSignal>
        <scte35:SegmentationDescriptor segmentationEventId="1414668" segmentationEventCancelIndicator="false" segmentationDuration="8100000" segmentationTypeId="52" segmentNum="0" segmentsExpected="0">
            <scte35:DeliveryRestrictions webDeliveryAllowedFlag="false" noRegionalBlackoutFlag="false" archiveAllowedFlag="false" deviceRestrictions="3"/>
            <scte35:SegmentationUpid segmentationUpidType="12" segmentationUpidLength="2">0100</scte35:SegmentationUpid>
          </scte35:SegmentationDescriptor>
        </scte35:SpliceInfoSection>
    </Event>
  .
  .
  .
</Period>
```

## DASH 起源清单 base64 编码的二进制文件要求
<a name="dash-base64"></a>

来自来源的 DASH 清单中的广告标记必须格式正确， MediaTailor 才能识别广告插播时间。以下主题介绍了 base64 编码的二进制文件中的这些格式要求。

base64 编码的清单中的`SpliceInsert`广告标记`TimeSignal`和广告标记都必须包含以下内容：
+ `EventStream`必须具有以下属性：`urn:scte:scte35:2014:xml+bin`
+ `Event`必须持有 `scte35:Signal`
+ `scte35:Signal`必须包含一个 base64 编码的二进制文件。`scte35:Binary`

解码后的二进制文件提供的信息必须`splice_info_section`与清晰 XML 广告标记所需的信息相同。
+ 命令类型必须是`splice_insert()`或 `time_signal()`
+ 其他设置必须符合[`TimeSignal`用清晰的 XML](#dash-signal-xml)和中描述的设置[`SpliceInsert`用清晰的 XML](#dash-splice-xml)。

 解码后的二进制必须提供 `splice_info_section`，且其信息集必须与清除 XML 在 `scte35:SpliceInfoSection` 元素中提供的相同。命令类型必须为 `splice_insert()` 或 `time_signal()`，且其他设置必须符合先前针对清除 XML 交付的描述。

以下示例显示了此选项，所需标记以粗体显示。

```
<Period start="PT444806.040S" id="123586" duration="PT15.000S">
    <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="1">
      <Event presentationTime="1541436240" duration="24" id="29">
        <scte35:Signal xmlns="http://www.scte.org/schemas/35/2016">
          <scte35:Binary>/DAhAAAAAAAAAP/wEAUAAAHAf+9/fgAg9YDAAAAAAAA25aoh</scte35:Binary>
        </scte35:Signal>
      </Event>
      <Event presentationTime="1541436360" duration="24" id="30">
        <scte35:Signal xmlns="http://www.scte.org/schemas/35/2016">
          <scte35:Binary>QW5vdGhlciB0ZXN0IHN0cmluZyBmb3IgZW5jb2RpbmcgdG8gQmFzZTY0IGVuY29kZWQgYmluYXJ5Lg==</scte35:Binary>
        </scte35:Signal>
      </Event>
  .
  .
  .
</Period>
```

以下是先前示例中列出的第一个事件的解码二进制。`splice_command_type` 的设置为 5，这表示 `splice_insert`。

```
{
        "table_id": 252,
        "section_syntax_indicator": false,
        "private_indicator": false,
        "section_length": 33,
        "protocol_version": 0,
        "encrypted_packet": false,
        "encryption_algorithm": 0,
        "pts_adjustment": 0,
        "cw_index": 0,
        "tier": "0xFFF",
        "splice_command_length": 16,
        "splice_command_type": 5,
        "splice_command": {
          "splice_event_id": 448,
          "splice_event_cancel_indicator": false,
          "out_of_network_indicator": true,
          "program_splice_flag": true,
          "duration_flag": true,
          "splice_immediate_flag": false,
          "utc_splice_time": {
            "time_specified_flag": false,
            "pts_time": null
          },
          "component_count": 0,
          "components": null,
          "break_duration": {
            "auto_return": false,
            "duration": {
              "pts_time": 2160000,
              "wall_clock_seconds": 24.0,
              "wall_clock_time": "00:00:24:00000"
            }
          },
          "unique_program_id": 49152,
          "avail_num": 0,
          "avails_expected": 0
        },
        "splice_descriptor_loop_length": 0,
        "splice_descriptors": null,
        "Scte35Exception": {
          "parse_status": "SCTE-35 cue parsing completed with 0 errors.",
          "error_messages": [],
          "table_id": 252,
          "splice_command_type": 5
        }
      }
```

# DASH 广告可用时长
<a name="dash-ad-avail-duration"></a>

在播放过程中，当 AWS Elemental MediaTailor 遇到广告可用性时，它会将部分或全部广告替换为广告。 MediaTailor 在广告开始时开始替换广告，包括如下广告：
+ 如果广告可用性指定了持续时间，则在不覆盖随后的内容的情况下，在不覆盖随后的内容的情况下， MediaTailor 包含尽可能多的广告。
+ 如果未提供持续时间，则在广告有效期结束之前 MediaTailor 包含广告。对于多周期清单来说，这就是周期的结束。对于单周期清单，活动到此结束。 MediaTailor 不会在广告结束后播放广告，当广告到达结尾时，会截断当前广告，而不是覆盖随后的内容。

**如何 AWS Elemental MediaTailor 查看广告投放时长**  
AWS Elemental MediaTailor 按以下顺序搜索持续时间设置：

1. `Event` `duration`

1. 对于拼接插入，搜索 `scte35:BreakDuration` `duration`

1. 对于时间信号，搜索 `scte35:SegmentationDescriptor` `segmentationDuration`

如果找 AWS Elemental MediaTailor 不到这些设置中的任何一个，则它会在没有持续时间的情况下管理广告收录。

以下示例显示了具有 `duration` 的 `Event`。

```
  <Period start="PT444806.040S" id="123586" duration="PT15.000S">
          <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
            <Event duration="1350000">
              <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="180832" tier="4095">
                <scte35:SpliceInsert spliceEventId="4026531855" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
                  <scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
                  <scte35:BreakDuration autoReturn="true" duration="1350000"/>
                </scte35:SpliceInsert>
              </scte35:SpliceInfoSection>
            </Event>
              ...
```

以下示例显示未指定持续时间的广告效用。`Event` 没有 `duration`，`scte35:SpliceInsert` 元素不包含 `scte35:BreakDuration` 子元素。

```
  <Period start="PT444836.720S" id="123597" duration="PT12.280S">
          <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
            <Event>
              <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="180832" tier="4095">
                <scte35:SpliceInsert spliceEventId="4026531856" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
                  <scte35:Program><scte35:SpliceTime ptsTime="5675385600"/></scte35:Program>
                </scte35:SpliceInsert>
              </scte35:SpliceInfoSection>
            </Event>
            ...
```

# DASH 舱单分段编号
<a name="dash-manifest-segment-numbering"></a>

MediaTailor 支持使用`<SegmentTimeline>`和`media`属性定义`<SegmentTemplate>`的媒体片段。您可以使用 `$Number$` 标识符或 `$Time$` 标识符在 `media` 属性中指定媒体段列表。

 以下示例显示了具有 `media` 属性设置的 `SegmentTemplate`，该设置使用 `$Number$` 标识符。

```
        <SegmentTemplate initialization="index_subtitles_4_0_init.mp4?m=1532451703" media="index_subtitles_4_0_$Number$.mp4?m=1532451703" presentationTimeOffset="1062336677920" startNumber="2349899" timescale="90000">
                <SegmentTimeline>
                  <S d="540540" r="2" t="1062338840080"/>
                  <S d="69069" t="1062340461700"/>
                </SegmentTimeline>
              </SegmentTemplate>
```

 以下示例显示了具有 `media` 属性设置的 `SegmentTemplate`，该设置使用 `$Time$` 标识符。

```
        <SegmentTemplate initialization="asset_720p_8000K_9_init.mp4" media="asset_720p_8000K_9_$Time$.mp4" startNumber="1" timescale="90000">
                <SegmentTimeline>
                  <S d="180000" r="2" t="0"/>
                  <S d="147000" t="540000"/>
                </SegmentTimeline>
              </SegmentTemplate>
```

# DASH MPD 示例
<a name="manifest-dash-example"></a>

以下各节提供了 DASH 起源 MPDs 和个性化的示例 MPDs。了解这些示例可以帮助您配置 MediaTailor工作流程并对其进行故障排除。

有关如何将查询参数应用于 DASH 清单和区段的信息，请参阅[MediaTailor DASH 隐式会话初始](manifest-query-parameters-dash-implicit-session-initialization.md)。

## 了解 DASH MPD 结构
<a name="dash-mpd-overview"></a>

基于 HTTP 的动态自适应流式传输 (DASH) 使用媒体演示描述 (MPD) 清单来提供流媒体内容。MPD 是一个 XML 文档，描述了媒体内容的结构和可用性。

MPD（媒体演示说明）  
MPD 是 DASH 流媒体中的主要清单文件，用于描述媒体内容的结构和可用性。它包含有关构成流媒体内容的时段、改编集、表示形式和片段的信息。  
这种清单类型在各种上下文中也有其他几个名称，包括 DASH 清单、DASH MPD、主清单（与 HLS 比较时）或演示文稿清单。  
在 MediaTailor 工作流程中，MPD 是播放请求的入口点，也是广告个性化的起点。

周期  
周期是 DASH 演示文稿中的一个时间部分。每个 Period 都包含一个或多个改编集，代表媒体时间跨度。在广告插入工作流程中，通常使用单独的时间段来划分内容和广告。  
在 MediaTailor 工作流程中，使用时间段将主要内容与广告内容分开，每个广告通常由自己的时间段表示。

AdaptationSet  
对一个或多个媒体内容组件的一 AdaptationSet 组可互换编码版本进行分组。例如，一个 AdaptationSet 可能包含多个视频质量级别，而另一个可能包含多个音频语言选项。  
在 MediaTailor 工作流程中， AdaptationSets 在广告插入期间保留，以保持内容和广告之间媒体类型的一致性。

表示  
表示形式是其中媒体内容的特定编码版本。 AdaptationSet每种表示形式通常在比特率、分辨率或其他编码参数上有所不同，允许客户端根据网络条件和设备功能选择最合适的版本。  
在 MediaTailor 工作流程中，广告周期中的表现尽可能与内容时段中的表现形式紧密匹配，以确保流畅的观看体验。

有关 DASH 清单类型的更多详细信息，请参阅[DASH 清单类型](dash-manifest-types.md)。

有关 DASH 清单结构和配置的信息 AWS Elemental MediaPackage，请参阅 DASH 概述中的 MediaPackage 用户指南部分。

## 直播 DASH MPD 示例
<a name="dash-manifest-live-examples"></a>

本节提供实时 DASH 的示例 MPDs。每个示例都列出了从源站服务器收到的 MPD，然后使用广告对 MPD MediaTailor 进行了个性化设置。

### DASH MPD 拼接插入示例
<a name="dash-manifest-splice-insert-example"></a>

**接头插入的 DASH 原点 MPD 示例**  
以下来自 MPD 的示例显示了 DASH 从内容来源收到的清单中的广告可用性。此示例使用`SpliceInsert`标记来表示广告可用。

```
<Period start="PT173402.036S" id="46041">
  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
    <Event duration="9450000">
      <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="183265" tier="4095">
        <scte35:SpliceInsert spliceEventId="99" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
          <scte35:Program><scte35:SpliceTime ptsTime="7835775000"/></scte35:Program>
          <scte35:BreakDuration autoReturn="true" duration="9450000"/>
        </scte35:SpliceInsert>
        <scte35:SegmentationDescriptor segmentationEventId="99" segmentationEventCancelIndicator="false" segmentationDuration="9450000">
          <scte35:DeliveryRestrictions webDeliveryAllowedFlag="true" noRegionalBlackoutFlag="true" archiveAllowedFlag="true" deviceRestrictions="3"/>
          <scte35:SegmentationUpid segmentationUpidType="8" segmentationUpidLength="0"/>
          <scte35:SegmentationTypeID segmentationType="52"/>
          <scte35:SegmentNum segmentNum="1"/>
          <scte35:SegmentsExpected segmentsExpected="1"/>
        </scte35:SegmentationDescriptor>
      </scte35:SpliceInfoSection>
    </Event>
  </EventStream>
  <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
    <Representation id="1" width="960" height="540" frameRate="30000/1001" bandwidth="1000000" codecs="avc1.4D401F">
      <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1528475245" initialization="index_video_1_0_init.mp4?m=1528475245" startNumber="178444" presentationTimeOffset="10395907501">
        <SegmentTimeline>
          <S t="10395907501" d="60060" r="29"/>
          <S t="10397709301" d="45045"/>
        </SegmentTimeline>
      </SegmentTemplate>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" segmentAlignment="0" lang="eng">
    <Representation id="2" bandwidth="96964" audioSamplingRate="48000" codecs="mp4a.40.2">
      <SegmentTemplate timescale="48000" media="index_audio_2_0_$Number$.mp4?m=1528475245" initialization="index_audio_2_0_init.mp4?m=1528475245" startNumber="178444" presentationTimeOffset="16633452001">
        <SegmentTimeline>
          <S t="16633452289" d="96256" r="3"/>
          <S t="16633837313" d="95232"/>
          <S t="16633932545" d="96256" r="4"/>
          <S t="16634413825" d="95232"/>
          <S t="16634509057" d="96256" r="5"/>
          <S t="16635086593" d="95232"/>
          <S t="16635181825" d="96256" r="4"/>
          <S t="16635663105" d="95232"/>
          <S t="16635758337" d="96256" r="5"/>
          <S t="16636335873" d="71680"/>
        </SegmentTimeline>
      </SegmentTemplate>
    </Representation>
  </AdaptationSet>
</Period>
```

在这个 Origin MPD 示例中：
+ 该`<EventStream>`元素包含 SCTE-35 标记，用于指示广告可用
+ 该`<scte35:SpliceInsert>`元素提供有关广告可用性的详细信息
+ `<scte35:BreakDuration>`元素指定广告时段的持续时间
+ 这些`<AdaptationSet>`元素定义了可用的视频和音频流

**用于拼接插件的 DASH 个性化 MPD 示例**  
AWS Elemental MediaTailor 根据广告规格对广告进行个性化设置。个性化设置反映了从播放器和当前正在进行的广告活动接收的查看者数据。

以下示例显示了对广告进行 AWS Elemental MediaTailor 个性化设置后的可用性。

```
<Period id="178443_1" start="PT96H15M30.25S">
  <BaseURL>http://111122223333.cloudfront.net/nbc_fallback_2/</BaseURL>
  <AdaptationSet bitstreamSwitching="false" frameRate="30/1" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
    <SegmentTemplate startNumber="1" timescale="90000"/>
    <Representation bandwidth="10000000" codecs="avc1.640028" height="1080" id="1" width="1920">
      <SegmentTemplate initialization="nbc_fallback_ad_2_1080p_10init.mp4" media="nbc_fallback_ad_2_1080p_10_$Number%09d$.mp4" startNumber="1" timescale="90000">
        <SegmentTimeline>
          <S d="180000" r="13" t="0"/>
          <S d="176940" t="2520000"/>
        </SegmentTimeline>
      </SegmentTemplate>
    </Representation>
    <Representation bandwidth="4000000" codecs="avc1.64001f" height="720" id="2" width="1280">
      <SegmentTemplate initialization="nbc_fallback_ad_2_720p_9init.mp4" media="nbc_fallback_ad_2_720p_9_$Number%09d$.mp4" startNumber="1" timescale="90000">
        <SegmentTimeline>
          <S d="180000" r="13" t="0"/>
          <S d="176940" t="2520000"/>
        </SegmentTimeline>
      </SegmentTemplate>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" segmentAlignment="0" lang="eng">
    <Representation id="8" bandwidth="128000" audioSamplingRate="48000" codecs="mp4a.40.2">
      <SegmentTemplate initialization="nbc_fallback_ad_2_audio_2init.mp4" media="nbc_fallback_ad_2_audio_2_$Number%09d$.mp4" startNumber="1" timescale="90000">
        <SegmentTimeline>
          <S d="180000" r="13" t="0"/>
          <S d="176940" t="2520000"/>
        </SegmentTimeline>
      </SegmentTemplate>
    </Representation>
  </AdaptationSet>
</Period>
```

在这个个性化 MPD 示例中：
+ MediaTailor 为广告内容创建了新的时段
+ 该`<BaseURL>`元素指向广告内容的位置
+ 这些`<AdaptationSet>`元素保持与内容相似的结构
+ 这些`<Representation>`元素为广告内容提供了不同的质量等级

### DASH MPD 时间信号示例
<a name="dash-manifest-time-signal-example"></a>

**DASH 原点 MPD 时间信号示例**  
以下来自 MPD 的示例显示了 DASH 从内容来源收到的清单中的广告可用性。此示例使用`TimeSignal`标记来表示广告可用。

```
<Period start="PT173402.036S" id="46041">
  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
    <Event duration="9450000">
      <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="183265" tier="4095">
        <scte35:TimeSignal>
          <scte35:SpliceTime ptsTime="7835775000"/>
        </scte35:TimeSignal>
        <scte35:SegmentationDescriptor segmentationEventId="99" segmentationEventCancelIndicator="false" segmentationDuration="9450000">
          <scte35:DeliveryRestrictions webDeliveryAllowedFlag="true" noRegionalBlackoutFlag="true" archiveAllowedFlag="true" deviceRestrictions="3"/>
          <scte35:SegmentationUpid segmentationUpidType="8" segmentationUpidLength="0"/>
          <scte35:SegmentationTypeID segmentationType="52"/>
          <scte35:SegmentNum segmentNum="1"/>
          <scte35:SegmentsExpected segmentsExpected="1"/>
        </scte35:SegmentationDescriptor>
      </scte35:SpliceInfoSection>
    </Event>
  </EventStream>
  <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
    <Representation id="1" width="960" height="540" frameRate="30000/1001" bandwidth="1000000" codecs="avc1.4D401F">
      <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1528475245" initialization="index_video_1_0_init.mp4?m=1528475245" startNumber="178444" presentationTimeOffset="10395907501">
        <SegmentTimeline>
          <S t="10395907501" d="60060" r="29"/>
          <S t="10397709301" d="45045"/>
        </SegmentTimeline>
      </SegmentTemplate>
    </Representation>
  </AdaptationSet>
</Period>
```

在这个 Origin MPD 示例中：
+ 使用该`<scte35:TimeSignal>`元素代替 `<scte35:SpliceInsert>`
+ `<scte35:SegmentationDescriptor>`提供了有关广告可用性的更多信息

**DASH 个性化 MPD 时间信号示例**  
AWS Elemental MediaTailor 根据广告规格对广告进行个性化设置。个性化设置反映了从播放器和当前正在进行的广告活动接收的查看者数据。

以下示例显示了对广告进行 AWS Elemental MediaTailor 个性化设置后的可用性。

```
<Period id="178443_1" start="PT96H15M30.25S">
  <BaseURL>http://111122223333.cloudfront.net/nbc_fallback_2/</BaseURL>
  <AdaptationSet bitstreamSwitching="false" frameRate="30/1" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
    <SegmentTemplate startNumber="1" timescale="90000"/>
    <Representation bandwidth="10000000" codecs="avc1.640028" height="1080" id="1" width="1920">
      <SegmentTemplate initialization="nbc_fallback_ad_2_1080p_10init.mp4" media="nbc_fallback_ad_2_1080p_10_$Number%09d$.mp4" startNumber="1" timescale="90000">
        <SegmentTimeline>
          <S d="180000" r="13" t="0"/>
          <S d="176940" t="2520000"/>
        </SegmentTimeline>
      </SegmentTemplate>
    </Representation>
  </AdaptationSet>
</Period>
```

时间信号的个性化 MPD 与拼接插入的 MPD 类似，它为广告内容 MediaTailor 创建了一个新的周期。

## VOD DASH MPD 示例
<a name="dash-manifest-vod-examples"></a>

本节提供视频点播 (VOD) DASH MPDs 的示例。每个示例都列出了从源站服务器收到的 MPD，然后使用广告对 MPD MediaTailor 进行了个性化设置。

VOD DASH MPDs 遵循与直播相同的结构 MPDs，但它们通常在 MPD 元素中有一个`type="static"`属性，并且可能包含不同内容片段的多个时段。

有关 VOD DASH 的示例 MPDs，请参阅中的 MediaTailor 文档。[DASH 广告标记](dash-ad-markers.md)

## 个性化的主要区别 MPDs
<a name="dash-manifest-key-differences"></a>

对 DASH MediaTailor 进行个性化设置时 MPDs，它会进行一些重要的更改：

经期处理  
+ 为广告内容创建了新的时段
+ 调整时段开始时间以保持时间表的连续性
+ EventStream 带有 SCTE-35 标记的元素会被处理和移除

AdaptationSet 和陈述处理  
+ AdaptationSets 在广告中，创建时段是为了匹配内容而创建的 AdaptationSets
+ 为广告内容的不同质量水平创建了陈述
+ SegmentTemplate 元素已更新为指向广告内容

了解这些更改可以帮助您解决 MediaTailor 工作流程中的问题，并确保正确配置 CDN 和播放器。

## 相关主题
<a name="dash-manifest-related-topics"></a>

有关 DASH MPDs 和的更多信息 MediaTailor，请参阅以下主题：
+ [DASH 清单类型](dash-manifest-types.md)-详细说明 DASH 清单类型
+ [使用 CDN 优化 MediaTailor 广告个性化和内容交付](integrating-cdn.md)-有关将 CDN 与以下内容一起使用的信息 MediaTailor
+ [MediaTailor 广告插入的工作原理](what-is-flow.md)- MediaTailor 广告插入工作原理概述
+ 有关 DASH 清单结构和 MediaPackage 配置的全面信息，请参阅 DASH 概述中的 MediaPackage 用户指南部分。

# DASH 定位功能
<a name="dash-location-feature"></a>

本节提供了有关 DASH 的位置功能（在 AWS Elemental MediaTailor中默认启用）的信息。如果您创建了用于访问 MediaTailor 清单的内容分发网络 (CDN) 路由规则，请阅读本节。如果您对不支持粘性 HTTP 重定向的播放器使用服务器端报告，也请参阅本节。

**什么是位置功能？**  
位置功能允许不支持粘性 HTTP 重定向的播放器在其清单更新请求中提供粘性行为。

AWS Elemental MediaTailor 使用无会话初始化，它需要玩家进行粘性 HTTP 重定向行为。通过服务器端报告，当玩家请求更新清单时 MediaTailor，该服务会发出 302 临时重定向，将玩家定向到个性化清单的端点。 MediaTailor 在响应中包含会话 ID 作为查询参数。其目的是使播放器遵循整个会话的 URL，但不支持粘性 HTTP 重定向的播放器会删除重定向并返回原始 URL。当玩家返回到原始 URL 时，每个新请求都会 MediaTailor 创建一个新的会话，而不是停留在原始会话中。这可能会导致清单损坏。

DASH 规范在定位功能中提供了解决此问题的方法，该功能在 AWS Elemental MediaTailor 配置中默认处于启用状态。启用此功能后， MediaTailor 将绝对 URL 放在清单`<Location>`标签中。不支持粘性 HTTP 重定向的播放器可以使用 `<Location>` 中提供的 URL 来请求对清单的更新。

**我是否需要在我的配置中禁用位置功能？**  
位置功能将覆盖您设置的用于访问 AWS Elemental MediaTailor 清单的所有 CDN 路由规则，因此，您可能需要禁用该功能。位置功能不会影响内容或广告分段的 CDN 缓存。

在以下列表中查找您的情况，以确定您是否需要为您的配置禁用位置功能以及如何处理该功能：
+ 如果您尚未设置用于访问 AWS Elemental MediaTailor 清单的 CDN 路由规则，请将位置设置保持启用状态。
+ 否则，请使用以下规则：
  + 如果您未使用服务器端报告或您所有的播放器都支持粘性 HTTP 重定向，请禁用位置功能。有关如何在控制台上执行此操作的信息，请参阅[创建 MediaTailor 播放配置](configurations-create.md)。
  + 否则，请联系 [AWS Suppor](https://aws.amazon.com/premiumsupport/) t。

**我是否需要使用位置功能？**  
对于不支持粘性 HTTP 重定向的玩家，你需要使用定位功能。对您所有的清单更新请求使用 `<Location>` 标签中提供的 URL。

**示例**  
示例 URLs 和示例`<Location>`标签。
+   
**Example 示例：初始请求 URL**  

  ```
  https://777788889999.mediatailor.us-east-1.amazonaws.com/v1/dash/5ca4c1892b1f213a1247fad47b3e34c454a7d490/testLocationTag/index.mpd
  ```
+   
**Example 示例：重定向的 302 响应**  

  ```
  /v1/dash/5ca4c1892b1f213a1247fad47b3e34c454a7d490/testLocationTag/index.mpd?aws.sessionId=0e5d9b45-ae97-49eb-901b-893d043e0aa6
  ```
+   
**Example 示例：清单中的位置标签**  

  ```
  <Location>https://777788889999.mediatailor.us-east-1.amazonaws.com/v1/dash/5ca4c1892b1f213a1247fad47b3e34c454a7d490/testLocationTag/index.mpd?aws.sessionId=0e5d9b45-ae97-49eb-901b-893d043e0aa6</Location>
  ```

# 使用 Sig AWS Elemental MediaTailor V4 保护源站互动
<a name="origin-sigv4"></a>

签名版本 4 (Sigv4) 是一种签名协议，用于通过 HTTPS 对发往受支持来源的 MediaTailor 请求进行身份验证。 MediaTailor 仅支持 HTTPS 通信，不允许 HTTP 连接。使用 Sigv4 签名，在向 MediaTailor 频道组装、Amazon S3 和 AWS Elemental MediaPackage 版本 2 发出的HTTPS源请求中 MediaTailor 包含签名的授权标头。

你可以在源站使用 SigV4 来确保清单请求只有来自 MediaTailor 并包含签名的授权标头时才会得到满足。这样，未经授权的 MediaTailor播放配置就会被阻止访问您的原始内容。如果签名的授权标头有效，则您的来源满足请求。如果无效，则请求失败。

以下各节描述了对支持的源使用 MediaTailor Sigv4 签名的要求。

## MediaTailor 频道组装要求
<a name="origin-sigv4-ca"></a>

如果您使用 SigV4 来保护您的 MediaTailor 频道集合来源，则必须满足以下要求 MediaTailor 才能访问清单：
+ 您的 MediaTailor 配置中的来源基本 URL 必须是采用以下格式的频道集合频道：`channel-assembly.mediatailor.region.amazonaws.com`
+ 您的源必须配置为使用 HTTPS。 MediaTailor 仅支持 HTTPS 通信，不允许 HTTP 连接。如果源站未启用 HTTPS，则 MediaTailor 不会对请求进行签名。
+ 您的频道必须有包含以下内容的源站访问政策：
  + 访问您的频道 MediaTailor 的委托人访问权限。授予访问 **mediata** ilor.amazonaws.com 的访问权限。
  + IAM 权限 **mediatailor：**读GetManifest 取配置引用的所有多变体播放列表。 MediaTailor 

  有关在频道上设置政策的信息，请参阅[使用 MediaTailor 控制台创建频道](channel-assembly-creating-channels.md)。

**Example Channel Assembly 的源站访问策略，范围限于 MediaTailor 配置账户**  

```
{
    "Effect": "Allow",
    "Principal": {"Service": "mediatailor.amazonaws.com"},
    "Action": "mediatailor:GetManifest",
    "Resource": "arn:aws:mediatailor:us-west-2:777788889999:channel/ca-origin-channel",
    "Condition": {
        "StringEquals": {"AWS:SourceAccount": "777788889999"}
    }
}
```

**Example Channel Assembly 的源站访问策略，范围限于 MediaTailor 播放配置**  

```
{
    "Effect": "Allow",
    "Principal": {"Service": "mediatailor.amazonaws.com"},
    "Action": "mediatailor:GetManifest",
    "Resource": "arn:aws:mediatailor:us-west-2:777788889999:channel/ca-origin-channel",
    "Condition": {
        "StringEquals": {"AWS:SourceArn": "arn:aws:mediatailor:us-west-2:777788889999:playbackConfiguration/test"}
    }
}
```

## 亚马逊 S3 要求
<a name="origin-sigv4-s3"></a>

如果您使用 Sigv4 来保护您的 Amazon S3 来源，则必须满足以下要求 MediaTailor 才能访问清单：
+ 您的 MediaTailor 配置中的源基本 URL 必须是采用以下格式的 S3 存储桶：`s3.region.amazonaws.com`
+ 您的源必须配置为使用 HTTPS。 MediaTailor 仅支持 HTTPS 通信，不允许 HTTP 连接。如果源站未启用 HTTPS，则 MediaTailor 不会对请求进行签名。
+ 您的频道必须有包含以下内容的源站访问政策：
  + 访问您的存储桶 MediaTailor 的委托人访问权限。授予访问 **mediata** ilor.amazonaws.com 的访问权限。

    有关在 IAM 中配置访问权限的信息，请参阅 A *WS Identity and A [c](https://docs.aws.amazon.com/) cess Management 用户指南中的访问管理*。
  + IAM 权限 **s3：GetObject **读取 MediaTailor 配置引用的所有顶级清单。

 *有关亚马逊 S3 版 Sigv4 的一般信息，请参阅亚马逊 S3 API 参考中的[身份验证请求（AWS 签名版本 4）](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)主题。*

**Example Amazon S3 的源站访问策略，范围限于账户 MediaTailor**  

```
{
    "Effect": "Allow",
    "Principal": {"Service": "mediatailor.amazonaws.com"},
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::mybucket/*",
    "Condition": {
        "StringEquals": {"AWS:SourceAccount": "111122223333"}
    }
}
```

**Example Amazon S3 的源站访问策略，范围限于 MediaTailor 播放配置**  

```
{
    "Effect": "Allow",
    "Principal": {"Service": "mediatailor.amazonaws.com"},
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::mybucket/*",
    "Condition": {
        "StringEquals": {"AWS:SourceArn": "arn:aws:mediatailor:us-west-2:111122223333:playbackConfiguration/test”}
    }
}
```

## MediaPackage 要求
<a name="origin-sigv4-mp"></a>

如果您使用 SigV4 来保护您的 MediaPackage v2 来源，则必须满足以下要求 MediaTailor 才能访问清单：
+ 您的 MediaTailor 配置中的源基本 URL 必须是采用以下格式的 MediaPackage v2 终端节点：`mediapackagev2.region.amazonaws.com`
+ 您的源必须配置为使用 HTTPS。 MediaTailor 仅支持 HTTPS 通信，不允许 HTTP 连接。如果源站未启用 HTTPS，则 MediaTailor 不会对请求进行签名。
+ 您的频道必须有包含以下内容的源站访问政策：
  + 访问您的终端节点 MediaTailor 的委托人访问权限。授予访问 **mediata** ilor.amazonaws.com 的访问权限。
  + IAM 权限 **mediapackagev2：**读取配置GetObject 引用的所有多变体播放列表。 MediaTailor 

 *有关 v2 版 Sigv4 的一般信息，请参阅 MediaPackage v2 API 参考中的[身份验证请求（AWS 签名版本 4）](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html)主题。MediaPackage *

**Example MediaPackage v2 的源站访问策略，范围限于账户 MediaTailor**  

```
{
    "Effect": "Allow",
    "Principal": {"Service": "mediatailor.amazonaws.com"},
    "Action": "mediapackagev2:GetObject",
    "Resource": "arn:aws:mediapackagev2:us-west-2:444455556666:channelGroup/emp-origin-channel-group/channel/emp-origin-channel/originEndpoint/emp-origin-endpoint",
    "Condition": {
        "StringEquals": {"AWS:SourceAccount": "444455556666"}
    }
}
```

**Example MediaPackage v2 的源站访问策略，范围限于播放配置 MediaTailor**  

```
{
    "Effect": "Allow",
    "Principal": {"Service": "mediatailor.amazonaws.com"},
    "Action": "mediapackagev2:GetObject",
    "Resource": "arn:aws:mediapackagev2:us-west-2:444455556666:channelGroup/emp-origin-channel-group/channel/emp-origin-channel/originEndpoint/emp-origin-endpoint",
    "Condition": {
        "StringEquals": {"AWS:SourceArn": "arn:aws:mediatailor:us-west-2:444455556666:playbackConfiguration/test”"}
    }
}
```

# AWS Elemental MediaTailor 与谷歌广告管理器集成
<a name="gam-integration"></a>

 MediaTailor 与 [Google 广告管理器](https://admanager.google.com/home/)（Ad Manager）集成，以编程方式访问以竞价为导向的在线市场，在那里可以实时购买和出售广告曝光量。你必须在 Ad Manager 中设置账号，然后才能通过以下方式与 Ad Manager 集成：
+ 使用 SSL 证书的服务器端集成。
+ 使用编程访问库 (PAL) SDK 进行客户端播放器集成。如果您想使用公开竞价交易类型，则需要进行此集成。

Ad Manager 对编程交易类型的支持因您使用的集成类型而异。有关可用选项的列表，请参阅[交易类型](https://support.google.com/admanager/answer/2805834?hl=en)或联系您的 Google 帐号团队。

以下各节详细描述了这些集成。

**Topics**
+ [服务器端集成](gam-integration-ssl.md)
+ [客户端集成](gam-integration-pal.md)

# 与 Google 广告管理器的服务器端 AWS Elemental MediaTailor 集成
<a name="gam-integration-ssl"></a>

向 Google 广告管理器（广告管理器）发出的服务器端广告请求必须包含广告管理器为授权程序化交易而 MediaTailor 颁发的 SSL 证书。

**向 Ad Manager 发出服务器端广告请求**

1. [提交 S AWS upport](https://console.aws.amazon.com/support/home#/) 请求以请求启用 SSL 证书。在 Support 请求中包含以下信息：
   + AWS 区域
   + AWS 账号
   + MediaTailor 播放配置名称

   如果您未启用 SSL 证书，则广告管理器会在 MediaTailor AD `ERROR_ADS_INVALID_RESPONSE` S 互动日志事件类型中使用 HTTP 401 错误代码来响应广告请求。

1. 启用 SSL 证书后，在播放配置中更新广告和预贴广告的网址和参数。要更新或创建播放配置，请参阅[MediaTailor 播放配置管理](working-with-configurations.md)。

   有关 Ad Manager 的 VAST 广告请求网址参数的官方指南，请参阅 Ad Manager [服务器端实施指南](https://support.google.com/admanager/answer/10668760)。更新包括以下更改：
   + 将基本网址从更改`pubads.g.doubleclick.net`为`serverside.doubleclick.net`。
   + 添加 `ssss=mediatailor` 参数。这表明 MediaTailor 这是服务器端的拼接源。
   + 移除该`IP`参数。 MediaTailor 使用`X-Forwarded-For`标头自动传入最终用户的 IP 地址。
   + 移除该`ss_req=1`参数。

   如需更新的完整的 VAST 网址指南，请参阅[服务器端实施指南](https://support.google.com/admanager/answer/10668760)或联系您的 Google 帐号团队。

# 与 Google 广告管理器的客户端 AWS Elemental MediaTailor 集成
<a name="gam-integration-pal"></a>

使用 Google Ad Manager 编程访问库 (PAL) SDKs 需要进行 MediaTailor 客户端集成。如果您想使用 Ad Manager 的公开竞价交易类型，则需要进行此集成。

PAL SDKs 为播放会话提供有关内容、设备和用户数据的信息。通过 PAL SDK，你可以将这些信息提供给 Google 广告管理器，然后谷歌广告管理器可以更好地确定要展示哪些定向广告。 SDKs适用于安卓 HTML5、iOS 和 Cast。有关使用 PAL 的信息 SDKs，请参阅[谷歌广告管理器 PAL SDK](https://developers.google.com/ad-manager/pal)。

**创建与 Ad Manager 的客户端集成**

1. 使用 PAL SDK 生成随机数。

   随机数是 PAL 为直播请求生成的加密字符串。每个请求都必须有一个唯一的随机数。有关设置随机数的信息，请从 [Google 广告管理器 PAL SDK 中选择你的 SDK](https://developers.google.com/ad-manager/pal)。

1. 使用您的 ADS 请求中的`givn`参数传递随机数值。为此，请更新您的广告网址以包含`&givn=[player_params.givn]`。有关说明，请参阅[启用客户端跟踪](ad-reporting-client-side.md#ad-reporting-client-side-enabling)。

**Datazoom 播放器 SDKs**  
MediaTailor 已与 Datazoom 合作提供免费播放器， SDKs 以简化与 Ad Manag SDKs er PAL 中提供的播放器的集成。有关 Datazoom 和 MediaTailor 合作伙伴关系的信息，请参阅。[Datazoom 免费播放器 SDKs](ad-reporting-client-side-ad-tracking-integrations.md#ad-reporting-client-side-ad-tracking-integrations-dz)

要访问 Datazoom 播放器 SDKs，请使用 D [ataz](https://www.datazoom.io/partner-aws) oom with 网站上的联系信息。 AWS

# 使用广告中断抑制功能自定义广告中断行为
<a name="ad-rules"></a>

在中创建配置时 AWS Elemental MediaTailor，您可以指定可选的广告插播配置设置来控制广告插播时间的行为，包括配置广告间隔抑制功能。这使您可以为视频内容量身定制广告插播体验，以满足您的特定要求。

**兼容性限制**  
您不能对以下内容使用广告间隔抑制：
+  VOD 和 live-to-VOD工作流程。仅支持实时工作流程。
+ 服务器引导式广告插入 (SGAI) 方法。服务器引导的方法以不同的方式处理广告决策，并且不需要抑制配置。

**Topics**
+ [配置广告间隔抑制](#ad-suppression)

## 配置广告间隔抑制
<a name="ad-suppression"></a>

您可以配置 MediaTailor 为跳过直播内容的广告时段个性化设置。这被称为*广告中断抑制*或广告*抑制*。本主题向您展示了如何配置广告中断屏蔽功能，还说明了配置广告中断抑制的工作原理。

广告中断抑制可用于以下用例：
+ **大清单回顾窗口** – 如果查看者在清单的直播边缘开始播放，但回顾窗口很大，您可能只希望在查看者开始观看之后插入广告。或者，在清单中为总回顾窗口的一部分插入广告。您可以配置广告抑制，以便在直播边缘或后面的指定时间范围内对广告时段进行 MediaTailor 个性化设置。
+ **短暂停顿加入** – 如果查看者在广告时段中间开始观看实时视频流，则该用户可能会更改频道，而不观看广告。借助广告抑制功能，如果广告插播是在观众加入直播之前开始的，则可以跳过广告时段个性化设置。

### 配置广告抑制
<a name="working-with-ad-suppression"></a>

要使用广告抑制，您可以通过以下方式配置**利用抑制**模式**、利用抑制值****和利用抑制填充策略**：
+ 在 MediaTailor 控制台中
+ 使用 AWS Command Line Interface (AWS CLI)
+ 使用 MediaTailor API 或作为客户端播放会话请求中的参数

有关带参数的配置的信息，请参见[配置广告禁止参数 – 播放会话请求](#configuring-ad-suppression-parameters-playback-session-request)。

#### 广告抑制配置参数
<a name="ad-suppression-configuration-parameters"></a>

您可以选择开启或关闭广告抑制。如果您开启广告抑制功能，则可以指定该抑制是在直播边缘之后还是在直播的直播播放边缘之前发生。无论哪种情况，您还要指定一个相对于直播边缘的时间，该时间 MediaTailor 不对广告进行个性化设置。当您开启广告抑制功能时，您可以指定一种利用抑制策略，该策略在会话中途开始时 MediaTailor 使用部分广告插播填充。

以下是广告禁止配置参数：
+ **Avail suppression mode (效用禁止模式)** – 设置广告禁止模式。默认情况下，广告禁止功能关闭。**可接受的值**：`OFF``BEHIND_LIVE_EDGE`、或`AFTER_LIVE_EDGE`。
  + `OFF`: 没有广告抑制功能，可对所有广告 MediaTailor插播进行个性化设置。
  + `BEHIND_LIVE_EDGE`: MediaTailor 不会对在直播边缘之前开始的广告时段进行个性化设置，减去 Avai **l 抑制值**。这会影响整个广告时段，而不仅仅是单个广告的可用性。
  + `AFTER_LIVE_EDGE`: MediaTailor 不对实时边缘内的广告插播进行个性化设置，再加上 Avai **l 抑制值**。可以将其配置为影响整个广告时段或允许部分填充可用广告。
+ **Avail suppression value (效用禁止值)** – 相对于直播中的实时边缘的时间。**Accepted value (接受的值)**：以 `HH:MM:SS` 格式表示的时间值。
+ A@@ **vail抑制填充策略**-定义 MediaTailor 适用于Ava **il抑制模式**的策略。**可接受的值**： `PARTIAL_AVAIL`、`FULL_AVAIL_ONLY`。
  + `BEHIND_LIVE_EDGE`模式始终使用`FULL_AVAIL_ONLY`抑制策略。
  + `AFTER_LIVE_EDGE`模式可用于在会话中途开始时调用`PARTIAL_AVAIL`广告插播时间填充。

#### 广告抑制设置示例
<a name="ad-suppression-settings-examples"></a>

通过[广告抑制配置参数](#ad-suppression-configuration-parameters)相互交互的方式，您可以指定几种不同的方式来处理广告抑制和在直播前后、直播前后进行广告投放。本节提供的示例向您展示了其中的一些交互。使用这些示例来帮助您针对您的特定情况设置配置参数。

以下是广告抑制设置的示例：

**Example 1：无广告禁止**  
当广告**抑制模式**为时`OFF`，没有广告抑制功能，并且会对所有广告 MediaTailor 插播进行个性化设置。  
在下图中，各种方块沿着从左向右移动的时间轴水平排列。每个区块代表直播内容或个性化广告插播时间段的一部分。虚线表示直播的当前直播边缘。在直播边缘之前有两个广告中断，另一个广告中断正在直播边缘进行。如图所示，当广告抑制模式为时`OFF`，会对时间轴上直播前出现的所有广告中断进行 MediaTailor 个性化设置。 MediaTailor 还可以在直播边缘对正在进行的广告插播进行个性化设置。  

![\[MediaTailor 广告中断个性化，可用性抑制模式设置为OFF。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/no_ad_suppression.png)


**Example 2：`BEHIND_LIVE_EDGE`广告抑制，其值与实时边缘同步**  
当**可用抑制模式**设置为`BEHIND_LIVE_EDGE`且**可用抑制值**设置为时`00:00:00`，可用抑制值将与实时边缘同步。 MediaTailor 不会对任何在直播边缘或之前开始的广告时段进行个性化设置。  
在下图中，各种方块沿着从左向右移动的时间轴水平排列。每个区块代表直播内容、个性化广告插播或非个性化广告插播时间段的一段时间。虚线表示直播的当前直播边缘。另一条虚线（表示设置为的可用抑制值）与实时边缘的虚线重叠。`00:00:00`两个广告中断发生在直播边缘之前，另一个广告中断发生在直播边缘之后。如图所示，如果将可用抑制模式设置为`BEHIND_LIVE_EDGE`，并且将可用抑制值设置为`00:00:00`使其与实时边缘同步，则 MediaTailor 不会对时间轴上直播边缘之前出现的任何广告中断进行个性化设置。 MediaTailor 对直播边缘*之后*出现的广告插播进行个性化设置。  

![\[MediaTailor 广告中断个性化，可用性抑制模式设置为BEHIND_LIVE_EDGE，可用性抑制值设置为00:00:00。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad_supp_value_sync_live_edge.png)


**Example 3：`BEHIND_LIVE_EDGE`广告抑制，其价值落后于直播边缘**  
当广告**抑制模式**设置为时`BEHIND_LIVE_EDGE`， MediaTailor 不会在该时间或之前对任何广告插播进行个性化设置。在此示例中，对比直播边缘落后 45 分钟的广告时段进行 MediaTailor 个性化设置。 MediaTailor *不会*对比直播边缘落后超过 45 分钟的广告时段进行个性化设置。  
在下图中，各种方块沿着从左向右移动的时间轴水平排列。每个区块代表直播内容、个性化广告插播或非个性化广告插播时间段的一段时间。虚线表示直播的当前直播边缘。另一条虚线，表示设置为的可用抑制值`00:45:00`，出现在时间线前 45 分钟，相对于实时边缘的虚线。虚线之间的 45 分钟时间段表示可用性抑制期。在禁用期开始时，广告中断正在进行中。另外两次广告中断发生在禁止使用期内。如图所示，如果将可用抑制模式设置为`BEHIND_LIVE_EDGE`，并且将可用抑制值设置为在实时边缘`00:45:00`后面，则会对在可用抑制期内发生的任何广告中断进行 MediaTailor 个性化设置。 MediaTailor 在禁止使用期开始时，*不会*对正在进行的广告中断进行个性化设置。  

![\[MediaTailor 广告中断个性化，可用性抑制模式设置为BEHIND_LIVE_EDGE，可用性抑制值设置为00:45:00。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad_supp_value_offset_live_edge.png)


**Example 4：在`AFTER_LIVE_EDGE`广告屏蔽期间没有广告中断的情况下屏蔽广告**  
当广告**屏蔽模式**设置为`AFTER_LIVE_EDGE`且**可用抑制值**大于零时，在会话经过的时间达到该值之前， MediaTailor 不会对任何广告中断进行个性化设置。  
在下图中，各种方块沿着从左向右移动的时间轴水平排列。每个区块代表直播内容或个性化广告插播时间段的一部分。虚线表示直播的当前直播边缘。另一条虚线，表示设置为的可用抑制值`00:30:00`，出现在时间轴中 30 分钟后，相对于实时边缘的虚线。第三条虚线代表会话初始化，相对于实时边缘的虚线，出现在时间轴的早期。实时边缘时间和时间之间的 30 分钟时间段表示可用性抑制期。 avail-suppression-value广告中断发生在广告屏蔽期之后。如图所示，如果将可用抑制模式设置为`AFTER_LIVE_EDGE`，则将可用抑制值设置为在实时边缘`00:30:00`之后，并且会话初始化发生在实时边缘之前，会话初始化会话，从而对在可用抑制期*之后*出现的任何广告中断进行 MediaTailor 个性化设置。  

![\[MediaTailor 广告中断个性化，将可用抑制模式设置为AFTER_LIVE_EDGE，可用抑制值设置为00:30:00，会话初始化发生在直播边缘之前。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad_supp_after_no_ad_break.png)


**Example 5：`AFTER_LIVE_EDGE`使用`PARTIAL_AVAIL`填充政策屏蔽广告，在广告屏蔽期结束时正在进行广告中断**  
当广告**屏蔽模式**设置为`AFTER_LIVE_EDGE`且**可用抑制值**大于零时，在会话经过的时间达到该值之前， MediaTailor 不会对任何广告中断进行个性化设置。  
在下图中，各种方块沿着从左向右移动的时间轴水平排列。每个区块代表直播内容、个性化广告插播或非个性化广告插播时间段的一段时间。虚线表示直播的当前直播边缘。另一条虚线，表示设置为的可用抑制值`00:30:00`，出现在时间轴中 30 分钟后，相对于实时边缘的虚线。第三条虚线代表会话初始化，相对于实时边缘的虚线，出现在时间轴的早期。实时边缘时间和时间之间的 30 分钟时间段表示可用性抑制期。 avail-suppression-value在禁用期结束时，广告中断正在进行中。如图所示，当将可用抑制模式设置为`AFTER_LIVE_EDGE`，将可用抑制值设置为在实时边缘`00:30:00`之后，将可用抑制填充策略设置为`PARTIAL_AVAIL`，并且会话初始化发生在实时边缘之前，会话会对在可用抑制期*之后*出现的任何广告中断进行 MediaTailor 个性化设置。对于在广告屏蔽期结束时正在进行的广告中断， MediaTailor 请对广告中断中在限制使用期*之后*发生的部分进行个性化设置，但不会对广告中出现的广告*中*断部分进行个性化设置。  

![\[MediaTailor 广告中断个性化，将可用性抑制模式设置为AFTER_LIVE_EDGE，利用抑制值设置为00:30:00，利用抑制填充策略设置为PARTIAL_AVAIL，会话初始化发生在直播边缘之前，广告中断正在进行中，广告中断正在进行中。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad_supp_after_ending_ad_break.png)


**Example 6：`AFTER_LIVE_EDGE`使用`PARTIAL_AVAIL`填充政策屏蔽广告，以及从会话初始化之前到可用屏蔽期结束后的广告中断**  
当广告**屏蔽模式**设置为`AFTER_LIVE_EDGE`且**可用抑制值**大于零时，在会话经过的时间达到该值之前， MediaTailor 不会对任何广告中断进行个性化设置。  
在下图中，各种方块沿着从左向右移动的时间轴水平排列。每个区块代表直播内容、个性化广告插播或非个性化广告插播时间段的一段时间。虚线表示直播的当前直播边缘。另一条虚线，表示设置为的可用抑制值`00:30:00`，出现在时间轴中 30 分钟后，相对于实时边缘的虚线。第三条虚线代表会话初始化，相对于实时边缘的虚线，出现在时间轴的早期。实时边缘时间和时间之间的 30 分钟时间段表示可用性抑制期。 avail-suppression-value广告中断时间从会话初始化之前到可用性抑制期之后的时间进行。如图所示，当将可用抑制模式设置为`AFTER_LIVE_EDGE`，将可用抑制值设置为在实时边缘`00:30:00`之后，将可用抑制填充策略设置为`PARTIAL_AVAIL`，并且会话初始化发生在实时边缘之前，会话会对在可用抑制期*之后*出现的任何广告中断进行 MediaTailor 个性化设置。对于在广告屏蔽期之前、期间和之后正在进行的广告中断， MediaTailor 请对广告中断中在可用性抑制期*之后*出现的部分进行个性化设置，但不会对广告插播时间中在限制使用期*之前*或*期间*发生的部分进行个性化设置。  

![\[MediaTailor 广告中断个性化，将可用性抑制模式设置为AFTER_LIVE_EDGE；利用抑制值设置为00:30:00；利用抑制填充策略设置为PARTIAL_AVAIL；会话初始化发生在直播边缘之前；广告中断在可用性抑制期之前、期间和之后正在进行中。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad_supp_after_ad_break_throughout.png)


**Example 7：在`AFTER_LIVE_EDGE`广告屏蔽期开始时正在进行广告中断时，广告被屏蔽**  
当广告**屏蔽模式**设置为`AFTER_LIVE_EDGE`且**可用抑制值**大于零时，在会话经过的时间达到该值之前， MediaTailor 不会对任何广告中断进行个性化设置。  
在下图中，各种方块沿着从左向右移动的时间轴水平排列。每个区块代表直播内容或非个性化广告插播时间段的一部分。虚线表示直播的当前直播边缘。另一条虚线，表示设置为的可用抑制值`00:30:00`，出现在时间轴中 30 分钟后，相对于实时边缘的虚线。第三条虚线代表会话初始化，相对于实时边缘的虚线，出现在时间轴的早期。实时边缘时间和时间之间的 30 分钟时间段表示可用性抑制期。 avail-suppression-value广告插播时间从会话初始化前一段时间一直持续到禁用期内。如图所示，当广告抑制模式设置为时`AFTER_LIVE_EDGE`，可用抑制值设置为在直播边缘`00:30:00`之后，并且会话初始化发生在直播边缘时间之前，但在广告插播开始之后， MediaTailor 不会对该广告插播进行个性化设置。  

![\[MediaTailor 广告中断个性化，将可用性抑制模式设置为AFTER_LIVE_EDGE；将可用抑制值设置为00:30:00；会话初始化发生在直播边缘之前；广告中断正在进行中，但在可用抑制期内结束。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad_supp_after_beginning_ad_break.png)


#### 配置广告禁止参数 – 播放会话请求
<a name="configuring-ad-suppression-parameters-playback-session-request"></a>

您可以在服务器端或客户端的*初始*播放会话请求中通过参数配置广告抑制设置。 MediaTailor如果您已经通过 MediaTailor 控制台或 AWS Elemental MediaTailor API 配置了广告抑制设置，则这些参数会覆盖这些设置。

广告禁止功能需要使用效用禁止模式和效用禁止值才能起作用。无法从不同的源配置这些参数。例如，您不能在 MediaTailor 控制台中配置一个参数，而使用查询参数配置另一个参数。

MediaTailor 支持以下广告抑制参数。


| Name | 说明 | 接受的值 | 
| --- | --- | --- | 
| availSuppressionMode |  设置广告禁止模式。默认情况下，广告抑制为`OFF`。如果设置为`BEHIND_LIVE_EDGE`， MediaTailor 则不会在`aws.availSuppressionValue`时间之前或之后填充广告中断。如果设置为`AFTER_LIVE_EDGE`， MediaTailor 则不会在广告屏蔽期内或之后填充广告插播时间。可用抑制周期从实时边缘时间跨度到时间，再加上额外的缓冲`aws.availSuppressionValue`时间。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/ad-rules.html)  | 
| availSuppressionValue | 相对于直播中的实时边缘的时间。 | 里面有一个 UTF-8 网址编码的时间码。HH:MM:SS例如，1 小时 30 分钟将表示为 01%3A30%3A00。 | 
| availSuppressionFillPolicy | 定义应用于无用抑制模式的策略。 BEHIND\$1LIVE\$1EDGE始终使用全部可用性抑制策略。 AFTER\$1LIVE\$1EDGE可用于在会话中途开始时调用部分广告插播时间填充。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/ad-rules.html)  | 

##### 服务器端配置
<a name="server-side-query"></a>

基本查询参数为 `aws.availSuppression`，后跟可选参数名称和值对。要构造查询，请在播放会话请求的末尾附加`aws.availSuppression=`到 MediaTailor，然后是参数名称和值。有关如何构建服务器端播放会话请求的更多信息，请参阅[MediaTailor 服务器端广告跟踪和报告](ad-reporting-server-side.md)。

**示例**：HLS

```
GET <mediatailorURL>/v1/master/<hashed-account-id>/<origin-id>/index.m3u8?aws.availSuppressionMode=BEHIND_LIVE_EDGE&aws.availSuppressionValue=00%3A00%3A21
```

下表列出了服务器端查询语法。


| 查询字符串组件 | 说明 | 
| --- | --- | 
| ? | 标记查询开始的受限字符。 | 
| aws. | 基本查询，后跟由名称和值对构造的参数。有关所有可用参数的列表，请参阅[配置广告禁止参数 – 播放会话请求](#configuring-ad-suppression-parameters-playback-session-request)。 | 
| = | 将参数名称与值相关联。例如 aws.availSuppressionMode=BEHIND\$1LIVE\$1EDGE。 | 
| & | 连接查询参数。例如，aws.availSuppressionMode=BEHIND\$1LIVE\$1EDGE&aws.availSuppressionValue=00:30:00&aws.availSuppressionFillPolicy=FULL\$1AVAIL\$1ONLY>。 | 

##### 客户端配置
<a name="client-side-configuration"></a>

在客户的 POST 请求中加入`availSuppression`参数 MediaTailor。有关如何构建客户端播放会话请求的更多信息，请参阅[客户端广告跟踪](ad-reporting-client-side.md)。

**示例**：HLS

```
POST parent.m3u8
    {
       "availSuppression": {
          "mode": "BEHIND_LIVE_EDGE",
          "value": "00:00:21",
          "fillPolicy": "FULL_AVAIL_ONLY"
       }
    }
```

# MediaTailor 保险杠广告插入
<a name="bumpers"></a>

Bumpers 是简短的、不可跳过的视频或音频片段，在广告插播开始或结束之前播放。 AWS Elemental MediaTailor

 以下条件适用于保险杠：
+ 保险杠必须在 10 秒或更短的时间内。
+ 保险杠可以在广告插播开始时、广告插播结束前插入，或者两者兼而有之。
+ 除非配置了前置片段，否则 Bumpers 会在播放会话中的每个广告时段播放。如果配置了前置滚动，则在前轮休息期间将不会播放保险杠。取而代之的是，他们将在预赛结束后的每个后续休息时间中进行比赛。
+ 对于 HLS，您必须在每个 SCTE-35 `EXT-X-CUE-OUT` 标签中包含该`duration`属性。
+ 保险杠经过转码以匹配源内容。
+ 保险杠不收费。

## 配置保险杠
<a name="configuring-bumpers"></a>

要使用保险杠，请 URLs 使用 MediaTailor 控制台、 MediaTailor API 或 AWS Command Line Interface ()AWS CLI配置保险杠。您可以配置起动保险杠、末端保险杠或两者兼而有之。保险杠存储在服务器上，例如亚马逊简单存储服务 (Amazon S3) Service。保险杠 URLs 表示存储的保险杠资产的位置。

起点和终点保险杠示例 URLs：

起始保险杠网址：`https://s3.amazonaws.com/startbumperad`

末端保险杠网址：`https://s3.amazonaws.com/endbumperad`

### 示例
<a name="example"></a>

以下是引擎广告行为的示例。

**Example 示例 1：起点和终点保险杠**  
在此示例中，启用了起点和终点保险杠。广告决策服务器有 50 秒的个性化广告来填补 70 秒的广告时段。10 秒的起始缓冲器在广告时段开始播放，50 秒的广告播放，然后播放 10 秒的结束缓冲器。

![\[此插图显示了一个充满起点和结尾保险杠的广告插播以及广告。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/bumpers.png)


# MediaTailor 片前广告插播
<a name="ad-behavior-preroll"></a>

**注意**  
可配置的前置广告仅适用于直播工作流程。如需详细了解 VOD 的广告插入（包括前置投放）的工作原理，请参阅[VOD 的广告拼接行为](ad-behavior.md#ad-behavior-vod)。

AWS Elemental MediaTailor 可以在播放会话开始时，也就是主内容开始之前插入广告。这些是*前置式*广告。

要插入前置片广告，请在配置的 “**其他**设置” 中填写**直播前置**广告决策服务器**和直播前置广告允许的最大持续时间**字段，如中所述。[可选配置设置](configurations-create.md#configurations-create-addl)

1.  MediaTailor 收到播放请求后，它会根据 MediaTailor 播放配置中的以下字段向 ADS 发送预贴片广告请求：
   + **直播前置广告决策服务器**是用于 MediaTailor 发送前置广告请求的广告决策服务器 (ADS) 网址。
   + **直播前置片允许的最大时长**是前置广告的最大总时长。 MediaTailor 根据允许的最大持续时间采取以下操作：
     + 如果 ADS 响应中广告的总时长*小*于您在**直播前置片中允许的最大时长**中给出的值，则会 MediaTailor 插入所有广告。最后一个广告完成后， MediaTailor 立即返回到底层内容。
     + 如果 ADS 响应中广告的总时长*超过*了你在**直播前置片中允许的最大时**长中给出的值，请 MediaTailor 选择一组符合时长的广告，而不必超过该时长。 MediaTailor 无需剪辑或截断即可插入这些广告。 MediaTailor 当最后一个选定的广告完成后，返回到底层内容。

1. 当 MediaTailor 收到来自 ADS 的预贴片回复时，它会操纵清单以添加指向前贴片广告的链接。 MediaTailor 按如下方式计算前置广告插播的开始时间：
   + 对于 DASH，公式为 `(publishTime - availabilityStartTime) - max(suggestedPresentationDelay, minBufferTime)`。
   + 对于 HLS，公式为 `max(2*EXT-X-TARGETDURATION, EXT-X-START:TIMEOFFSET)`。

1. MediaTailor 决定对任何非预贴广告时段采取什么措施。如果前置片段与另一个广告插播时间重叠，则 MediaTailor 不会对广告插播的重叠部分进行个性化设置。

# MediaTailor slate 广告插入
<a name="slate-management"></a>

**注意**  
Slate 仅适用于直播和 live-to-VOD工作流程。

使用 AWS Elemental MediaTailor，您可以为广告插播时间指定一个*板块广告*。Slate 是插入到直播中的默认 MP4 资源，例如静止图像或循环播放的视频，用于代替直播内容播放。

AWS Elemental MediaTailor 在以下特定情况下，在广告中断时段显示 slate：
+ 填补尚未被个性化广告取代的休息时间剩余时间
+ 如果广告决策服务器 (ADS) 以空的 VAST 或 VMAP 响应进行响应
+ 用于错误情况，例如 ADS 超时或 ADS 的 HTTP 500 错误
+ 如果广告无法通过以下方式插入 MediaTailor （例如，当广告尚未完成转码时）

如果您未配置 slate， MediaTailor 则在满足上述条件之一时默认为底层内容流。

## 配置名单
<a name="configuring-the-slate"></a>

您可以在[ MediaTailor 控制台](https://console.aws.amazon.com/console/home?nc2=h_ct&src=header-signin)**的其他配置**窗格中指定名单。 MediaTailor 从您指定的 URL 中下载 slate，然后将其转码为与内容相同的格式副本。您可以通过控制台中的可选**个性化阈值**配置来 MediaTailor控制显示板块的最长时间。有关更多信息，请参阅 [个性化阈值的工作原理](#personalization-threshold-scenarios)。

Slate 必须是同时包含音频和视频的高质量 MP4 资产。对于非 vPaid 配置，配置清单是可选的，但对于 VPAID 工作流程，则必须进行配置。

**注意**  
如果承载画面的服务器使用 HTTPS，则其证书必须来自知名的证书颁发机构。它不能是自签名证书。如果您使用自签名证书，则 AWS Elemental MediaTailor 无法从内容来源检索名单并将其拼接到清单中。

## 个性化阈值的工作原理
<a name="personalization-threshold-scenarios"></a>

个性化阈值定义了广告插播时间内允许的广告填充不足的最长持续时间（以秒为单位）。此功能专门适用于直播和 VOD 直播中的广告替换，而不是广告插入，因为它依赖于底层内容流。

行为因三种情况而异：

1. **禁用个性化设置时：**

   1. Slate 将在整个未填充时间内被插入

   1. 配置后将插入起点/终点保险杠（有关更多信息，请参阅）[MediaTailor 保险杠广告插入](bumpers.md)

   1. 广告将照常插入

1. **启用个性化设置且阈值小于中断持续时间时：**

   1. 如果未填写时间超过个性化阈值：

      1. MediaTailor 放弃广告插播的个性化设置

      1. 显示了底层内容

      1. 未插入广告、板条或保险杠

   1. 如果未填写时间小于个性化阈值：

      1. 广告和牌照已插入

      1. 如果配置了保险杠，则会插入保险杠

1. **启用个性化设置且阈值大于中断持续时间时：**

   1. 广告将被插入

   1. Slate 将在广告插播时间段的任何剩余时间内插入

   1. 如果配置了保险杠，则会插入保险杠

下表提供了 HLS 和 DASH 协议中特定场景的详细行为：


**详细行为矩阵**  

| 场景 | 个性化已禁用 | 在休息时间内启用个性化设置 | 启用个性化设置的时间大于休息时长 | 
| --- | --- | --- | --- | 
| 清空 VAST 或 VMAP | 已插入 Slate | 未插入石板 | 已插入 Slate | 
| 广告超时 | 已插入 Slate | 未插入石板 | 已插入 Slate | 
| 广告不可用 (Vast 404) | 已插入 Slate | 未插入石板 | 已插入 Slate | 
| 广告的持续时间比广告插播时间长 | 已插入广告 | 未插入广告 | 已插入广告 | 
| 填写替换广告未完全使用的时间 | 已插入 Slate | 如果个性化阈值大于未填充时间：未 ads/slates 插入，否则：已插入广告和牌照 | 已插入 Slate | 
| 使用空白 VAST 进行预览 | 已插入 Slate，未插入预卷 | 未插入石板，未插入预卷 | 已插入 Slate，未插入预卷 | 
| 带有 ADS 超时的预贴片 | 已插入 Slate，未插入预卷 | 未插入石板，未插入预卷 | 已插入 Slate，未插入预卷 | 
| 广告不可用时预先投放 (Vast 404) | 已插入 Slate，未插入预卷 | 未插入石板，未插入预卷 | 已插入 Slate，未插入预卷 | 
| 带空 VAST 的保险杠 | 板岩已插入，保险杠已插入 | 没有插入石板，没有插入保险杠 | 板岩已插入，保险杠已插入 | 
| 带有 ADS 超时的保险杠 | 板岩已插入，保险杠已插入 | 没有插入石板，没有插入保险杠 | 板岩已插入，保险杠已插入 | 
| 广告不可用时的碰撞 (Vast 404) | 板岩已插入，保险杠已插入 | 没有插入石板，没有插入保险杠 | 板岩已插入，保险杠已插入 | 
| 用于填补广告替换未充分利用的时间的保险杠 | 已插入 Slate、插入保险杠、插入广告 | 如果个性化阈值大于未填写时间：未插入 bumpers/ads/slates inserted, else: No bumpers/ads/slates | 已插入 Slate、插入保险杠、插入广告 | 

**重要注意事项**  
在使用 slate 和个性化阈值时，请记住以下几点。
+ 这种行为在 HLS 和 DASH 协议中都是一致的
+ 个性化阈值功能仅在配置 slate 时适用
+ 配置 slate 且未配置个性化阈值时，slate 将在完整的 Origin 可用时长或填写广告后的剩余时间内播放
+ 对于 VPAID 广告，在 VPAID 广告的持续时间内 MediaTailor 插入 slate，以便为视频播放器将要插入的广告留出空间

## Slate 配置和 VPAID
<a name="vpaid-requirements"></a>

**重要**  
使用 VPAID 广告时，必须配置 Slate。 MediaTailor 插入 slate 以存放视频播放器将要插入的 VPAID 广告的空间。为了适应用户的互动性，广告时长可能略长于 VPAID 广告时长。

然后，视频播放器会根据 MediaTailor 返回的客户端报告元数据处理 VPAID 广告，如中所述。[VPAID 要求](vast.md#vpaid)有关客户端报告的信息，请参阅[客户端广告跟踪](ad-reporting-client-side.md)。

# 预取广告
<a name="prefetching-ads"></a>

在直播中使用 AWS Elemental MediaTailor 广告预取，以帮助减少广告决策服务器 (ADS) 的峰值负载，并减少每次广告时段开始时的清单投放延迟。在定义预取时间表时，请 MediaTailor 按照时间表从广告中检索广告，并在广告插播需要之前为广告插入做好准备。在直播期间，预取可以帮助缓解广告填充率下降以及由于广告请求和转码超时或其他渠道延迟而错失的获利机会。

**注意**  
广告预取不适用于服务器引导式广告插入 (SGAI) 方法，包括传统的服务器引导式广告插播和 HLS 插页式广告。SGAI 方法不需要预取，因为玩家只能获取他们要播放的广告，并且可以在 CDNs 不 MediaTailor看到单个会话请求的情况下提供清单。

要设置广告预取，您需要根据播放配置创建一个或多个*预取计划*。预取时间表告诉您 MediaTailor 如何以及何时检索和准备即将到来的广告时段的广告。
+ 如果某个活动的广告投放时间表是可预测的，请使用*单一的预取*计划。每个预取计划都定义了一组 MediaTailor 要在单个广告中投放的广告。要在使用单个预提时间表时为多个广告预取广告，您必须创建与每个广告投放相关的多个预取计划（最多 24 小时前）。
+ 如果某个活动的广告投放时间表不在可预测的时间表上，请使用*重复的预提*计划。重复的预取计划会自动创建时间表并在活动中的每个广告中断之前预取广告。定期预取计划会在规定的时间段内（最长在活动结束前 24 小时）检索每个广告可用的广告。您无需为每个广告创建时间表，但是您确实会失去单次预取所提供的一些时间控制。

以下主题详细介绍了广告预取。

**Topics**
+ [预取的工作原理](understanding-prefetching.md)
+ [创建预取计划](creating-prefetch-schedules.md)
+ [基于 TPS 的流量整形](tps-traffic-shaping.md)
+ [删除预回迁计划](deleting-prefetch-schedules.md)

# 预取的工作原理
<a name="understanding-prefetching"></a>

当您的客户端向发出清单请求时 MediaTailor，该服务会评估与播放配置关联的所有预取计划。如果找 MediaTailor 不到匹配的预取时间表，该服务将恢复为正常的广告插入，并且不会预取广告。

如果 MediaTailor 找到匹配的预取计划，该服务将根据两个组成部分来评估该计划：检索和消费。每个组件的配置因单个预取计划和重复的预取计划而异，如以下各节所述。

## 单一预取计划流程
<a name="understanding-prefetching-single"></a>

**检索**  
这定义了*检索窗口*，即从 ADS 中 MediaTailor 预取广告的时间范围。请务必将此时段安排在广告中断之前的时间。下文概述了如何 MediaTailor 处理单个预回迁计划。  
有关在控制台中创建单一预回迁计划的步骤，请参阅[创建预取计划](creating-prefetch-schedules.md)。有关 API 的说明，请参阅《*AWS Elemental MediaTailor API 参考*》[PrefetchSchedules](https://docs.aws.amazon.com/mediatailor/latest/apireference/API_PrefetchSchedule.html)中的。  
在指定的*检索*时段内， MediaTailor 向 ADS 发送请求，要求其检索和准备广告，以便日后在播放会话中插入。  
+ MediaTailor （可选）使用流量整形来限制一次向 ADS 发出的请求数量。您可以在两种方法之间进行选择：

  *时间窗口流量整形*-将请求 MediaTailor 分布在指定的秒数内，而不是一次性发送所有会话的请求。这种分散的流量分布有助于防止广告不堪重负，从而导致超时和低广告填充率。

  *基于 TPS 的流量整形*-根据每秒交易量 (TPS) 和并发用户 MediaTailor 限制请求。此方法可根据您的 ADS 容量限制提供更直观的配置。有关更多信息，请参阅 [基于 TPS 的流量整形](tps-traffic-shaping.md)。
+ 如果您设置了*动态变量*，请在 MediaTailor 向 ADS 发出的请求中包含这些变量。 MediaTailor 使用这些变量将广告投放量与消费窗口期间的预提时间表进行匹配。有关更多信息，请参阅以下 “*消费*” 部分。

**Example**  
直播活动从上午 7:45 持续到上午 10 点，广告中断时间为上午 8:15。您配置 MediaTailor为从上午 7:45 到上午 8 点检索广告，流量调整窗口为 60 秒。如果有 500,000 个并发用户，则 MediaTailor 分发 ADS 请求以在 60 秒内实现每秒大约 8,333 笔交易的平均速率（500,000 个用户/60 秒=每秒 8,333 个请求），而不是同时发送所有请求。  
检索配置包括动态变量键`scte.event`和值`1234`。 MediaTailor 在向 ADS 发出的请求中包含此变量，然后可使用该变量将特定广告商定位到事件 ID 1234。

**消费**  
当在消费窗口中 MediaTailor 遇到 SCTE-35 广告插播标记时，它会将预取的广告放置在广告插播时间中。  
+ 如果您未设置可用性匹配标准，则会在消费窗口的第一个空白处 MediaTailor 插入广告。
+ 如果您确实为*可用*性*匹配**条件*设置了*动态变量键*，则会根据您在检索窗口中设置的动态变量来 MediaTailor 评估这些条件。只有在满足广告匹配条件的情况下，广告插播才有资格进行预取广告插入。 MediaTailor 在符合条件的第一个广告时段插入广告。

  有关支持的可用性匹配条件的列表，请参阅上表中的 “*可用于广告预取*” 列。[MediaTailor ADS 请求的会话变量](variables-session.md)

**Example 持续**  
您将消费的开始时间设置为上午 8:15，将结束时间设置为上午 8:17。您将密钥包含`scte.event_id`在可用性匹配标准中。  
对于从上午 8:15 MediaTailor 到上午 8:17 出现的每个广告时段，它都会评估每个广告时段SCTE的事件 ID。在每个播放会话中， MediaTailor 将预先提取的广告插入事件 ID 为 1234（如检索动态变量中所定义）的第一个广告插播中。对于不包含正确事件 ID 的广告插播时间，将 MediaTailor执行标准广告插入。

## 重复的预取计划流程
<a name="understanding-prefetching-recurring"></a>

**检索**  
这定义了*重复检索窗口*，即为直播活动 MediaTailor 预取和插入广告的时间范围（最长 24 小时）。下文概述了如何 MediaTailor 处理重复的预取计划。  
有关在控制台中创建重复预取计划的步骤，请参阅[创建预取计划](creating-prefetch-schedules.md)。有关 API 的说明，请参阅《*AWS Elemental MediaTailor API 参考*》[PrefetchSchedules](https://docs.aws.amazon.com/mediatailor/latest/apireference/API_PrefetchSchedule.html)中的。  
在指定的周期性预取窗口内， MediaTailor 检索和插入最长 24 小时的直播活动的广告。在窗口中每次广告插播后， MediaTailor 都会自动检索下一个广告时段的广告。  
+ 如果您将*延迟设置为有效期结束后*，则会 MediaTailor 等待指定的时间，然后再检索下一组广告以备下一个广告时段。
+ MediaTailor （可选）使用流量整形来限制一次向 ADS 发出的请求数量。您可以在两种方法之间进行选择：

  *时间窗口流量整形*-将请求 MediaTailor 分布在指定的秒数内，而不是一次性发送所有会话的请求。这种分散的流量分布有助于防止广告不堪重负，从而导致超时和低广告填充率。

  *基于 TPS 的流量整形*-根据每秒交易量 (TPS) 和并发用户 MediaTailor 限制请求。此方法可根据您的 ADS 容量限制提供更直观的配置。有关更多信息，请参阅 [基于 TPS 的流量整形](tps-traffic-shaping.md)。
+ 如果您设置了*动态变量*，请在 MediaTailor 向 ADS 发出的请求中包含这些变量。 MediaTailor 使用这些变量将广告投放量与消费窗口期间的预提时间表进行匹配。有关更多信息，请参阅以下 “*消费*” 部分。

**Example**  
直播活动从晚上 7 点持续到晚上 8:45，在此期间有四次广告中断。广告中断的时间表不可预测。您可以将周期性预取配置为从晚上 7 点到晚上 8:45，延迟时间为 10 分钟，流量调整窗口为 60 秒。每次成功后，都会 MediaTailor 检索下一个广告时段的广告。有效期结束十分钟后， MediaTailor 开始向 ADS 发送检索请求。凭借 60 秒的流量整形窗口和 500,000 个并发用户， MediaTailor 分发 ADS 请求以在 60 秒内实现每秒大约 8,333 笔交易的平均速率（500,000 个用户/60 秒=每秒 8,333 个请求），而不是同时发送所有请求。  
检索配置包括动态变量键`scte.event`和值`1234`。 MediaTailor 在向 ADS 发出的请求中包含此变量，然后可使用该变量将特定广告商定位到事件 ID 1234。

**消费**  
 MediaTailor 遇到 SCTE-35 广告插播标记时，它会将预取的广告放置在广告插播时间点中。  
+ 如果您设置了*检索到的广告过期时间*，则在指定的到期日之前，预取的广告可以被插入。
+ 如果您未设置可用性匹配标准，则会在消费窗口的第一个空白处 MediaTailor 插入广告。
+ 如果您确实为*可用*性*匹配**条件*设置了*动态变量键*，则会根据您在检索窗口中设置的动态变量来 MediaTailor 评估这些条件。只有在满足广告匹配条件的情况下，广告插播才有资格进行预取广告插入。 MediaTailor 在符合条件的第一个广告时段插入广告。

  有关支持的可用性匹配条件的列表，请参阅上表中的 “*可用于广告预取*” 列。[MediaTailor ADS 请求的会话变量](variables-session.md)

**Example 持续**  
在消费中，您将密钥包含`scte.event_id`在可用性匹配标准中。  
对于 MediaTailor 遇到的每个广告插播时间，它都会评估每个广告插播时间SCTE的事件 ID。在每个播放会话中， MediaTailor 将预先提取的广告插入事件 ID 为 1234（如检索动态变量中所定义）的每个广告插播时间。对于不包含正确事件 ID 的广告插播时间，将 MediaTailor 执行标准广告插入。  
您将广告过期时间设置为 2700 秒，因此检索到的广告在 45 分钟内可供插入。
下图说明了该示例，小方块代表广告插播时间。重复的预取计划设置在事件时间轴上进行了说明。  

![\[直播活动的图形插图，包括重复的预取计划配置。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/recurring_prefetch_timeline.png)


## 了解预取成本
<a name="billing"></a>

提出广告检索请求不收取任何费用。但是，对于预取广告，您需要按照标准转码费率对预取的转码广告收费。 MediaTailor 对于预取广告的消费，对于在广告插播时间段中放 MediaTailor 置的预取广告，将按标准费率向您收取广告插播费用。有关转码和广告插入费用的信息，请参阅[AWS Elemental MediaTailor 定价](https://aws.amazon.com/mediatailor/pricing/)。

# 创建预取计划
<a name="creating-prefetch-schedules"></a>

以下过程说明如何使用 MediaTailor控制台创建预回迁时间表。*有关使用 API 以编程方式创建和管理预取计划的信息，请参阅 MediaTailor API 参考[PrefetchSchedules](https://docs.aws.amazon.com/mediatailor/latest/apireference/API_PrefetchSchedule.html)中的AWS Elemental MediaTailor 。*

**注意**  
在中配置预取计划时 MediaTailor，了解不同类型的变量是如何处理的，这一点很重要。  

**可用匹配标准**  
如果要在计划中使用可用匹配条件，请务必先使用[动态会话变量](variables-session.md)配置播放配置的 ADS 网址模板，否则可用性匹配条件将不会生效。有关使用动态会话变量的信息，请参阅 MediaTailor广告插入入门主题[步骤 3：配置 ADS 请求网址和查询参数](getting-started-ad-insertion.md#getting-started-configure-request)中的。

**预取时间表中的玩家变量**  
创建预取计划时，不要在预取配置中将玩家变量定义为动态变量。取而代之的是，像往常一样在会话开始时传递玩家变量。 MediaTailor 如果这些变量映射在 ADS 模板网址中，则这些变量会自动包含在预取广告请求中。

**使用控制台创建新的预回迁时间表**

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1. 在导航窗格中，选择**配置**。选择要为其创建预回迁计划的播放配置。

1. 在 “**预回迁计划**” 选项卡上，选择 “**添加预回迁**计划”。

1. 在 “**预回迁计划详细信息**” 窗格下，执行以下操作：
   + 在 “**名称**” 中，输入预回迁计划的标识符，例如**my-prefetch-schedule**。
   + 对于**直播 ID**，可以选择输入唯一的 ID。如果您的来源包含多个播放流，则可以使用此 ID MediaTailor 来指示在特定直播中投放广告。例如，如果您的播放配置包含体育直播和电视节目直播，则可以使用直播 ID 创建预取时间表，以插入针对体育直播的广告。您可以在客户端的会话初始化或清单请求 MediaTailor 中将流 ID 值传递给。有关更多信息，请参阅以下示例。
     + 要进行*服务器端跟踪*，请在客户端对 MediaTailor 终端节点的`GET HTTP`请求中包含`?aws.streamId`查询参数和值。有关服务器端跟踪的一般信息，请参阅[MediaTailor 服务器端广告跟踪和报告](ad-reporting-server-side.md)。向包含直播 ID 的 HLS 终端节点发出的清单请求如下所示，其中`myStreamId`是您的直播 ID 的名称：

       ```
       GET <mediatailorURL>/v1/master/<hashed-account-id>/<origin-id>/<asset-id>?aws.streamId=myStreamId
       ```
     + 要进行*客户端跟踪*，请在客户端的`POST HTTP`会话初始化请求正文中包含`streamId`密钥和值**MediaTailor/v1/session**。有关客户端跟踪的一般信息，请参阅[客户端广告跟踪](ad-reporting-client-side.md)。包含直播 ID 的会话初始化请求如下所示，其中`myStreamId`是您的直播 ID 的名称：

       ```
       POST <mediatailorURL>/v1/session/<hashed-account-id>/<origin-id>/<asset-id>
       {
           'streamId': 'myStreamId',
           'reportingMode': 'client'
       }
       ```

1. 对于 **Prefetch 类型**，请进行选择并选择相应的部分，以获得有关其他字段的帮助：
   + 如果您要为活动中的一个广告时段创建一个预取时间表，请选择 “**单**个”。
   + 如果您要创建的时间表，以便在活动中的每个广告中断之前自动预取广告，请选择 “重**复**”。

## 单次预取时间表
<a name="single-prefetch"></a>

创建一个时间表，在活动中投放一个广告之前预先获取广告。

1. 在 “**检索**” 窗格上，指定要使用的检索设置。这些设置决定何时从 ADS MediaTailor 中预取广告。它们还会决定在 ADS 请求中包含哪些动态会话变量（如果有）。
   + 在 “**开始时间**” 中，输入 MediaTailor 可以开始检索此广告时段的预取时间。 MediaTailor 将尝试针对您的客户在此时间或之后提出的清单请求预取广告。默认值为当前时间。如果您未指定值，则该服务会尽快开始预取检索。
   + 在 “**结束时间**” 中，输入您希望停止 MediaTailor 为此广告时段预取广告的时间。 MediaTailor 将尝试预取在此时间或之前出现的清单请求的广告。检索窗口可以与消费窗口重叠。
   + （可选）配置流量整形以限制一次向 ADS 发出的请求数量。选择以下方法之一：

     *时间窗口方法*：对于**流量调整窗口持续时间**，请输入 MediaTailor 应将请求分发到 ADS 的秒数。有关更多信息，请参阅[单一预回迁时间表检索说明](understanding-prefetching.md#avail-matching-criteria-retr)。

     *基于 TPS 的方法*：配置**峰值 TPS** 和**峰值并发用户**，以根据每秒交易量和并发用户数限制请求。有关更多信息，请参阅 [基于 TPS 的流量整形](tps-traffic-shaping.md)。
   + 在 “[**动态变量**](variables.md)” 部分，输入多达 100 个动态会话变量。 MediaTailor 在发送给 ADS 的预取请求中使用这些变量进行替换。如果您未输入任何动态会话变量， MediaTailor 请尽力插值 [AD](configurations-create.md#configurations-create-main) S 网址中包含的动态变量的值。
     + 选择 “**添加动态变量**”。
     + 对于 **Key**，输入动态会话变量密钥，例如`scte.event_id`。您可以使用任何 MediaTailor 支持的动态变量。有关动态会话变量的信息，请参见[MediaTailor ADS 请求的会话变量](variables-session.md)。
     + 在 “**值**” 中，输入动态变量值，例如*my-event*。
     + 要添加其他动态变量，请选择选择**添加动态变量**。

1. 在 “**消费**” 窗格上，指定要用于消费窗口的设置。这些设置决定了何时将广告放 MediaTailor 置在广告插播中。它们还会确定您要使用的任何可用性匹配标准。
   + 在 “**开始时间**” 中，输入您想要 MediaTailor 开始将预取广告放置到广告插播时间点的时间。默认值为当前时间。如果您未指定时间，则该服务会尽快开始使用预取数据。
   + 在 “**结束时间**” 中，输入您希望 MediaTailor 停止将预取的广告放入广告插播时间点的时间。 MediaTailor 将尝试针对您的客户在此时间或之前提出的清单请求预取广告。结束时间必须晚于开始时间，且距离现在不到一天。消费窗口可以与检索窗口重叠。
   + 在 “[**可用性匹配条件**](variables.md)” 部分中，选择 “**添加可用性标准**”，然后将尽可能多的广告五个可用性匹配条件添加到您的日程安排中。然后，在 “**动态变量键**” 下，添加动态变量键，例如`scte.event_id`。 MediaTailor *只有*当预取的广告符合由您的客户传递给的动态变量值或从会话数据等信息中推断出的动态变量值定义的条件时 MediaTailor，才会将其放置在广告插 MediaTailor 播中。如果广告插播时间不符合指定的匹配条件，则会 MediaTailor 跳过该广告插播时间的预取。有关信息，请参阅[单次预取计划消耗说明](understanding-prefetching.md#avail-matching-criteria)。

1. 选择 “**添加可用性标准**”。

预取计划在消费窗口结束时间后自动过期。出于诊断目的，它们至少会在 7 天内保持可见，之后它们 MediaTailor 会自动删除。或者，您可以随时手动删除预回迁时间表。有关如何手动删除预回迁时间表的信息，请参阅下一[删除预回迁计划](deleting-prefetch-schedules.md)节。

### 确定您的客户应多久调用 CreatePrefetchSchedule API 的频率
<a name="how-often"></a>

如果您确切知道广告中断的发生时间，则您的客户可以每天以编程方式调用一次 [CreatePrefetchSchedule](https://docs.aws.amazon.com/mediatailor/latest/apireference/API_CreatePrefetchSchedule.html)API 来设置检索和消费。或者，您的客户可以在一天中多次调用 API 来定义检索和使用。选择 API 调用频率时，请考虑[有效预取计划的最大数量](quotas.md#prefetch-schedules-limit)，以及在您创建预取计划后您的广告中断时间表是否会发生变化的可能性。如果在您创建了预提时间表之后，广告中断时间表可能会发生变化，那么您可能需要更频繁地调用 API。

## 定期预取计划
<a name="recurring-prefetch"></a>

创建时间表，在活动中每个广告投放之前预先获取广告。

1. 在**重复检索**窗格上，指定要使用的检索设置。这些设置决定何时从 ADS MediaTailor 中预取广告。它们还会决定在 ADS 请求中包含哪些动态会话变量（如果有）。
   + 在 “**重复预取” 窗口中**，输入此广告时段 MediaTailor 可以开始预取回的时间。 MediaTailor 将尝试针对您的客户在此时间或之后提出的清单请求预取广告。默认值为当前时间。如果您未指定值，则该服务会尽快开始预取检索。
   + 对于可用性**结束后的延迟**，请输入在可用性结束后等待的秒数，然后再预取下一个可用性的广告。 MediaTailor如果未指定值，则 MediaTailor 默认为无延迟。
   + （可选）配置流量整形以限制一次向 ADS 发出的请求数量。选择以下方法之一：

     *时间窗口方法*：对于**流量调整窗口持续时间**，请输入 MediaTailor 应将请求分发到 ADS 的秒数。有关更多信息，请参阅[重复预取计划检索说明](understanding-prefetching.md#avail-matching-criteria-recurring-retr)

     *基于 TPS 的方法*：配置**峰值 TPS** 和**峰值并发用户**，以根据每秒交易量和并发用户数限制请求。有关更多信息，请参阅 [基于 TPS 的流量整形](tps-traffic-shaping.md)。
   + 在 “[**动态变量**](variables.md)” 部分，输入多达 100 个动态会话变量。 MediaTailor 在发送给 ADS 的预取请求中使用这些变量进行替换。如果您未输入任何动态会话变量， MediaTailor 请尽力插值 [AD](configurations-create.md#configurations-create-main) S 网址中包含的动态变量的值。
     + 选择 “**添加动态变量**”。
     + 对于 **Key**，输入动态会话变量密钥，例如`scte.event_id`。您可以使用任何 MediaTailor 支持的动态变量。有关动态会话变量的信息，请参见[MediaTailor ADS 请求的会话变量](variables-session.md)。
     + 在 “**值**” 中，输入动态变量值，例如*my-event*。
     + 要添加其他动态变量，请选择选择**添加动态变量**。

1. 在 “**消费**” 窗格上，指定要用于消费窗口的设置。这些设置决定了何时将广告放 MediaTailor 置在广告插播中。它们还会确定您要使用的任何可用性匹配标准。
   + 对于**检索到的广告过期**，请指明检索广告在多长时间内可供插入。
   + 在 “[**可用性匹配条件**](variables.md)” 部分中，选择 “**添加可用性标准**”，然后将尽可能多的广告五个可用性匹配条件添加到您的日程安排中。然后，在 “**动态变量键**” 下，添加动态变量键，例如`scte.event_id`。 MediaTailor *只有*当预取的广告符合由您的客户传递给的动态变量值或从会话数据等信息中推断出的动态变量值定义的条件时 MediaTailor，才会将其放置在广告插 MediaTailor 播中。如果广告插播时间不符合指定的匹配条件，则会 MediaTailor 跳过该广告插播时间的预取。有关信息，请参阅[定期预取计划消耗说明](understanding-prefetching.md#avail-matching-criteria-recur)。

1. 选择 “**添加可用性标准**”。

预取计划在消费窗口结束时间后自动过期。出于诊断目的，它们至少会在 7 天内保持可见，之后它们 MediaTailor 会自动删除。或者，您可以随时手动删除预回迁时间表。有关如何手动删除预回迁时间表的信息，请参阅下一[删除预回迁计划](deleting-prefetch-schedules.md)节。

# 基于 TPS 的流量整形
<a name="tps-traffic-shaping"></a>

AWS Elemental MediaTailor 提供了两种可选的流量整形方法，用于限制一次向 ADS 发出的请求数量。基于 TPS 的流量整形为预取计划提供了一种替代基于时间窗的流量整形。这种方法允许您根据每秒交易量 (TPS) 和预期并发用户而不是时间计算来指定广告决策服务器 (ADS) 容量，从而提供更直观的配置。

## 基于 TPS 的流量整形的工作原理
<a name="tps-how-it-works"></a>

您无需指定检索窗口的持续时间，而是提供以下参数：

峰值 TPS  
您的 ADS 每秒可以处理的最大请求数。此参数没有默认值。

并发用户峰值  
您的内容的预期并发观看人数峰值。此参数没有默认值。

MediaTailor 无论并发会话数量多少，都会自动将预回迁请求分发到指定的 TPS 限制之内。

**Example 基于 TPS 的配置示例**  
你的广告可以处理 500 TPS，你预计在高峰时段会有 100,000 名并发观众。您可以配置：  
+ 峰值 TPS：500
+ 并发用户峰值：100,000
MediaTailor 无论并发会话数量多少，都会自动将预回迁请求分发到指定的 TPS 限制之内。

# 删除预回迁计划
<a name="deleting-prefetch-schedules"></a>

以下过程说明如何使用 MediaTailor控制台删除预回迁时间表。*有关如何使用 API 以编程方式删除预取计划的信息，请参阅 MediaTailor API 参考[DeletePrefetchSchedule](https://docs.aws.amazon.com/mediatailor/latest/apireference/API_DeletePrefetchSchedule.html)中的AWS Elemental MediaTailor 。*

**注意**  
删除不是实时发生的。在 MediaTailor 删除预回迁时间表时，您可能会遇到延迟，在此期间，预回迁的检索和使用将继续在后台运行。

**使用控制台删除预回迁时间表**

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1. 在导航窗格中，选择**配置**。选择包含要删除的预回迁计划的播放配置。

1. 在 “**预回迁计划**” 选项卡上，选择要删除的预回迁时间表。然后选择**删除**。

# 将预处理广告与 AWS Elemental MediaTailor
<a name="precondition-ads"></a>

在[典型的广告插入工作流程](what-is-flow.md)中，对广告进行 MediaTailor 动态转码以匹配内容流，将其保存，然后将广告拼接到直播中。由于此过程仅在 MediaTailor 收到来自广告决策服务器 (ADS) 的 VAST 响应中的广告后才会发生，因此广告可供拼接的时间会有所延迟。如果在广告拼接工作流程中引入额外的延迟（可能是由于广告超时或其他内容或网络问题），则 MediaTailor 可能会部分填补空白，或者完全错过广告时段。

为了缩短将广告拼接到内容中的时间，您可以使用预处理广告。预处理广告是指您在广告插入中使用之前对其进行转码的 MediaTailor 广告。与其在广告中 URLs 提供无条件广告，不 URLs 如为预处理广告提供。在对 MediaTailor 请求的VAST回应中，ADS包含了指向预处理广告的直接链接。通过删除广告拼接中的转码部分， MediaTailor 只需保存广告并将其拼接到内容流中即可。使用预处理广告的广告拼接过程缩短了从通过 VAST 响应得 MediaTailor 知广告到将广告拼接到内容中的时间。

或者，您也可以使用广告预取，即您配置为在 MediaTailor 需要广告插播之前的预定时间执行广告拼接流程。有关广告预取的更多信息，请参阅。[预取广告](prefetching-ads.md)

## 预处理广告要求
<a name="precondition-ads-req"></a>

以下是使用预处理广告设置广告拼接工作流程时需要考虑的要求。

### `MediaFiles`要求
<a name="precondition-ads-req-vast"></a>

广告服务器发送到的 VAST 响应 MediaTailor 必须包含`MediaFiles`满足以下要求的响应：

广告 (`Creative`) 必须具有符合内容流比特率变体的变体。 *您有责任确保 VAST 响应使用正确的广告变体来匹配模板清单。*

虽然使用预处理广告可以帮助提高广告插入的效率，但 MediaTailor 无法管理转码过程来确保广告的媒体文件与内容清单规范兼容。如果广告与内容流不匹配，则 MediaTailor 可能会错过插入，或者不匹配可能会导致播放设备出错。

此外，要在不进行 MediaTailor 转码的情况下拼接到内容流中，`MediaFile`必须满足以下要求：
+ 它必须可以在公共互联网上访问，这样 MediaTailor 才能下载它。
+ 它必须使用流式传输，如VAST响应`delivery="streaming"`中所示。
+ 它必须是`.m3u8`（对于 HLS）或`.mpd`（对于 DASH）文件。

**Example 反应迅速**  
在以下 VAST 响应示例中， MediaTailor 插入`MediaFile`带有以下内容的 URLs：  
+ 对于 HLS 直播， MediaTailor 使用`https://example-ad-origin.amazonaws.com/ad1/index_low.m3u8`。这是第一款`MediaFile`采用流媒体传输和支持的文件扩展名的 (. `m3u8`)。
+ 对于 DASH 直播， MediaTailor 使用`https://example-ad-origin.amazonaws.com/ad1/index.mpd`。这是第一款`MediaFile`采用流媒体传输和支持的文件扩展名的 (. `mpd`)。

```
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0">
    <Ad id="ad1">
        <InLine>
            <AdSystem>ExampleAdSystem</AdSystem>
            <AdTitle>ad1</AdTitle>
            <Impression><![CDATA[https://example-impression.amazonaws.com]]></Impression>
            <AdServingId>de8e0d33-9c72-4d77-bb3a-f7e566ffc605</AdServingId>
            <Creatives>
                <Creative id="creativeId1" sequence="1">
                    <Linear skipoffset="00:00:05">
                        <Duration>00:00:30</Duration>
                        <MediaFiles>
                            <MediaFile delivery="progressive" width="1280" height="720" type="video/mp4" bitrate="533" scalable="true" maintainAspectRatio="true"><![CDATA[https://example-ad-origin.amazonaws.com/ad1/ad1.mp4]]></MediaFile>
                            <MediaFile delivery="streaming" width="1280" height="720" type="application/dash+xml" bitrate="533" scalable="true" maintainAspectRatio="true"><![CDATA[https://example-ad-origin.amazonaws.com/ad1/index.mpd]]></MediaFile>
                            <MediaFile delivery="streaming" width="640" height="360" type="application/x-mpegURL" bitrate="262" scalable="true" maintainAspectRatio="true"><![CDATA[https://example-ad-origin.amazonaws.com/ad1/index_low.m3u8]]></MediaFile>
                            <MediaFile delivery="streaming" width="2560" height="1440" type="application/x-mpegURL" bitrate="1066" scalable="true" maintainAspectRatio="true"><![CDATA[https://example-ad-origin.amazonaws.com/ad1/index_high.m3u8]]></MediaFile>
                        </MediaFiles>
                    </Linear>
                </Creative>
            </Creatives>
        </InLine>
    </Ad>
</VAST>
```

### 广告清单要求
<a name="precondition-ads-req-ads"></a>

要使用预处理广告，您的父广告和子广告清单必须满足以下要求：
+ 在 VAST 响应`Creative`部分中链接的清单必须是父广告清单。
+ f URLs or the child 的广告清单必须是相对路径。
+ 子广告清单必须与父多变体播放列表位于同一目录中，且级别相同。子清单不能位于子目录或其他位置。

**Example 支持的父多变体播放列表**  
以下父广告多变体播放列表包含子广告媒体 URLs 的相关播放列表。子播放列表也与父多变体播放列表位于同一目录中。  

```
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
index_3.m3u8
```

**Example 不支持的父级多变体播放列表：子目录**  
以下父级广告多变体播放列表包含子播放列表，这些子播放列表位于相对于父多变体播放列表的子目录中。它不支持预处理广告的播放列表。  

```
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
child/index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
child/index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
child/index_3.m3u8
```

**Example 不支持的父级多变体播放列表：绝对 URLs**  
以下父广告多变体播放列表包含绝对值 URLs的子播放列表。它不支持预处理广告的播放列表。  

```
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
https://example.mediatailor.us-west-2.amazonaws.com/index_1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
https://example.mediatailor.us-west-2.amazonaws.com/index_2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
https://example.mediatailor.us-west-2.amazonaws.com/index_3.m3u8
```

## 预处理广告工作流程
<a name="precondition-ads-setup"></a>

以下是对预处理广告在广告拼接工作流程中的运作方式的基本描述。 MediaTailor工作流程的第一部分是为使用预处理广告进行设置所必须采取的操作。第二部分描述了如何 MediaTailor 处理广告。

**第 1 部分：预处理广告的设置**  
完成以下步骤，设置在中 MediaTailor使用预处理广告的工作流程。

1. 使用转码器服务（例如）将您的广告素材调整为支持模板清单中不同比特率、分辨率和编解码器的变体。 AWS Elemental MediaConvert

1. 将预先转码 URLs 的媒体文件提供给 ADS，以便在 VAST 响应中使用。

1. 在中@@ [创建您的播放](configurations-create.md)配置 MediaTailor。要使用预处理广告，请在配置中的**流媒体文件调节**设置中选择 “**无**”。

1. 像往常一样继续设置内容分发。

**第 2 部分： MediaTailor 广告处理**  
MediaTailor 广告拼接按中所[MediaTailor 广告插入的工作原理](what-is-flow.md)述完成。当 MediaTailor 收到来自 ADS 的 VAST 回复时，它会使用以下逻辑来确定要对广告采取哪些行动。此逻辑由播放配置上的**流媒体文件调节**设置决定。
+ 当 “**流媒体文件调节**” 设置为 “**转码**” 时，在`progressive`交付时对媒体文件进行 MediaTailor 转码，然后将其拼接到清单中。如果没有足够的带有`progressive`投放媒体文件的广告来填补空缺，请对这些广告进行 MediaTailor 转码并使用带有`streaming`投放效果的广告。
+ 当 “**流媒体文件调节**” 设置为 “**无**” 时，将包含 MediaTailor `streaming`投放媒体文件的广告拼接到清单中，而无需对其进行转码。如果没有足够的带有`streaming`投放媒体文件的广告来填补空缺，请对这些广告进行 MediaTailor 转码并使用带有`progressive`投放效果的广告。

# MediaTailor ADS 请求的动态广告变量
<a name="variables"></a>

AWS Elemental MediaTailor 使用动态广告变量将您的观看会话中的信息传递到广告决策服务器 (ADS)。这些信息可帮助广告为您的观众选择最相关的广告。

本节概述了动态广告变量，并提供了指向特定实施指南的链接。有关 step-by-step配置说明，请参阅下面的各个主题。

**动态变量类型**  
MediaTailor 支持四种类型的动态变量：
+ **会话变量**-自动生成的值，例如会话 ID 和 SCTE-35 数据。请参阅[MediaTailor ADS 请求的会话变量](variables-session.md)。
+ **播放器变量**-视频播放器发送的自定义参数。请参阅[MediaTailor ADS 请求的玩家变量](variables-player.md)。
+ 带有**配置别****名的域变量**-用于多源配置的动态 URL 域。
+ **配置别名**-用于动态变量替换的预定义映射。请参阅[配置别名](configuration-aliases-overview.md)。

**常见使用案例**  
使用动态广告变量可以：
+ 将观众的人口统计数据和偏好传递给您的广告
+ 根据地理位置将请求路由到不同的起点
+ 通过集成实现时移查看 MediaPackage 
+ 实施 A/B 测试和故障转移场景

以下各节提供了有关在中使用动态广告变量的更多详细信息 MediaTailor。

**Topics**
+ [会话变量](variables-session.md)
+ [玩家变量](variables-player.md)
+ [域变量](variables-domains.md)
+ [配置别名](configuration-aliases-overview.md)
+ [传递 ADS 参数](passing-paramters-to-the-ads.md)
+ [参数路由](parameter-routing-behavior.md)
+ [MediaPackage 集成](mediapackage-integration-param.md)
+ [会话行为](parameter-session-behavior.md)
+ [参数参考](parameter-comprehensive-reference.md)
+ [参数疑难解答](parameter-troubleshooting.md)
+ [别名故障排除](configuration-aliases-troubleshooting.md)

有关参数格式化要求和疑难解答，请参阅[MediaTailor 参数参考和限制](parameter-comprehensive-reference.md)和[MediaTailor 参数疑难解答指南](parameter-troubleshooting.md)。

# MediaTailor ADS 请求的会话变量
<a name="variables-session"></a>

AWS Elemental MediaTailor 当您配置为在模板 ADS 网址中指定本节中列出的一个或多个变量时，会话数据会发送 AWS Elemental MediaTailor 到广告决策服务器 (ADS)。您可以使用单个变量，也可以连接多个变量以创建单个值。 MediaTailor 生成一些值，然后从清单和玩家的会话初始化请求等来源获取其余值。

下表描述了可在模板 ADS 请求网址配置中使用的会话数据变量。表中列出的章节编号对应于有线电信工程师协会 (SCTE) -35 规范《[数字节目插入提示信息](https://account.scte.org/standards/library/catalog/scte-35-digital-program-insertion-cueing-message/)》的2019a版本。有关广告预取的详细信息，请参阅。[预取广告](prefetching-ads.md)


| Name | 可用于广告预取 | SCTE-35 规格部分 | Description | 
| --- | --- | --- | --- | 
| [avail.index] | 是 |  | 一个数字，表示广告在索引中的位置。在播放会话开始时， MediaTailor 创建清单中所有可用广告的索引，并存储会话剩余部分的索引。当向ADS MediaTailor 提出填补空缺的请求时，它会包括广告可用的索引号。此参数使 ADS 能够通过使用竞争排除和频次上限等功能来改进广告选择。 | 
| [avail.random] | 是 |  | 一个介于 0 到 10,000,000,000 之间的随机数，作为长数，为每次向 ADS 的请求 MediaTailor 生成。某些广告服务器使用此参数来实现将广告与竞争对手公司的广告进行隔离等功能。 | 
| [scte.archive\$1allowed\$1flag] | 是 | 10.3.3.1 | 一个可选的布尔值。当此值为 0 时，将对该片段施加录制限制。当此值为 1 时，不对片段施加录制限制。 | 
| [scte.avail\$1num] | 是 | 9.7.2.1 |  MediaTailor 从 SCTE-35 字段中解析的值avail\$1num，为长数字。 MediaTailor 可以使用此值来指定线性广告可用数量。值必须为整数。 | 
| [scte.avails\$1expected] | 是 | 9,7.2.1 | 一个可选的长整值，它给出当前事件中预期的可用次数。 | 
| [scte.delivery\$1not\$1restricted\$1flag] | 是 | 10.3.3.1 | 一个可选的布尔值。当此值为 0 时，将保留接下来的五位。当此值为 1 时，接下来的五位将采用 SCTE-35 规范中描述的含义。 | 
| [scte.device\$1restrictions] | 是 | 10.3.3.1 | 一个可选的整数值，表示三个预定义的、独立的和非分层的设备组。有关此变量的更多信息，请参阅 SCTE-35 规范中的 segments\$1 expected 描述。 | 
| [scte.event\$1id] | 是 | 9.1 和 9.7.2.1 |  MediaTailor 从 SCTE-35 字段中解析的值splice\$1event\$1id，为长数字。 MediaTailor 使用此值来指定线性广告可用数或填充广告服务器查询字符串，例如广告栏位置。值必须为整数。 | 
| [scte.no\$1regional\$1blackout\$1flag] | 是 | 10.3.3.1 | 一个可选的布尔值。当此值为 0 时，区域封锁限制适用于该分段。当此值为 1 时，区域封锁限制不适用于该区段。 | 
| [scte.segment\$1num] | 是 | 10.3.3.1 | 一个可选的整数值，用于对分段集合中的区段进行编号。有关此变量的更多信息，请参阅 SCTE-35 规范中的 s egment\$1num 描述。 | 
| [scte.segmentation\$1event\$1id]  | 是 | 10.3.3.1 | MediaTailor 将此变量公开为。[scte.event_id](#scte.event_id) | 
| [scte.segmentation\$1type\$1id] | 是 | 10.3.3.1 | 一个可选的 8 位整数值，用于指定分段类型。有关此变量的更多信息，请参阅 SCTE-35 规范中的 s egmentation\$1type\$1id 描述。 | 
| [scte.segmentation\$1upid] |  `segmentation_upid_type`：是 `private_data`：是  |  **segmentation\$1upid：10.3.3.1** 托管私有 UPID：10.3.3.3  |  对应于 SCTE-35 `segmentation_upid` 元素。该`segmentation_upid`元素包含`segmentation_upid_type`和`segmentation_upid_length`。 MediaTailor 支持以下`segmentation_upid`类型： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/variables-session.html)  | 
| [scte.segmentation\$1upid.assetId] | 是 |  | 与托管私有 UPID (0xC) 配合使用，segmentation\$1 upid\$1type用于播客工作流程。 MediaTailor从 MPU 的 private\$1data JSON assetId 结构中的参数中派生此值。有关更多信息，请参阅 [Managed Private UPID JSON structure for a podbuster workflow](#podbuster-workflow)。 | 
| [scte.segmentation\$1upid.cueData.key] | 是 |  | 与托管私有 UPID (0xC) 配合使用，segmentation\$1 upid\$1type用于播客工作流程。 MediaTailor从 MPU 的 private\$1data JSON cueData.key 结构中的参数中派生此值。有关更多信息，请参阅 [Managed Private UPID JSON structure for a podbuster workflow](#podbuster-workflow)。 | 
| [scte.segmentation\$1upid.cueData.value] | 是 |  | 与托管私有 UPID (0xC) 配合使用，segmentation\$1 upid\$1type用于播客工作流程。 MediaTailor从 MPU 的 private\$1data JSON cueData.key 结构中的参数中派生此值。有关更多信息，请参阅 [Managed Private UPID JSON structure for a podbuster workflow](#podbuster-workflow)。值可以是字符串。 | 
| [scte.segmentation\$1upid.private\$1data.\$1index\$1] | 是 |  | 与托管私有 UPID (0xC) 配合使用，segmentation\$1upid\$1type用于定向广告工作流程。 MediaTailor 拆分以冒号分隔的分段 UPID 标记，并创建索引会话变量。该索引对应于以冒号分隔的列表中的位置，忽略了初始冒号中的前导空格。例如，如果`segmentation_upid = ":3213214:2313321/5:3943"`，那么： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/variables-session.html) 值可以是字符串。 | 
| [scte.segments\$1expected] | 是 | 10.3.3.1 | 一个可选的整数值，它给出区段集合中各个分段的预期数量。有关此变量的更多信息，请参阅 SCTE-35 规范中的 segments\$1 expected 描述。 | 
| [scte.sub\$1segment\$1num] | 是 | 10.3.3.1 | 一个可选的整数值，用于标识子分段集合中的特定子分段。有关此变量的更多信息，请参阅 SCTE-35 规范中的 sub\$1segment\$1num 描述。 | 
| [scte.sub\$1segments\$1expected] | 是 | 10.3.3.1 | 一个可选的整数值，它给出子分段集合中各个子分段的预期数量。有关此变量的更多信息，请参阅 SCTE-35 规范中的 sub\$1segments\$1expected 描述。 | 
| [scte.unique\$1program\$1id] | 是 | 9.7.2.1 | 由 SCTE-35 splice\$1insert 字段unique\$1program\$1id解析 MediaTailor 的整数值。ADS 使用唯一程序 ID (UPID) 为直播线性流提供程序级广告定向。如果 SCTE-35 命令不是拼接插入，则将其 MediaTailor 设置为空值。值必须为整数。 | 
| [session.avail\$1duration\$1ms] | 是 |  |  广告投放时段的持续时间（以毫秒为单位）。默认值为 300,000 毫秒。 AWS Elemental MediaTailor 从输入清单中获取持续时间值，如下所示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/variables-session.html)  | 
| [session.avail\$1duration\$1secs] | 是 |  | 以秒为单位的广告投放时段或广告可用性，四舍五入到最接近的秒数。 MediaTailor 确定此值的方式与其确定的方式相同[session.avail\$1duration\$1ms]。 | 
| [session.client\$1ip] | 否 |  |  MediaTailor 请求来自的远程 IP 地址。如果 X-forwarded-for 标头已设置，则该值就是 MediaTailor 用于 client\$1ip 的值。 | 
| [session.id] | 否 |  | 当前播放会话的唯一数字标识符。播放器针对某个会话发出的所有请求都具有相同的 ID，因此它可用于旨在关联针对单一查看的请求的 ADS 字段。 | 
| [session.referer] | 否 |  | 通常是托管视频播放器的页面的网址。 MediaTailor 将此变量设置为玩家在其请求中使用的Referer标头的值 MediaTailor。如果播放器未提供此标头， MediaTailor 会将 [session.referer] 留空。如果您在清单端点前使用内容分发网络 (CDN) 或代理，并且想要显示此变量，请在此处代理来自播放器的正确标头。 | 
| [session.user\$1agent] | 否 |  | 从玩家的会话初始化请求中 MediaTailor 收到的User-Agent标头。如果您要在清单终端节点前面使用 CDN 或代理，则必须在此处代理播放器中的正确标头。 | 
| [session.uuid] | 否 |  |  的替代方案**[session.id]**。这是当前播放会话的唯一标识符，如下所示： <pre>e039fd39-09f0-46b2-aca9-9871cc116cde</pre>  | 
| [avail.source\$1content\$1time\$1epoch\$1ms] | 否 |  |  对于 HLS，该值是开始使用的原始分段的 PDT。对于 DASH 来说，`<SupplementalProperty> urn:scte:dash:utc-time``<Period>`该值是包含`<EventStream>`. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/variables-session.html)  | 

**Example**  
如果 ADS 要求使用唯一会话标识符传递名为 `deviceSession` 的查询参数，则 AWS Elemental MediaTailor 中的模板 ADS URL 可能类似于下面这样：  

```
https://my.ads.server.com/path?deviceSession=[session.id]
```
AWS Elemental MediaTailor 自动为每个直播生成一个唯一的标识符，然后输入该标识符来代替`session.id`。如果标识符是`1234567`，则向 ADS 发出的最终请求将如下所示： MediaTailor   

```
https://my.ads.server.com/path?deviceSession=1234567
```
如果 ADS 需要传递多个查询参数，则其中的模板 ADS 网址 AWS Elemental MediaTailor 可能如下所示：  

```
https://my.ads.server.com/sample?e=[scte.avails_expected]&f=[scte.segment_num]&g=[scte.segments_expected]&h=[scte.sub_segment_num]&j=[scte.sub_segments_expected]&k=[scte.segmentation_type_id]
```
以下 DASH 标记示例 XML 片段显示了如何使用`scte35:SpliceInsert`：  

```
<Period start="PT444806.040S" id="123456" duration="PT15.000S">
  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
    <Event duration="1350000">
      <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="180832" tier="4095">
        <scte35:SpliceInsert spliceEventId="1234567890" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
          <scte35:Program><scte35:SpliceTime ptsTime="5672624400"/></scte35:Program>
          <scte35:BreakDuration autoReturn="true" duration="1350000"/>
        </scte35:SpliceInsert>
      </scte35:SpliceInfoSection>
```
以下 DASH 标记示例 XML 片段显示了如何使用`scte35:TimeSignal`：  

```
<Period start="PT346530.250S" id="123456" duration="PT61.561S">
  <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
    <Event duration="5310000">
      <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="183003" tier="4095">
        <scte35:TimeSignal>
          <scte35:SpliceTime ptsTime="3442857000"/>
        </scte35:TimeSignal>
        <scte35:SegmentationDescriptor segmentationEventId="1234567" segmentationEventCancelIndicator="false" segmentationDuration="8100000" segmentationTypeId="52" segmentNum="0" segmentsExpected="0">
          <scte35:DeliveryRestrictions webDeliveryAllowedFlag="false" noRegionalBlackoutFlag="false" archiveAllowedFlag="false" deviceRestrictions="3"/>
          <scte35:SegmentationUpid segmentationUpidType="12" segmentationUpidLength="2">0100</scte35:SegmentationUpid>
        </scte35:SegmentationDescriptor>
      </scte35:SpliceInfoSection>
    </Event>
```
以下 DASH 标记示例 XML 片段显示了如何使用`scte35:Binary`：  

```
<Period start="PT444806.040S" id="123456" duration="PT15.000S">
  <EventStream schemeIdUri="urn:scte:scte35:2014:xml+bin" timescale="1">
    <Event presentationTime="1541436240" duration="24" id="29">
      <scte35:Signal xmlns="http://www.scte.org/schemas/35/2016">
        <scte35:Binary>/DAhAAAAAAAAAP/wEAUAAAHAf+9/fgAg9YDAAAAAAAA25aoh</Binary>
      </scte35:Signal>
    </Event>
    <Event presentationTime="1541436360" duration="24" id="30">
      <scte35:Signal xmlns="http://www.scte.org/schemas/35/2016">
        <scte35:Binary>QW5vdGhlciB0ZXN0IHN0cmluZyBmb3IgZW5jb2RpbmcgdG8gQmFzZTY0IGVuY29kZWQgYmluYXJ5Lg==</Binary>
      </scte35:Signal>
    </Event>
```
以下 HLS 标签示例显示了如何使用`EXT-X-DATERANGE`：  

```
#EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2014-03-05T11:
15:00Z",PLANNED-DURATION=59.993,SCTE35-OUT=0xFC002F0000000000FF0
00014056FFFFFF000E011622DCAFF000052636200000000000A0008029896F50
000008700000000
```
以下 HLS 标签示例显示了如何使用`EXT-X-CUE-OUT`：  

```
#EXT-OATCLS-SCTE35:/DA0AAAAAAAAAAAABQb+ADAQ6QAeAhxDVUVJQAAAO3/PAAEUrEoICAAAAAAg+2UBNAAANvrtoQ==  
#EXT-X-ASSET:CAID=0x0000000020FB6501  
#EXT-X-CUE-OUT:201.467
```
以下 HLS 标签示例显示了如何使用`EXT-X-SPLICEPOINT-SCTE35`：  

```
#EXT-X-SPLICEPOINT-SCTE35:/DA9AAAAAAAAAP/wBQb+uYbZqwAnAiVDVUVJAAAKqX//AAEjW4AMEU1EU05CMDAxMTMyMjE5M19ONAAAmXz5JA==
```
以下示例显示了如何使用`scte35:Binary`解码：  

```
{
  "table_id": 252,
  "section_syntax_indicator": false,
  "private_indicator": false,
  "section_length": 33,
  "protocol_version": 0,
  "encrypted_packet": false,
  "encryption_algorithm": 0,
  "pts_adjustment": 0,
  "cw_index": 0,
  "tier": "0xFFF",
  "splice_command_length": 16,
  "splice_command_type": 5,
  "splice_command": {
    "splice_event_id": 448,
    "splice_event_cancel_indicator": false,
    "out_of_network_indicator": true,
    "program_splice_flag": true,
    "duration_flag": true,
    "splice_immediate_flag": false,
    "utc_splice_time": {
      "time_specified_flag": false,
      "pts_time": null
    },
    "component_count": 0,
    "components": null,
    "break_duration": {
      "auto_return": false,
      "duration": {
        "pts_time": 2160000,
        "wall_clock_seconds": 24.0,
        "wall_clock_time": "00:00:24:00000"
      }
    },
    "unique_program_id": 49152,
    "avail_num": 0,
    "avails_expected": 0
    "segment_num": 0,
    "segments_expected": 0,
    "sub_segment_num": 0,
    "sub_segments_expected": 0
  },
  "splice_descriptor_loop_length": 0,
  "splice_descriptors": null,
  "Scte35Exception": {
    "parse_status": "SCTE-35 cue parsing completed with 0 errors.",
    "error_messages": [],
    "table_id": 252,
    "splice_command_type": 5
  }
}
```

# MediaTailor ADS 请求的玩家变量
<a name="variables-player"></a>

AWS Elemental MediaTailor 当您配置为在模板 ADS 网址中指定`player_params.<query_parameter_name>`变量时，会 AWS Elemental MediaTailor 将从玩家那里收到的数据发送到 ADS。例如，如果玩家向发送请求`user_id`中名为的查询参数 MediaTailor，则要在 ADS 请求中传递该数据，请将其包含`[player_params.user_id]`在 ADS 网址配置中。

这使您能够控制 ADS 请求中包含的查询参数。通常，您将 ADS 可识别的特殊查询参数添加到 ADS 请求 URL，并提供键-值对作为参数值。

以下过程中使用的示例将使用以下键-值对：
+ *值为 *1 的 param1*：*
+ *值为 *2 的 param2*：*

**添加查询参数作为键-值对** 

1. 在中 AWS Elemental MediaTailor，配置 ADS 请求模板网址以引用参数。以下 URL 显示包含了示例参数：

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

1. （可选）对于服务器端广告跟踪报告，对播放器上的键-值对进行 URL 编码。 MediaTailor 收到会话初始化请求时，它会对值进行网址解码一次，然后再将其替换为 ADS 请求网址。
**注意**  
如果您的 ADS 需要 URL 编码值，请在播放器上对值进行两次 URL 编码。这样，由完成的解码就会为 AD MediaTailor S 生成一个曾经编码过的值。

   例如，如果发送到 ADS 的值的解码表示形式为 `param1=value1:&param2=value2:`，则 URL 编码表示形式为 `param1=value1%3A&param2=value2%3A`。

1. 在来自玩家的会话初始化调用中，将键值对 MediaTailor 作为单个查询参数的值传递给。以下示例调用将为服务器端和客户端广告跟踪报告提供示例键-值对。
   + 服务器端广告跟踪报告的示例请求 - 使用 URL 编码对

     HLS：

     ```
     <master>.m3u8?ads.param1=value1%3A&ads.param2=value2%3A
     ```

     DASH：

     ```
     <manifest>.mpd?ads.param1=value1%3A&ads.param2=value2%3A
     ```
   + 客户端广告跟踪报告的示例请求 - 不使用 URL 编码

     HLS：

     ```
     POST <master>.m3u8
         {
             "adsParams": {
                "param1": "value1:",
                "param2": "value2:"
            }
         }
     ```

     DASH：

     ```
     POST <manifest>.mpd
         {
             "adsParams": {
                "param1": "value1:",
                "param2": "value2:"
            }
         }
     ```

对于服务器端报告，在收到玩家请求时对参数进行 MediaTailor 解码。对于客户端报告，它不会更改 JSON 负载中接收到的参数。 MediaTailor 向 ADS 发送以下请求：

```
https://my.ads.com/<path>?param1=value1:&param2=value2:
```

这样，`param1` 和 `param2` 键-值对将作为 ADS 请求中的第一类查询参数包含在内。

# MediaTailor 多个内容源的域变量
<a name="variables-domains"></a>

AWS Elemental MediaTailor **动态域变量允许您在配置中使用多个域名，例如 URL http://my-ads-server.com 的.com部分，以及玩家参数。my-ads-server**这样，您就可以在单一配置中使用多个内容来源或广告决策服务器 (ADS)。

 您可以将域变量与任何包含 URI 的参数一起使用：
+ `AdDecisionServerUrl`
+ `AdSegmentUrlPrefix`
+ `ContentSegmentUrlPrefix`
+ `LivePreroll.AdDecisionServerUrl`
+ `VideoContentSourceUrl`

 域变量与*配置别*名一起使用以执行动态变量替换。配置别名将一组别名和值映射到用于动态域配置的玩家参数。有关设置过程，请参见[创建和使用配置别名 MediaTailor](creating-configuration-aliases.md)。有关详细的参考信息，请参阅[MediaTailor 配置别名概述](configuration-aliases-overview.md)。

# MediaTailor 配置别名概述
<a name="configuration-aliases-overview"></a>

AWS Elemental MediaTailor 配置别名允许在 URL 域和其他支持的字段中进行动态变量替换。使用此功能可在会话初始化 URLs 期间使用多个域并进行动态配置。

## 使用案例
<a name="configuration-aliases-use-cases"></a>

配置别名可为以下场景启用复杂的多配置架构：
+ **地理路由：**使用特定地区的别名，根据观看者的位置将请求路由到不同的来源或广告服务器。有关实施指南，请参阅[CloudFront 源故障转移](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/high_availability_origin_failover.html)。
+ **基于内容的路由：**将不同的内容类型定向到专门的来源或处理管道。有关路由行为的配置，请参阅[为以下各项设置 CDN 路由行为 MediaTailor](cdn-routing-behaviors.md)。
+ **故障转移场景：**使用别名切换实现自动故障转移的备份源和广告服务器。有关实施的详细信息，请参见[MediaTailor 使用 MQAR 实现多区域弹性](media-quality-resiliency.md)和[规划您的 CDN 集成 AWS Elemental MediaTailor](planning-cdn-integration.md)。
+ **A/B 测试：**根据玩家参数路由流量，测试不同的广告服务器、来源或配置。有关负载测试指南，请参阅[ CloudFront 使用真实用户监控功能为 Amazon 准备和运行性能测试](https://aws.amazon.com/blogs/networking-and-content-delivery/prepare-and-run-performance-tests-for-amazon-cloudfront-with-real-user-monitoring/)。
+ **设备特定优化：**针对不同的设备类型或功能优化内容投放和广告投放。有关全面的指导，请参阅[使用 MediaTailor、 MediaPackage和 CDN 设置清单筛选](cdn-emp-manifest-filtering.md)。
+ **负载平衡：**使用动态路由在多个来源或广告服务器之间分配负载。有关实施指导，请参见[MediaTailor 使用 MQAR 实现多区域弹性](media-quality-resiliency.md)和[规划您的 CDN 集成 AWS Elemental MediaTailor](planning-cdn-integration.md)。

## 支持的字段
<a name="configuration-aliases-supported"></a>

您可以在以下配置字段中使用动态变量：
+ `VideoContentSourceUrl`
+ `AdDecisionServerUrl`
+ `LivePreroll.AdDecisionServerUrl`
+ `AdSegmentUrlPrefix`
+ `ContentSegmentUrlPrefix`
+ `TranscodeProfileName`
+ `SlateAdUrl`
+ `StartUrl`
+ `EndUrl`

以下各节介绍如何使用配置别名。

**Topics**
+ [使用案例](#configuration-aliases-use-cases)
+ [支持的字段](#configuration-aliases-supported)
+ [创建和使用](creating-configuration-aliases.md)
+ [流程示例](configuration-aliases-examples.md)

# 创建和使用配置别名 MediaTailor
<a name="creating-configuration-aliases"></a>

在开始使用域变量之前，需要为配置创建配置别名。在会话初始化时，您可以使用配置别名作为域替换变量。

**限制**  
使用配置别名时，请注意以下限制：
+ 域中使用的所有动态变量都必须定义为`ConfigurationAliases`动态变量。
+ 玩家参数变量前缀必须为。`player_params.`例如 `player_params.origin_domain`。
+ 对于处于临界状态 URLs (,,`ContentSegmentUrlPrefix`) 的域变量`VideoContentSourceUrl`，`AdSegmentUrlPrefix`别名值列表必须详尽无遗。
+ 如果请求的关键 URLs 域变量未指定动态变量或使用无效别名，则请求将失败，并显示 HTTP `400` 状态码。非关键字段（`SlateAdUrl`、`TranscodeProfileName`、bump URLs er）将记录警告，但不会使请求失败。

**缺少别名的后备行为**  
当找不到配置别名或配置别名无效时，将 MediaTailor 实现以下回退行为：
+ **域变量：**如果域变量别名缺失或无效，则请求将失败，并显示 HTTP 400 状态码。所有域变量都必须定义有效的别名。
+ **非域变量：**对于的非域部分中使用的变量 URLs （例如路径元素或查询参数），缺少别名会导致替换空字符串。
+ **配置验证： MediaTailor 验证**在配置创建和更新操作期间是否存在所有必需的别名。

## 步骤 1：创建配置别名
<a name="dynamic-domains-creating-configuration-alias"></a>

要使用 MediaTailor控制台创建用于域替换的配置别名，请执行以下步骤。

------
#### [ Console ]

**使用控制台创建配置别名**

1. 打开 MediaTailor 控制台，网址为[https://console.aws.amazon.com/mediatailor/](https://console.aws.amazon.com/mediatailor/)。

1. **在**配置页面的配置别名**部分，选择**添加玩家参数**。**

1. 在 P **layer 参数**中，输入要用作动态变量的玩家参数的名称。例如 `player_params.origin_domain`。

1. 对于**别名**，请输入要用于玩家参数的别名及其值。

1. 选择**确定**。

   AWS Elemental MediaTailor 在 “**配置别名**” 部分的表中显示新参数。

1. 重复上述步骤以添加更多播放器参数。

1. 选择**保存**。

------
#### [ API ]

**使用 API 创建配置别名**  
创建或更新 MediaTailor 配置时，请使用具有以下 JSON 结构的`ConfigurationAliases`参数：

```
{
                "ConfigurationAliases": {
                "player_params.origin_domain": {
                "pdx": "abc.mediapackage.us-west-2.amazonaws.com",
                "iad": "xyz.mediapackage.us-east-1.amazonaws.com"
                },
                "player_params.ad_type": {
                "customized": "abc12345",
                "default": "defaultAdType"
                }
                }
                }
```

------

## 步骤 2：在会话初始化中使用配置别名
<a name="dynamic-domains-using-configuration-alias"></a>

设置配置别名后，可以在会话初始化请求中将其用作域的替换变量。这使您能够动态配置会话的域。

**Example 基本配置别名示例**  
以下是包含配置别名和动态域变量的配置的基本示例：  

```
PUT /playbackConfiguration
{
    "Name": "aliasedConfig",
    "AdDecisionServerUrl": "https://abc.execute-api.us-west-2.amazonaws.com/ads?sid=[session.id]&ad_type=[player_params.ad_type]",
    "VideoContentSourceUrl": "https://[player_params.origin_domain].mediapackage.[player_params.region].amazonaws.com/out/v1/[player_params.endpoint_id]",
    "ConfigurationAliases": {
        "player_params.origin_domain": {
            "pdx": "abc",
            "iad": "xyz"
        },
        "player_params.region": {
            "pdx": "us-west-2",
            "iad": "us-east-1"
        },
        "player_params.endpoint_id": {
            "pdx": "abcd",
            "iad": "wxyz"
        },
        "player_params.ad_type": {
            "customized": "abc12345",
            "default": "defaultAdType"
        }
    }
}
```

**Example 使用别名进行会话初始化**  
使用上述配置，使用玩家变量和别名的会话初始化请求将类似于以下内容：  

```
POST index.m3u8
{
    "playerParams": {
        "origin_domain": "pdx",
        "region": "pdx",
        "endpoint_id": "pdx",
        "ad_type": "customized"
    }
}
```
MediaTailor 用配置别名配置中的映射值替换别名字符串。  
向 ADS 发出的请求将如下所示：  

```
https://abc.execute-api.us-west-2.amazonaws.com/ads?sid=[session.id]&ad_type=abc12345
```
向来源索取清单的请求将如下所示：  

```
https://abc.mediapackage.us-west-2.amazonaws.com/out/v1/abcd
```

# 带有 MediaTailor 使用示例的配置别名
<a name="configuration-aliases-examples"></a>

以下示例显示了如何使用配置别名的完整 MediaTailor 配置、带别名的会话初始化请求以及别名的处理流程。

**Example 使用别名完成配置**  
以下示例显示了包括配置别名和动态域变量的完整配置：  

```
PUT /playbackConfiguration
{
    "Name": "aliasedConfig",
    "AdDecisionServerUrl": "https://abc.execute-api.us-west-2.amazonaws.com/ads?sid=[session.id]&ad_type=[player_params.ad_type]",
    "VideoContentSourceUrl": "https://[player_params.origin_domain].mediapackage.[player_params.region].amazonaws.com/out/v1/[player_params.endpoint_id]",
    
    "AdSegmentUrlPrefix": "https://[player_params.ad_cdn_domain]/ads/",
    "ContentSegmentUrlPrefix": "https://[player_params.content_cdn_domain]/content/",
    "TranscodeProfileName": "[player_params.transcode_profile]",
    "SlateAdUrl": "https://[player_params.slate_domain]/slate/[player_params.slate_type].mp4",
    "StartUrl": "https://[player_params.tracking_domain]/start?session=[session.id]",
    "EndUrl": "https://[player_params.tracking_domain]/end?session=[session.id]",
    
    "ConfigurationAliases": {
        "player_params.origin_domain": {
            "pdx": "abc",
            "iad": "xyz"
        },
        "player_params.region": {
            "pdx": "us-west-2",
            "iad": "us-east-1"
        },
        "player_params.endpoint_id": {
            "pdx": "abcd",
            "iad": "wxyz"
        },
        "player_params.ad_type": {
            "customized": "abc12345",
            "default": "defaultAdType"
        },
        "player_params.ad_cdn_domain": {
            "pdx": "ads-west.cdn.example.com",
            "iad": "ads-east.cdn.example.com"
        },
        "player_params.content_cdn_domain": {
            "pdx": "content-west.cdn.example.com",
            "iad": "content-east.cdn.example.com"
        },
        "player_params.transcode_profile": {
            "mobile": "mobile_optimized",
            "desktop": "high_quality",
            "tv": "4k_profile"
        },
        "player_params.slate_domain": {
            "pdx": "slate-west.example.com",
            "iad": "slate-east.example.com"
        },
        "player_params.slate_type": {
            "standard": "default_slate",
            "branded": "brand_slate"
        },
        "player_params.tracking_domain": {
            "pdx": "tracking-west.example.com",
            "iad": "tracking-east.example.com"
        }
    }
}
```

**Example 使用别名进行会话初始化**  
以下示例显示了指定玩家变量和别名的会话初始化请求：  

```
POST master.m3u8
{
    "playerParams": {
        "origin_domain": "pdx",
        "region": "pdx", 
        "endpoint_id": "pdx",
        "ad_type": "customized",
        "ad_cdn_domain": "pdx",
        "content_cdn_domain": "pdx",
        "transcode_profile": "mobile",
        "slate_domain": "pdx",
        "slate_type": "branded",
        "tracking_domain": "pdx"
    }
}
```

**Example 参数处理流程**  
在以下示例中， MediaTailor 将别名字符串替换为配置别名中的映射值。处理后会产生以下请求：  
+ 广告请求：

  ```
  https://abc.execute-api.us-west-2.amazonaws.com/ads?sid=[session.id]&ad_type=abc12345
  ```
+ VideoContentSource 请求：

  ```
  https://abc.mediapackage.us-west-2.amazonaws.com/out/v1/abcd
  ```
+ AdSegmentUrlPrefix:

  ```
  https://ads-west.cdn.example.com/ads/
  ```
+ ContentSegmentUrlPrefix:

  ```
  https://content-west.cdn.example.com/content/
  ```
+ TranscodeProfileName:

  ```
  mobile_optimized
  ```
+ SlateAdUrl:

  ```
  https://slate-west.example.com/slate/brand_slate.mp4
  ```
+ StartUrl:

  ```
  https://tracking-west.example.com/start?session=[session.id]
  ```
+ EndUrl:

  ```
  https://tracking-west.example.com/end?session=[session.id]
  ```

# MediaTailor 向 ADS 传递参数
<a name="passing-paramters-to-the-ads"></a>

AWS Elemental MediaTailor 支持使用以下步骤在向 ADS 发出的 MediaTailor 请求中设置动态变量。
+ 有关查询参数支持的格式的信息，请参见[MediaTailor 参数参考和限制](parameter-comprehensive-reference.md)。
+ 有关配置别名和域变量，请参见[MediaTailor 配置别名概述](configuration-aliases-overview.md)。
+ 有关 ADS 请求的其他自定义设置，请参阅[高级用法](#variables-advanced-usage)。

**会话初始化方法**  
MediaTailor 支持多种会话初始化和参数传递方法：

1. **带有请求正文的 POST：**

   ```
   POST <master>.m3u8
   {
       "adsParams": {"param1": "value1", "param2": "value2"},
       "playerParams": {"param3": "value3"}
   }
   ```

1. **URL 中的查询参数：**

   ```
   GET <master>.m3u8?ads.param1=value1&ads.param2=value2&playerParams.param3=value3
   ```

**重要**  
在初始化时，只能指定一次参数。在转发之前，配置别名会解析为实际值。

**将会话和播放器信息传递到 ADS**

1. 与 ADS 合作，确定其回复广告查询所需的信息 AWS Elemental MediaTailor。

1. 在中创建使用满足 ADS MediaTailor 要求的模板 ADS 请求网址的配置。在 URL 中，包含静态参数和用于动态参数的占位符。在配置的 **Ad decision server (广告决策服务器)** 字段中输入您的模板 URL。

   在以下示例模板 URL 中，`correlation` 提供会话数据，`deviceType` 提供播放器数据：

   ```
   https://my.ads.server.com/path?correlation=[session.id]&deviceType=[player_params.deviceType]
   ```

1. 在播放器上，为 AWS Elemental MediaTailor 配置会话发起请求以便为播放器数据提供参数。在会话发起请求中包含您的参数，并在后续会话请求中省略它们。

   玩家为初始化会话而进行的调用类型决定了玩家（客户端）还是 MediaTailor （服务器）是否为会话提供广告跟踪报告。有关这两个选项的信息，请参阅[报告广告跟踪数据](ad-reporting.md)。

   根据您是需要服务器端还是客户端广告跟踪报告来进行以下类型的呼叫之一。在两个示例调用中，`userID` 适用于 ADS，`auth_token` 适用于源：
   + （选项）要求服务器端广告跟踪报告 — 在要发送 MediaTailor 到 ADS 的参数前面加上前缀。`ads`为您希望 MediaTailor 将其发送到源服务器的参数消除前缀：

     以下示例显示了 HLS 和 DASH 的传入请求。 AWS Elemental MediaTailor MediaTailor `deviceType`在向 ADS 发出的请求中使用，`auth_token`在对源服务器的请求中使用。

     HLS 示例：

     ```
     GET master.m3u8?ads.deviceType=ipad&auth_token=kjhdsaf7gh
     ```

     DASH 示例：

     ```
     GET manifest.mpd?ads.deviceType=ipad&auth_token=kjhdsaf7gh
     ```
   + （选项）调用客户端广告跟踪报告 — 为对象内部的 ADS 提供参数。`adsParams`

     HLS 示例：

     ```
     POST master.m3u8
         {
             "adsParams": {
                "deviceType": "ipad"
            }
         }
     ```

     DASH 示例：

     ```
     POST manifest.mpd
         {
             "adsParams": {
                "deviceType": "ipad"
            }
         }
     ```

当玩家发起会话时，将模板 ADS 请求网址中的变量 AWS Elemental MediaTailor 替换为会话数据和玩家的`ads`参数。它将剩余参数从播放器传递到源服务器。

**Example MediaTailor 带有广告变量的请求**  
以下示例显示了来自 AWS Elemental MediaTailor 的针对 ADS 和源服务器的调用（对应于上述播放器的会话初始化调用示例）。  
+ MediaTailor 使用会话数据和玩家的设备类型调用 ADS：

  ```
  https://my.ads.server.com/path?correlation=896976764&deviceType=ipad
  ```
+ MediaTailor 使用玩家的授权令牌调用源服务器。
  + HLS 示例：

    ```
    https://my.origin.server.com/master.m3u8?auth_token=kjhdsaf7gh
    ```
  + DASH 示例：

    ```
    https://my.origin.server.com/manifest.mpd?auth_token=kjhdsaf7gh
    ```

## 高级用法
<a name="variables-advanced-usage"></a>

您可以通过播放器和会话数据以多种方式自定义 ADS 请求。您只需要包含 ADS 主机名即可。

以下示例显示了一些可用来自定义请求的方法：
+ 连接播放器参数和会话参数以创建新参数。示例：

  ```
  https://my.ads.com?key1=[player_params.value1][session.id]
  ```
+ 使用播放器参数作为路径元素的一部分。示例：

  ```
  https://my.ads.com/[player_params.path]?key=value
  ```
+ 使用播放器参数传递路径元素和键本身，而不仅仅是值。示例：

  ```
  https://my.ads.com/[player_params.path]?[player_params.key1]=[player_params.value1]
  ```

# MediaTailor ADS 和起点的参数路由
<a name="parameter-routing-behavior"></a>

AWS Elemental MediaTailor routes 根据参数的前缀和用途将参数查询到不同的目的地。了解参数路由对于实现特定于原点的功能（例如使用时移查看）至关重要。 MediaPackage

**参数路由规则**  
MediaTailor 对查询参数使用以下路由规则：
+ **Origin 参数（无前缀）：**没有特定前缀的参数会传递到源服务器以实现特定于起源的功能
+ **ADS 参数（`ads.`前缀）：**前缀为的`ads.`参数发送到广告决策服务器
+ **清单参数（`manifest.`前缀）：**前缀为的参数用`manifest.`于 CDN 路由和授权

**Example 参数路由示例**  
以下会话初始化演示了参数路由：  

```
POST /v1/session/123456789/originId/index.m3u8
{
    "adsParams": {
        "param1": "value1",
        "param2": "value2"
    },
    "manifestParams": {
        "auth_token": "abc123"
    }
}
```
在本示例中：  
+ `param1`并`param2`被发送到 ADS
+ `auth_token`用于 CDN 路由和授权
+ 不带前缀的参数将被传递到源服务器

## 源服务器参数行为
<a name="origin-parameter-behavior"></a>

传递给源服务器的参数可启用特定于原点的功能，例如时移查看、内容筛选和身份验证。

**常见的原点参数用例**  
Origin 参数通常用于：
+ **时移查看：**`start`以及 MediaPackage 时移内容的`end`参数
+ **内容认证：**源服务器所需的身份验证令牌
+ **内容过滤：**控制返回哪些内容变体的参数
+ **特定于 Origin 的功能：**源服务器用于内容处理的任何参数

**重要**  
参数在会话初始化时处理，并在整个会话期间进行维护。要修改诸如时移窗口之类的参数，必须使用更新的值创建一个新的会话。

# MediaTailor 和 MediaPackage 时移观看集成
<a name="mediapackage-integration-param"></a>

AWS Elemental MediaTailor 可以将时移的观看参数传递给 MediaPackage 原点，以启用 startover 和 chack-up 查看功能。这种集成允许观众从较早的时间点开始观看直播内容。

**MediaPackage 时移观看参数**  
MediaPackage 支持以下可以传递 MediaTailor的时移查看参数：
+ `start`: Epoch 或 ISO 8601 时间戳定义时移清单的开头
+ `end`: Epoch 或 ISO 8601 时间戳定义时移清单的结尾
+ `time_delay`：将内容可用性延迟指定秒数
+ `manifest_window_seconds`: 请求比配置的窗口更短的清单

**Example MediaTailor 使用 MediaPackage 时移参数进行会话初始化**  
以下示例说明如何使用时移查看参数初始化会话：  

```
GET /v1/master/123456789/originId/index.m3u8?start=2024-08-26T10:00:00Z&end=2024-08-26T11:00:00Z
```
或者使用显式会话初始化：  

```
POST /v1/session/123456789/originId/index.m3u8
{
    "adsParams": {
        "param1": "value1"
    }
}
```
使用其他查询参数：  

```
?start=2024-08-26T10:00:00Z&end=2024-08-26T11:00:00Z
```

**会话期间的参数行为**  
时移观看参数具有特定的行为特征：
+ **会话初始化：**创建会话时会处理参数
+ **参数持久性：**在整个播放过程中，参数与会话保持关联
+ **初始化后不可变：**在活动会话期间无法更改参数
+ **需要新会话：**要修改时移窗口，请使用更新的参数值创建一个新会话

**MediaPackage 起步窗口要求**  
要使用时移查看 MediaPackage，请确保满足以下条件：

1. 在 MediaPackage 终端上配置启动窗口（最长 24 小时）

1. 确保您的 CDN 将必要的查询参数转发给 MediaPackage

1. 在玩家会话中使用一致的播放窗口以获得更好的 CDN 缓存

1. 验证开始和结束时间是否在配置的开始时间范围内

**重要**  
使用时移观看时，应在各个玩家会话中使用一致的播放窗口，而不是为每个观看者生成唯一的开始或结束时间。这样可以在 CDN 上获得更好的缓存，并避免潜在的限制。

有关 MediaPackage 时移查看配置和参数的完整信息，请参阅《*AWS Elemental MediaPackage 用户*指南》 AWS Elemental MediaPackage中的[时移视](https://docs.aws.amazon.com/mediapackage/latest/ug/time-shifted.html)图。

# MediaTailor 参数会话行为和持久性
<a name="parameter-session-behavior"></a>

AWS Elemental MediaTailor 在会话初始化时处理参数，并在整个会话生命周期中对其进行维护。了解会话行为对于实现动态参数场景至关重要。

**会话初始化方法**  
MediaTailor 支持多种使用参数进行会话初始化的方法：

1. **隐式会话初始化：**初始清单请求中包含的参数

   ```
   GET /v1/master/123456789/originId/index.m3u8?manifest.auth_token=abc123&start=2024-08-26T10:00:00Z
   ```

1. **显式会话初始化 (POST)：**请求正文中提供的参数

   ```
   POST /v1/session/123456789/originId/index.m3u8
   {
       "adsParams": {"param1": "value1"},
       "manifestParams": {"auth_token": "abc123"}
   }
   ```

1. **显式会话初始化 (GET)：**作为查询参数提供的参数

   ```
   GET /v1/session/123456789/originId/index.m3u8?ads.param1=value1&manifestParams.auth_token=abc123
   ```

**参数持久性和不可变性**  
MediaTailor 参数行为遵循以下规则：
+ **一次性规范：**参数只能在会话初始化时指定一次
+ **整个会话的持久性：**参数在整个会话中都保持不变
+ **初始化后不可变：**创建会话后无法修改参数
+ **配置别名解析：**在转发到目的地之前，别名会被解析为实际值

**参数修改场景**  
要在播放期间修改参数，请执行以下操作：
+ **创建新会话：**使用更新的参数值初始化新会话
+ **玩家过渡：**将玩家无缝过渡到新会话
+ **参数继承：继承**未更改的参数以保持一致性

**Example 修改时移参数**  
要从 1 小时窗口更改为 2 小时窗口，请执行以下操作：  

1. 当前会话：`start=2024-08-26T10:00:00Z&end=2024-08-26T11:00:00Z`

1. 创建新会话：`start=2024-08-26T10:00:00Z&end=2024-08-26T12:00:00Z`

1. 将玩家过渡到新的会话 URL

**重要**  
针对单个会话的多个多变体播放列表请求不会在第一个请求之后更新参数。参数在会话持续时间内保持不可变。

# MediaTailor 参数参考和限制
<a name="parameter-comprehensive-reference"></a>

在配置动态广告变量之前，请了解适用于所有 MediaTailor 配置的参数格式要求和限制。

AWS Elemental MediaTailor 提供了有关参数字符限制、长度限制以及清单查询参数和 ADS 参数支持的格式的全面信息。

## 清单查询参数字符限制
<a name="manifest-parameter-character-restrictions"></a>

清单查询参数支持特定字符，并且具有定义的长度限制。

**支持的字符（没有 URL 编码）**  
您可以直接在清单查询参数中使用以下字符：
+ 字母数字字符（A-Z、a-z、0-9）
+ 时期 (.)
+ 连字符 (-)
+ 下划线 (\$1)
+ 反斜杠 (\$1)

**支持的带有 URL 编码的字符**  
URL 编码时支持以下特殊字符：
+ 时期 (.) = %2E
+ 短划线 (-) = %2D
+ 下划线 (\$1) = %5F
+ 百分比 (%) = %25
+ 波浪号 (\$1) = %7E
+ 正斜杠 (/) = %2F
+ 星号 (\$1) = %2A
+ 等于 (=) = %3D
+ 问题 (？) = %3F

**网址编码支持**  
MediaTailor 当你在 URL 编码中使用百分号 (%) 时（例如，hello%20world = hello world = hello world），则支持该符号。您可以使用任何 URL 编码字符，只要它们是符合 HTTP 规范的有效网址编码即可。

**不支持的字符**  
如果没有 URL 编码，则不能在清单查询参数中使用以下字符：`:`、`?`、`&`、`=``%`、`/`（正斜杠）。

**重要**  
MediaTailor 不支持双字符，例如%%% 或 ==。由于字符限制，您不能使用 full URLs 作为清单查询参数值。

**长度限制**  
所有清单查询参数（键和值的组合）的总长度不得超过 2000 个字符。

## ADS 参数长度限制
<a name="ads-parameter-limitations"></a>

以下长度限制适用于向 ADS 发出的请求中使用的参数：
+ **ADS 参数名称**：最多 10,000 个字符
+ **ADS 参数值**：最多 25,000 个字符
+ **广告网址**：最多 25,000 个字符

# MediaTailor 参数疑难解答指南
<a name="parameter-troubleshooting"></a>

AWS Elemental MediaTailor 为解决中与参数相关的常见问题提供了指导 MediaTailor，包括字符限制、URL 编码问题和配置别名错误。

## 字符限制错误
<a name="parameter-character-restriction-errors"></a>

包含不支持的字符的参数值可能会导致错误或意外行为。

**常见症状**  
以下症状可能表示存在字符限制问题：
+ 参数未出现在清单中 URLs
+ 会话初始化期间的 HTTP 400 错误
+ 参数值被截断或损坏
+ 由于格式错误，ADS 请求失败 URLs

**解决步骤**  
要解决字符限制错误，请执行以下操作：

1. 查看不支持的字符的参数值：`:`、、`?`、`&`、`=`、`%` `/`

1. 对特殊字符应用正确的 URL 编码（请参阅）[MediaTailor 参数参考和限制](parameter-comprehensive-reference.md)

1. 避免使用双字符，例如`%%%`或 `==`

1. 如果 URLs 无法使用完整参数格式，请考虑使用其他参数格式

**Example 网址编码示例**  
而不是使用：  

```
manifest.redirect_url=https://example.com/path?param=value
```
使用 URL 编码格式：  

```
manifest.redirect_url=https%3A%2F%2Fexample.com%2Fpath%3Fparam%3Dvalue
```

## 长度限制错误
<a name="parameter-length-limitation-errors"></a>

超过长度限制的参数可能会被截断或导致错误。

**长度限制**  
适用以下长度限制（有关完整[MediaTailor 参数参考和限制](parameter-comprehensive-reference.md)详细信息，请参阅）：
+ 清单查询参数（总计）：2000 个字符
+ ADS 参数名称：10,000 个字符
+ ADS 参数值：25,000 个字符
+ 广告 URLs：25,000 个字符

**解决策略**  
要处理长度限制，请执行以下操作：

1. 尽可能使用较短的参数名称和值

1. 将较大的参数值拆分为多个较小的参数

1. 使用配置别名将短别名映射到较长的值（请参阅）[MediaTailor 配置别名概述](configuration-aliases-overview.md)

1. 考虑使用外部存储来存储带有参数引用的大型数据

## 配置别名错误
<a name="parameter-configuration-alias-errors"></a>

配置别名问题可能导致 HTTP 400 错误或参数值意外。

**常见的配置别名错误**  
配置别名通常会出现以下错误：
+ HTTP 400 错误：别名值缺失或无效
+ 域变量无法正确解析
+ 玩家参数未被替换为别名值

**解决方案清单**  
要解决配置别名错误，请执行以下操作：

1. 验证所有域变量均定义为 `ConfigurationAliases`

1. 确保玩家参数变量使用`player_params.`前缀

1. 确认关键域变量的别名值列表是详尽无遗的 URLs (`VideoContentSourceUrl`,`AdSegmentUrlPrefix`,`ContentSegmentUrlPrefix`)

1. 检查会话初始化请求是否指定了有效的别名值

1. 验证 ConfigurationAliases 参数的 JSON 结构

有关详细的故障排除指南，请参阅[MediaTailor 配置别名疑难解答指南](configuration-aliases-troubleshooting.md)。

**Example 配置别名验证**  
确保您的配置包括所有必需的别名：  

```
"ConfigurationAliases": {
    "player_params.origin_domain": {
        "pdx": "abc.mediapackage.us-west-2.amazonaws.com",
        "iad": "xyz.mediapackage.us-east-1.amazonaws.com"
        // Must include all possible values used in session initialization
    }
}
```

## 参数处理流程问题
<a name="parameter-processing-flow-issues"></a>

了解参数处理流程有助于解决参数转发和转换问题。

**参数处理顺序**  
MediaTailor 按以下顺序处理参数：

1. 会话初始化参数验证

1. 配置别名解析（如果适用）

1. 参数过滤（ADS 与来源 vs 清单）

1. URL 编码和格式

1. 参数应用于 URLs

**调试参数流**  
要调试参数处理问题，请执行以下操作：

1. 验证在会话初始化中是否正确指定了参数

1. 检查配置别名是否解析为预期值

1. 确认参数以正确的方式显示 URLs （清单、广告、来源）

1. 验证 URL 编码是否正确应用

**Example 参数流示例**  
会话初始化：  

```
POST master.m3u8
{
    "playerParams": {"origin_domain": "pdx"},
    "manifestParams": {"test": "123"}
}
```
在别名解析和处理之后：  
+ 起源请求：`https://abc.mediapackage.us-west-2.amazonaws.com/out/v1/abcd`
+ 清单网址：`/v1/master/.../index.m3u8?aws.sessionId=session&test=123`

## 安全性注意事项和最佳实践
<a name="parameter-security-considerations-troubleshooting"></a>

MediaTailor 为参数处理实施安全措施，以防止出现常见的安全问题。

**安全措施**  
MediaTailor 实施了以下安全措施：

1. 防止数据库膨胀的输入大小限制

1. 对用户输入进行适当的编码和审查

1. 对输入进行网址编码，以防止响应损坏

**最佳实践**  
请按照以下最佳实践进行安全参数处理：
+ 发送前在客户端验证参数值
+ 使用配置别名限制可能的参数值
+ 避免在参数中包含敏感信息
+ 监控参数使用情况，以发现异常模式
+ 将参数值保持在建议的长度限制之内

# MediaTailor 配置别名疑难解答指南
<a name="configuration-aliases-troubleshooting"></a>

AWS Elemental MediaTailor 为常见的配置别名问题和错误场景提供系统的故障排除指导。

## 配置别名验证错误
<a name="configuration-alias-validation-errors"></a>

当配置别名丢失或无效时， MediaTailor 会返回特定的错误响应以帮助识别问题。

**常见的错误场景**  
下表描述了常见的配置别名错误及其解决步骤：


| 错误 | 原因 | 解决方案 | 
| --- | --- | --- | 
| HTTP 400：玩家参数别名无效 | 在中找不到玩家参数值 ConfigurationAliases | 验证玩家参数值是否作为键存在于相应的 ConfigurationAliases 映射中 | 
| HTTP 400：缺少所需的配置别名 | 使用没有相应 ConfigurationAliases条目的域变量 | 将缺少的玩家参数添加到 ConfigurationAliases 包含所有必需的别名映射中 | 
| HTTP 400：配置验证失败 | ConfigurationAliases 结构格式错误或不完整 | 验证 JSON 结构并确保所有域变量都有相应的别名 | 
| 中的空字符串替换 URLs | 未找到非域变量别名 | 添加缺失的别名映射或在中提供默认值 ConfigurationAliases | 

**验证核对清单**  
使用以下清单来验证您的配置别名设置：

1. **域变量覆盖率：**确保域部分中使用的所有变量 URLs 都有相应的 ConfigurationAliases 条目

1. **别名完整性：**验证所有可能的玩家参数值是否都作为键包含在别名映射中

1. **JSON 结构：**验证 ConfigurationAliases JSON 的格式和嵌套是否正确

1. **参数命名：**确认所有玩家参数都使用前`player_params.`缀

1. **值一致性：**确保别名值对于其预期用途（URLs、配置文件名称等）有效

## 调试配置别名解析
<a name="configuration-alias-debugging"></a>

按照这种系统的方法来调试配置别名解析问题。

**Step-by-step 调试方法**  
使用以下步骤来识别和解决配置别名问题：

**配置别名调试程序**

1. **验证配置结构：**确认您的播放配置包括格式正确的内容 ConfigurationAliases

   ```
   {
       "ConfigurationAliases": {
           "player_params.example_param": {
               "alias1": "value1",
               "alias2": "value2"
           }
       }
   }
   ```

1. **检查玩家参数格式：**确保会话初始化包括格式正确的玩家参数

   ```
   {
       "playerParams": {
           "example_param": "alias1"
       }
   }
   ```

1. **验证别名映射：**确认玩家参数值 (“alias1") 作为键存在于映射中 ConfigurationAliases 

1. **使用简单配置进行测试：**从最低配置开始以找出问题

1. **监控错误响应：**检查 MediaTailor错误响应中是否有特定的验证消息

1. **验证已解决 URLs：**确认最终解决方案有效 URLs 且可访问

## 配置别名最佳实践
<a name="configuration-alias-best-practices"></a>

请遵循这些最佳实践，以确保可靠的配置别名实现。

**安全注意事项**  
使用配置别名时，请实施以下安全措施：
+ **输入验证：**在别名解析中使用所有玩家参数值之前，请先对其进行验证
+ **别名值清理：**确保别名值仅包含预期的字符和格式
+ **域名限制：**将域别名限制为可信、受控的域名
+ **访问控制：**仅限授权人员修改配置

**性能优化**  
使用以下建议优化配置别名性能：
+ **尽量减少别名数：**仅使用必要的别名以减少处理开销
+ **高效命名：**对别名和参数使用清晰、一致的命名约定
+ **默认值：**为常见用例提供合理的默认别名
+ **配置缓存：**利用 MediaTailor配置缓存提高性能

**维护和监控**  
通过以下做法保持可靠的配置别名操作：
+ **定期验证：**定期验证所有别名映射是否为最新且功能正常
+ **错误监控：**监控与别名缺失或无效相关的 HTTP 400 错误
+ **文档：**保持所有别名映射及其用途的清晰文档
+ **测试程序：**对所有别名组合实施全面测试

# MediaTailor 清单查询参数
<a name="manifest-query-parameters"></a>

AWS Elemental MediaTailor 处理用于不同目的的查询参数：用于 CDN 路由和授权的清单查询参数，以及可用于源特定功能的其他查询参数。

AWS Elemental MediaTailor 保留会话初始化的查询参数并将其附加到个性化清单 URLs 和其他资产。当您在客户端播放器之间有内容分发网络 (CDN) 时 MediaTailor ，请使用此功能。

当您的 CDN 需要以下内容的查询参数时，请使用清单查询参数：
+ 动态路由到不同的 MediaTailor 端点
+ 令牌授权

**客户端行为与 CDN 行为**  
MediaTailor 为客户端报告端点添加查询参数，但不会为 CDN 分段附加查询参数。更新后的功能为各种 MediaTailor 资产的查询参数提供了更全面的支持，增强了 CDN 路由和授权用例的灵活性。

MediaTailor 为客户端报告端点添加查询参数，但它不会为 CloudFront （或其他 CDN）细分追加查询参数。

要使用参数保存，请联系 [AWS S](https://aws.amazon.com/premiumsupport/) upport，请求启用清单查询参数通过。

在 HLS 和 DASH 之间，以及显式和隐式会话初始化之间，行为会有所不同。以下主题介绍如何配置会话初始化请求，以便将参数 MediaTailor 传递到清单：

# MediaTailor 原点的查询参数处理
<a name="origin-query-parameters"></a>

AWS Elemental MediaTailor 根据查询参数的用途，对查询参数的处理方式有所不同。清单查询参数（前缀为`manifest.`）用于 CDN 路由和授权，而其他查询参数可用于源特定功能。

**时移观看 MediaPackage**  
要使用时移查看功能 MediaPackage，您可以在请求中包含`start`和`end`参数。这些参数定义了特定的内容窗口，用于从头到尾查看和追赶查看。

**Example 时移观看请求**  
在清单请求中加入开始和结束参数，以便进行时移查看：  

```
GET /v1/master/111122223333/originId/index.m3u8?start=2024-08-26T10:00:00Z&end=2024-08-26T11:00:00Z
```

**会话期间的参数行为**  
查询参数在会话初始化时处理。对于时移观看或其他特定于原点的功能：
+ **会话初始化：**在初始清单请求中包含必需的参数
+ **参数持久性：**参数与会话相关联，并在整个播放过程中保持不变
+ **更改参数：**要修改时移窗口或其他参数，请使用更新的值创建一个新会话

**重要**  
查询参数的具体处理取决于您的来源配置和内容来源支持的参数。要进行 MediaPackage 集成，请确保您的 CDN 已配置为转发必要的查询参数，如中所述。[配置基本查询参数](mediapackage-integration.md#mediapackage-query-strings)

# MediaTailor 参数字符限制和 URL 编码
<a name="manifest-query-parameters-character-restrictions"></a>

AWS Elemental MediaTailor 支持清单查询参数中的特定字符。您可以对特殊字符使用 URL 编码。

**支持的带有 URL 编码的字符**  
URL 编码支持以下特殊字符：
+ 时期 (.) = %2E
+ 短划线 (-) = %2D
+ 下划线 (\$1) = %5F
+ 百分比 (%) = %25
+ 波浪号 (\$1) = %7E
+ 正斜杠 (/) = %2F
+ 星号 (\$1) = %2A
+ 等于 (=) = %3D
+ 问题 (？) = %3F

**网址编码支持**  
MediaTailor 当你在 URL 编码中使用百分号 (%) 时（例如，hello%20world = hello world = hello world），则支持该符号。您可以使用任何 URL 编码字符，只要它们是符合 HTTP 规范的有效 URL 编码即可。

**重要**  
MediaTailor 不支持双字符，例如%%% 或 ==。

**安全注意事项**  
MediaTailor 为参数处理实现了以下安全措施：

1. 防止数据库膨胀的输入大小限制

1. 对用户输入进行适当的编码和审查

1. 对输入进行网址编码，以防止响应损坏

**Topics**
+ [来源查询参数](origin-query-parameters.md)
+ [MediaTailor字符限制](manifest-query-parameters-character-restrictions.md)
+ [MediaTailorHLS 隐式会话](manifest-query-parameters-hls-implicit-session-initialization.md)
+ [MediaTailor DASH 隐式会话](manifest-query-parameters-dash-implicit-session-initialization.md)
+ [MediaTailor 显式会话初始化](manifest-query-parameters-hls-and-dash-explicit-session-initialization.md)
+ [MediaTailor特定于协议的行为](manifest-query-parameters-protocol-differences.md)
+ [MediaTailor 内容分发网络集成](manifest-query-parameters-cdn-integration.md)

# MediaTailor HLS 隐式会话初始化
<a name="manifest-query-parameters-hls-implicit-session-initialization"></a>

AWS Elemental MediaTailor 如果您的请求包含带有密钥的查询参数，则在 MediaTailor 资源链接中包含查询参数`manifest.*`。以下示例显示了这种请求格式：

```
GET /v1/master/111122223333/originId/index.m3u8?manifest.test=123&other=456
```

链接不包含前`manifest.`缀。

**HLS 中的参数应用**  
对于 HLS 隐式会话，将参数 MediaTailor 应用于清单层次结构中的以下位置：
+ 多变体播放列表 URLs
+ 媒体播放列表 URLs
+ 内容细分 URLs
+ 广告细分 URLs
+ HLS 初始化 URLs

**Example 多变播放列表**  
以下示例显示了如何在多变体播放列表的网址中 MediaTailor 包含查询参数：  

```
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:LANGUAGE="eng",AUTOSELECT=YES,FORCED=NO,TYPE=SUBTITLES,URI="../../../manifest/111122223333/originId/session/1.m3u8?test=123",GROUP-ID="subtitles",DEFAULT=YES,NAME="caption_1"
#EXT-X-STREAM-INF:CODECS="avc1.640029,mp4a.40.2",AVERAGE-BANDWIDTH=2525657,RESOLUTION=960x540,SUBTITLES="subtitles",FRAME-RATE=29.97,BANDWIDTH=2665212
../../../manifest/111122223333/originId/session/0.m3u8?test=123
```

**Example 媒体播放列表**  
以下示例显示了如何在中 MediaTailor 包含内容分段 URLs的查询参数：  

```
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:28716269
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXTINF:6.006,
https://origin.com/contentSegment_1.ts?originQueryParam=foo&test=123
#EXT-X-DISCONTINUITY
#EXTINF:6.006,
../../../../segment/111122223333/originId/session/0/2?test=123
```

# MediaTailor DASH 隐式会话初始
<a name="manifest-query-parameters-dash-implicit-session-initialization"></a>

AWS Elemental MediaTailor 为客户端创建会话，并在客户端在没有会话的情况下发出清单请求时使用查询参数重定向该会话。以下示例显示了这种请求格式：

```
GET /v1/dash/111122223333/originId/index.mpd?manifest.test=123&other=456
```

MediaTailor 为客户端创建会话并使用查询参数重定向该会话：

```
/v1/dash/111122223333/originId/index.mpd?sessionId=session&test=123
```

**DASH 中的参数应用**  
DASH 清单响应包括不同位置的查询参数，包括内容细分、广告细分和初始化 URLs。 MediaTailor 将参数应用于以下内容：
+ DASH 清单位置元素
+ SegmentTemplate 初始化属性
+ SegmentTemplate 媒体属性
+ 内容细分 URLs
+ 广告细分 URLs

当客户端发出请求时，会使用类似于以下示例的 DASH 清单进行 MediaTailor 响应。第一个句点是内容周期，因此 MediaTailor 不要在那里插入清单查询参数。在第二个时段（即广告时段）中，将清单查询参数 MediaTailor插入`SegmentTemplate`元素的`initialization`属性和`media`属性中。该`Location`元素还具有清单查询参数。

```
<?xml version="1.0" encoding="UTF-8"?>
<MPD availabilityStartTime="2018-07-27T09:48:23.634000+00:00" id="201" minBufferTime="PT30S" minimumUpdatePeriod="PT15S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2023-02-14T23:37:43" suggestedPresentationDelay="PT25.000S" timeShiftBufferDepth="PT56.997S" type="dynamic" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd">
    <BaseURL>https://origin.com/contentSegments/</BaseURL>
    <Location>https://mediatailor.com/v1/dash/111122223333/originId/index.mpd?test=123&aws.sessionId=session</Location>
    <Period duration="PT29.963S" id="28737823" start="PT143732873.178S">
        <AdaptationSet bitstreamSwitching="true" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
            <Representation bandwidth="2200000" codecs="avc1.640029" frameRate="30000/1001" height="540" id="1" width="960">
                <SegmentTemplate initialization="index_video_7_0_init.mp4?m=1611174111" media="index_video_7_0_$Number$.mp4?m=1611174111" presentationTimeOffset="4311986195351" startNumber="28737828" timescale="30000">
                    <SegmentTimeline>
                        <S d="180180" t="4311986911066"/>
                        <S d="3003" t="4311987091246"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
        </AdaptationSet>
    </Period>
    <Period id="28737829_1" start="PT39925H48M23.141S">
        <BaseURL>https://mediatailor.com/v1/dashsegment/111122223333/originId/session/28737829/28737829_1/</BaseURL>
        <AdaptationSet bitstreamSwitching="false" frameRate="30000/1001" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
            <SegmentTemplate startNumber="1" timescale="90000"/>
            <Representation bandwidth="2200000" codecs="avc1.64001f" height="540" id="1" width="960">
                <SegmentTemplate initialization="asset_540_2_0init.mp4?test=123" media="asset_540_2_0_$Number%09d$.mp4?test=123" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="87087" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
        </AdaptationSet>
    </Period>
</MPD>
```

# MediaTailor HLS 和 DASH 显式会话初始化
<a name="manifest-query-parameters-hls-and-dash-explicit-session-initialization"></a>

AWS Elemental MediaTailor 在多变播放列表中包含 a `manifestParams` s query 参数，并在客户端发出显式会话初始化请求时的响应 URLs 中进行跟踪。

**会话初始化方法**  
对于显式会话初始化，你可以使用带有请求正文的 POST 或带有查询参数的 GET：

1. **带有请求正文的 POST：**

   ```
   POST /v1/session/111122223333/originId/index.m3u8
   {
       "adsParams": {"param1": "value1", "param2": "value2", "param3": "value3"},
       "manifestParams": {"test": "123"}
   }
   ```

1. **使用查询参数获取：**

   ```
   GET /v1/session/111122223333/originId/index.m3u8?ads.param1=value1&ads.param2=value2&manifestParams.test=123
   ```

**Example 会话初始化请求**  

```
POST /v1/session/111122223333/originId/index.m3u8
{
    "adsParams": {
        "param1": "value1",
        "param2": "value2",
        "param3": "value3"
    },
    "manifestParams": { 
        "test": "123"
    },
    "reportingMode": "client"
}
```

**Example 清单和追踪响应**  

```
{
    "manifestUrl": "/v1/master/111122223333/originId/index.m3u8?aws.sessionId=session&test=123",
    "trackingUrl": "/v1/tracking/111122223333/originId/session?test=123"
}
```

会话的清单响应的具体内容与前面描述`manifestParams`的隐式会话初始化工作流程 MediaTailor URLs 类似。关键区别在于，显式会话初始化的清单参数不是以开头的`manifest.`。

清单查询参数是不可变的，您只能在会话初始化时进行设置。如果客户端为单个会话发出多个多变体播放列表请求，则 MediaTailor 不会在第一个请求之后更新清单查询参数。

**参数处理流程**  
在初始化时，只能指定一次参数。在转发之前，配置别名会解析为实际值。例如：`ad_type=abc12345`根据 ConfigurationAliases配置`player_params.ad_type=customized`解析为。

# MediaTailor 特定于协议的参数行为
<a name="manifest-query-parameters-protocol-differences"></a>

AWS Elemental MediaTailor 对于 HLS 和 DASH 协议，对清单查询参数的处理方式有所不同。每种协议类型都有特定的应用位置和处理方法。

**HLS 与 DASH 参数处理对比**  
下表比较了如何 MediaTailor 处理 HLS 和 DASH 协议中的清单查询参数：


| 方面 | HLS 行为 | 达世币行为 | 
| --- | --- | --- | 
| 参数应用 | 直接应用于清单 URLs 和区段 URLs | 应用于位置元素、 SegmentTemplate 属性和区段 URLs | 
| 清单层次结构 | 多变体播放列表 → 媒体播放列表 → 片段 | MPD → 时期 AdaptationSets → 陈述 | 
| 初始化 URLs | 存在时应用于 HLS 初始化 URLs  | 应用于 SegmentTemplate 初始化属性 | 
| 会话处理 | 播放列表更新期间保留的参数 | MPD 位置元素中包含的用于会话连续性的参数 | 
| 广告细分处理 | 应用于媒体播放列表 URLs 中的广告区段 | 应用于广告周期 SegmentTemplate 媒体属性 | 

**参数应用程序位置**  
MediaTailor 将清单查询参数应用于以下位置：

## HLS 参数应用程序
<a name="hls-parameter-application"></a>

对于 HLS 流， MediaTailor 将清单查询参数应用于：
+ **多变播放列表 URLs：**参数附加到媒体播放列表引用中
+ **媒体播放列表 URLs：**参数包含在媒体播放列表的片段 URLs 中
+ **内容分段 URLs：**所有内容区段都包含清单查询参数
+ **广告细分 URLs：**广告区段接收用于 CDN 路由和授权的参数
+ **HLS 初始化 URLs：**Init 分段包含流中存在的参数
+ **Slate 片段 URLs：**Slate 内容包括用于一致 CDN 行为的参数

**Example HLS 参数应用示例**  
鉴于会话初始化：  

```
GET /v1/master/123456789/originId/index.m3u8?manifest.auth_token=abc123&manifest.region=us-west
```
多变播放列表包含媒体播放列表参考中的参数：  

```
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=2665212,RESOLUTION=960x540
../../../manifest/123456789/originId/session/0.m3u8?auth_token=abc123&region=us-west
```
媒体播放列表包含片段中的参数 URLs：  

```
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:7
#EXTINF:6.006,
https://origin.com/segment1.ts?auth_token=abc123&region=us-west
#EXTINF:6.006,
../../../../segment/123456789/originId/session/0/2?auth_token=abc123&region=us-west
```

## DASH 参数应用程序
<a name="dash-parameter-application"></a>

对于 DASH 直播， MediaTailor 将清单查询参数应用于：
+ **MPD 位置元素：**位置元素包括清单刷新请求的参数
+ **SegmentTemplate 初始化属性：**Init 段 URLs 包含参数
+ **SegmentTemplate 媒体属性：**媒体片段 URL 模板包含参数
+ **内容区段 URLs：**根据模板生成的所有内容区段都包含参数
+ **广告细分 URLs：**广告周期细分包含 CDN 集成的参数
+ **服务器端举报重定向：**302 重定向到广告细分会保留参数

**Example DASH 参数应用示例**  
鉴于会话初始化：  

```
GET /v1/dash/123456789/originId/index.mpd?manifest.auth_token=abc123&manifest.region=us-west
```
DASH 清单包含多个位置的参数：  

```
<MPD>
    <Location>https://mediatailor.com/v1/dash/123456789/originId/index.mpd?auth_token=abc123&region=us-west&aws.sessionId=session</Location>
    <Period>
        <AdaptationSet>
            <Representation>
                <SegmentTemplate 
                    initialization="init.mp4?auth_token=abc123&region=us-west" 
                    media="segment_$Number$.mp4?auth_token=abc123&region=us-west"/>
            </Representation>
        </AdaptationSet>
    </Period>
</MPD>
```

# MediaTailor CDN 集成和参数路由
<a name="manifest-query-parameters-cdn-integration"></a>

AWS Elemental MediaTailor 清单查询参数支持复杂的 CDN 集成场景。您可以将它们用于动态路由、授权和负载平衡。

**CDN 路由用例**  
受益于清单查询参数的常见 CDN 集成场景包括：
+ **地理路由：**根据查看者的位置将请求路由到特定区域的 MediaTailor 终端节点
+ **基于令牌的授权：**通过 CDN 将授权令牌传递给， MediaTailor 以实现安全的内容访问
+ **负载平衡：**使用 CDN 路由逻辑在多个 MediaTailor 端点之间分配流量
+ **A/B 测试：**将不同的用户分段路由到不同的 MediaTailor 配置进行测试
+ **设备特定优化：**根据设备类型或功能路由请求

**在 CDN 层之间保留参数**  
MediaTailor 确保在多个 CDN 层和请求类型中保留清单查询参数：

1. **初始请求：**参数是从会话初始化请求中提取的

1. **清单生成：**参数应用于清单 URLs 中的所有相关内容

1. **分段请求：**所有分段中都包含参数， URLs 以实现一致的 CDN 行为

1. **广告插入：在广告插入**和区段替换期间会保留参数

**Example CDN 授权流程**  
以下示例演示了使用清单查询参数的完整的 CDN 授权流程：  

1. 客户端请求以授权令牌出现：

   ```
   GET https://cdn.example.com/mediatailor/v1/master/123456789/originId/index.m3u8?manifest.auth_token=jwt_token_here&manifest.user_id=12345
   ```

1. CDN MediaTailor 使用以下参数将请求转发给：

   ```
   GET https://mediatailor.amazonaws.com/v1/master/123456789/originId/index.m3u8?manifest.auth_token=jwt_token_here&manifest.user_id=12345
   ```

1. MediaTailor 生成将参数应用于所有内容的清单 URLs：

   ```
   #EXTM3U
   #EXT-X-STREAM-INF:BANDWIDTH=2665212
   ../../../manifest/123456789/originId/session/0.m3u8?auth_token=jwt_token_here&user_id=12345
   ```

1. 后续的分段请求包括用于 CDN 授权的参数：

   ```
   GET https://cdn.example.com/mediatailor/segment/123456789/originId/session/0/1?auth_token=jwt_token_here&user_id=12345
   ```

# 报告广告跟踪数据
<a name="ad-reporting"></a>

MediaTailor 提供了两个选项，用于跟踪和报告观众观看了多少广告。在服务器端广告报告方法中， MediaTailor 跟踪广告并直接向广告服务器发送信标（跟踪信号）。或者，在客户端跟踪方法中，客户端玩家（用户的设备）跟踪广告并将信标发送到广告服务器。播放会话中使用的广告报告类型取决于玩家在播放会话中发起会话的具体请求 MediaTailor。

有关使用动态变量向广告服务器传递会话和玩家数据的信息，请参阅[MediaTailor ADS 请求的动态广告变量](variables.md)。有关会话初始化参数的详细信息，请参见[MediaTailor 清单查询参数](manifest-query-parameters.md)。

**Topics**
+ [MediaTailor 服务器端广告跟踪和报告](ad-reporting-server-side.md)
+ [客户端广告跟踪](ad-reporting-client-side.md)

# MediaTailor 服务器端广告跟踪和报告
<a name="ad-reporting-server-side"></a>

AWS Elemental MediaTailor 默认为服务器端报告，用于全面的广告跟踪和监测。借助服务器端报告，当播放器请求清单中的广告 URL 时，此服务会直接将广告使用情况报告至广告跟踪 URL。在播放器使用初始化播放会话后 MediaTailor，您或该玩家无需进一步输入即可执行服务器端报告。在播放每个广告时， MediaTailor 会向广告服务器发送信标，以报告广告的浏览量。 MediaTailor 为广告的开头和以四分位数为单位的广告进度发送信标：第一个四分位数、中点、第三个四分位数和广告完成量。

**执行服务器端广告报告**
+ 在播放器中，根据您的协议，使用以下格式之一的请求初始化新的 MediaTailor 播放会话：
  + 示例：HLS 格式

    ```
    GET <mediatailorURL>/v1/master/<hashed-account-id>/<origin-id>/<asset-id>?ads.<key-value-pairs-for-ads>&<key-value-pairs-for-origin-server>
    ```
  + 示例：DASH 格式

    ```
    GET <mediatailorURL>/v1/dash/<hashed-account-id>/<origin-id>/<asset-id>?ads.<key-value-pairs-for-ads>&<key-value-pairs-for-origin-server>
    ```

  这些键值对是广告跟踪的动态目标参数。有关向请求添加参数的信息，请参阅 [MediaTailor ADS 请求的动态广告变量](variables.md)。

AWS Elemental MediaTailor 使用清单 URL 响应请求。清单包含 URLs 媒体清单。媒体清单包含广告分段请求的嵌入式链接。

**注意**  
当在跟踪网址中 MediaTailor 遇到双斜杠 (//) 时，它会将斜杠折叠为一个 (/)。

当玩家从广告区段网址（`/v1/segment`路径）请求播放时， AWS Elemental MediaTailor 会通过广告跟踪向广告服务器发送相应的信标 URLs。同时，此服务会将重定向发送到实际的 `*.ts` 广告分段。广告区段要么位于 MediaTailor 存储转码广告的 Amazon CloudFront 分发中，要么位于您缓存广告的内容分发网络 (CDN) 中。

以下各节提供了有关使用服务器端广告跟踪的 MediaTailor更多信息。

**Topics**
+ [SGAI 服务器端跟踪](ad-reporting-server-side-sgai.md)
+ [信标词汇表](ad-reporting-server-side-beacon-glossary.md)
+ [定时和缓存行为](ad-reporting-server-side-timing-behavior.md)
+ [追踪功能](ad-reporting-server-side-features.md)

# 使用服务器引导广告插入 (SGAI) 进行服务器端跟踪
<a name="ad-reporting-server-side-sgai"></a>

当您使用服务器引导式广告插入 (SGAI) 时，服务器端跟踪使用的*无会话信标机制与*上述拼接模式方法不同。SGAI 没有将广告细分 MediaTailor 拼接到内容清单（用于跟踪`/v1/segment`请求）中，而是在资产列表响应中将广告引用作为单独的播放列表返回，广告中嵌入了信标元数据。 URIs

## 无会话服务器端信标的工作原理
<a name="ad-reporting-server-side-sgai-how-it-works"></a>

以下步骤描述了服务器端信标如何适用于 SGAI 会话：

1. **会话初始化**：玩家使用请求HLS多变体播放列表。`aws.insertionMode=GUIDED`服务器端报告是默认设置（不需要任何`aws.reportingMode`参数）。与拼接模式不同，会话初始化响应*不*包括。`trackingUrl`

1. **Cacheable manifest**： MediaTailor返回一个可缓存的清单，其中包含指向 MediaTailor插页式资产列表端点的`EXT-X-DATERANGE`标签`CLASS="com.apple.hls.interstitial"`和`X-ASSET-LIST`属性。

1. 包含@@ **信标元数据的资产列表**：当玩家遇到广告插播时，它会获取资产列表。 MediaTailor返回一个 JSON 响应，其中每个广告 URI 都包含加密的信标元数据：

   ```
   {
     "ASSETS": [
       {
         "DURATION": 30.0,
         "URI": "https://cdn.example.com/ad/master.m3u8?awsBeaconData=<encrypted>&awsBeaconDomain=<MediaTailor-endpoint>&awsConfigurationName=<config-name>"
       }
     ]
   }
   ```

   当服务器端报告处于活动状态时，响应中*不*包含`TRACKING`部分。该广告 URIs 包含所有信标数据。

1. **HLS 变量替换**：玩家获取广告多变体播放列表。广告清单使用`#EXT-X-DEFINE:QUERYPARAM`指令 URLs 通过 HLS 变量替换将 URI 查询字符串中的信标参数传递到区段：

   ```
   #EXTM3U
   #EXT-X-DEFINE:QUERYPARAM="awsBeaconData"
   #EXT-X-DEFINE:QUERYPARAM="awsBeaconDomain"
   #EXT-X-DEFINE:QUERYPARAM="awsConfigurationName"
   #EXTINF:5.0,
   {$awsBeaconDomain}/segment/hash/{$awsConfigurationName}/{$awsBeaconData}/0/0?aws.segmentRelativePath=asset_00001.ts
   ```

   玩家使用广告清单 URI 查询字符串中的值解析`{$awsBeaconData}``{$awsBeaconDomain}`、和`{$awsConfigurationName}`变量，然后通过 MediaTailor请求每个广告段。

1. **根据区段请求触发信标**：当玩家请求每个广告区段时，请求就会通过 MediaTailor。该服务解密信标数据，确定区段在广告中的位置（展示次数、第一四分位数、中点、第三四分位数或完整），然后向广告服务器发射相应的 VAST 跟踪信标。 MediaTailor 然后将玩家重定向到实际的广告内容细分。

## 玩家对 SGAI 服务器端信标的要求
<a name="ad-reporting-server-side-sgai-requirements"></a>

要在 SGAI 中使用服务器端信标，您的玩家必须满足以下要求：
+ HLS 版本 11 或更高版本
+ Support 支持 `EXT-X-DATERANGE` HLS 插页式广告的 with `CLASS` 属性
+ 支持`#EXT-X-DEFINE:QUERYPARAM`变量替换 (RFC 8216bis)。玩家必须先对查询参数值进行百分比解码，然后才能将其替换为分段。 URLs

**注意**  
目前仅支持 HLS 的 SGAI 服务器端信标。SGAI 服务器端信标尚不支持 DASH。

## 与缝合模式服务器端跟踪的比较
<a name="ad-reporting-server-side-sgai-comparison"></a>

下表汇总了拼接广告和服务器引导广告插入之间服务器端跟踪的区别：


| 方面 | 缝合 (SSAI) | 服务器引导 (SGAI) | 
| --- | --- | --- | 
| 清单可缓存性 | 每会话，不可缓存 | 可缓存，在观众之间共享 | 
| 广告区段路由 | 通过/v1/segment/使用会话 ID | 通过/v1/segment/使用加密的信标数据 blob | 
| 信标的会话状态 | 按会话存储在 MediaTailor | 无会话 — 所有状态均在加密参数中传输 awsBeaconData | 
| 会话初始化时跟踪网址 | 在会话初始化响应中返回 | 未提供 — 信标数据嵌入广告 URIs 中的每个资产列表响应中 | 
| DASH 支持 | 支持 | 暂不支持 | 

**注意**  
对于实时 SGAI 会话，您可以使用启用基于清单的广告预取。`aws.guidedPrefetchMode=MANIFEST`这与拼接 (SSAI) 会话中使用的基于调度的预取 API 是分开的。有关更多信息，请参阅 [引导式预取，带有明显的心跳声](sgai-guided-prefetch.md)。

# 服务器端跟踪信标词汇表
<a name="ad-reporting-server-side-beacon-glossary"></a>

MediaTailor 服务器端跟踪使用一组标准化的信标向广告服务器和验证服务机构报告广告观看进度。这些信标符合美国互动广告局 (IAB) 的视频广告衡量标准，可准确报告广告曝光量和完成率。


**服务器端跟踪信标类型**  

| 信标类型 | 被解雇时 | 用途 | 时机详情 | 
| --- | --- | --- | --- | 
| 印象 | 当玩家请求第一个广告区段时 | 表示广告内容已开始加载并即将向观众展示 | 在第一个广告/v1/segment请求时触发。符合 IAB 的指导方针，要求广告内容在计算曝光量之前开始加载。[服务器端跟踪工作流程](ad-reporting-server-side-timing-behavior.md#ad-reporting-server-side-timing-behavior-workflow)有关完整序列，请参见。 | 
| 启动 | 当玩家开始呈现广告内容时 | 确认广告播放已实际开始 | 通常在第一个细分请求上与展示信标同时触发，但表示广告呈现的实际开始。这种区别对于分别跟踪展示和开始事件的验证服务非常重要。 | 
| 第一四分位数 | 当玩家达到广告时长的 25% | 衡量广告第一季度的持续观看量 | 当玩家请求包含广告时长 25% 的区段时触发。例如，在一则包含 2 秒区段的 20 秒广告中，这通常会在请求第 3 个区段（广告开始大约 4-6 秒后）时触发。 | 
| 中点 | 当玩家达到广告时长的 50% | 衡量广告在半数广告中持续观看广告的情况 | 当玩家请求包含广告时长 50% 的区段时触发。例如，在一则包含 2 秒区段的 20 秒广告中，这通常会在请求第 5 个区段（广告开始大约 8-10 秒后）时触发。 | 
| 第三四分位数 | 当玩家达到广告时长的 75% | 衡量在四分之三的广告中持续观看广告的情况 | 当玩家请求包含广告时长 75% 的分段时触发。例如，在一则包含 2 秒区段的 20 秒广告中，这通常会在请求第 8 个区段（广告发布后大约 14-16 秒）时触发。 | 
| 完成 | 当玩家到达广告结尾时 | 确认整则广告已投放给观众 | 当玩家请求广告的最后一部分时触发。这表明观众可能已经看到了整个广告内容。例如，在一则包含 2 秒区段的 20 秒广告中，这通常会在请求第 10 个区段（广告开始大约 18-20 秒）时触发。 | 

**注意**  
信标发射的确切时间取决于片段持续时间和广告时长。 MediaTailor 根据特定的广告持续时间和细分结构计算与每个四分位数位置相对应的相应细分请求。

# 服务器端跟踪定时和缓存行为
<a name="ad-reporting-server-side-timing-behavior"></a>

在服务器端报告中，根据玩家的实际细分请求 MediaTailor 触发跟踪事件，而不是根据清单解析或预加载活动触发跟踪事件。这种方法可确保精确的展示次数统计，符合视频广告衡量行业标准。

## 关键时机原则
<a name="ad-reporting-server-side-timing-behavior-principles"></a>

MediaTailor 服务器端跟踪遵循以下基本计时原则：
+ **跟踪事件会根据实际的分段请求触**发——信标仅在玩家向其发出 HTTP 请求时发送 `/v1/segment` URLs，而不是在清单解析或缓存期间发送。
+ **玩家缓存和清单的预加载不会触发事件**-玩家可以在不生成任何跟踪事件的情况下解析、缓存或预加载清单信息。
+ **区段预提取*将*触发事件** ——如果玩家在播放之前预先获取实际的广告区段，则这遵循行业标准行为，即细分请求构成有效的曝光量。
+ **每个 /v1/segment 请求都会触发相应的信标-具体的跟踪事件（展示次数、四分位数、完成量）由所请求的广告位置和细分**决定。
+ **时间安排符合IAB标准** ——该方法遵循了互动广告局关于视频广告衡量和展示次数统计的指导方针。

## 服务器端跟踪工作流程
<a name="ad-reporting-server-side-timing-behavior-workflow"></a>

下图说明了完整的服务器端跟踪工作流程，显示了何时触发与玩家请求相关的跟踪事件：

**第 1 阶段：会话初始化**  
玩家从中请求清单 MediaTailor，清单会返回包含广告细分的个性化清单 URLs：  

![\[会话初始化阶段显示玩家请求清单 MediaTailor 并接收带有广告细分的个性化清单 URLs。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ss-track-phase1.png)


**第 2 阶段：广告请求和展示次数跟踪**  
当玩家请求第一个广告区段时， MediaTailor 会向广告决策服务器和广告验证服务发送展示并启动信标：  

![\[广告展示跟踪阶段显示，当玩家请求第一个广告区段时，会向广告决策服务器和广告验证服务 MediaTailor 发送展示和起始信标。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ss-track-phase2.png)


**第 3 阶段：四分位数跟踪**  
MediaTailor 根据后续分段请求发射四分位数信标（第一四分位数、中点、第三四分位数、完成）：  

![\[四分位数跟踪阶段显示，当玩家请求后续的广告细分时，会向广告决策服务器和广告验证服务 MediaTailor 发射四分位数信标。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ss-track-phase3.png)


**第 4 阶段：分段交付**  
触发跟踪信标后， MediaTailor 重定向到来自 Amazon CloudFront 或您的 CDN 的实际广告段：  

![\[细分投放阶段显示了在触发跟踪信标后 MediaTailor 将玩家重定向到来自 CloudFront 或 CDN 的实际广告区段。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ss-track-phase4.png)


服务器端跟踪工作流程包括以下关键计时行为：

1. **会话初始化**-玩家从中请求清单 MediaTailor。 MediaTailor 返回包含 URLs 带有`/v1/segment`路径的广告细分的个性化清单。

1. **清单解析和缓存**-玩家解析清单，并可能预加载或缓存片段信息。无论玩家缓存行为如何，**在此阶段都不会触发任何跟踪事件**。

1. **广告细分请求和展示次数跟踪**-当玩家实际请求第一个广告区段（通常用于播放）时， MediaTailor 会向广告决策服务器和广告验证服务启动展示信标并开始跟踪事件。这发生在对 `/v1/segment` URL 的实际 HTTP 请求上，而不是在解析清单时。

1. **基于细分请求的四分位数跟踪**- MediaTailor 根据与广告持续时间内计算出的四分位数位置相对应的后续细分请求，向广告决策服务器和广告验证服务发送四分位数信标（第一四分位数、中点、第三四分位数、完成）。

1. **区段投**放-触发相应的跟踪信标后， MediaTailor 向实际广告区段（来自亚马逊 CloudFront 或您的 CDN）发出 HTTP 重定向。

## 玩家缓存和预加载注意事项
<a name="ad-reporting-server-side-timing-behavior-caching-considerations"></a>

MediaTailor 服务器端跟踪旨在与各种玩家缓存和预加载策略兼容，同时保持精确的印象测量：
+ **清单预加载**-预加载或缓存清单信息的玩家不会触发跟踪事件。只有在发出实际区段请求时才会触发跟踪事件。
+ **区段预提取**-如果玩家在播放之前预先提取了广告片段，则在请求这些区段时（可能早于实际播放时间）将触发跟踪事件。这种行为符合将细分请求视为有效展示次数的行业标准。
+ **玩家缓冲**-标准玩家缓冲行为（在播放前稍微提前请求片段）将根据分段请求模式在适当的时间触发跟踪事件。

## 对追踪差异进行故障排除
<a name="ad-reporting-server-side-timing-behavior-troubleshooting"></a>

如果您发现 MediaTailor 服务器端跟踪与第三方指标之间存在差异，请考虑以下因素：
+ **玩家行为差异**-不同的玩家可能有不同的预取和缓冲策略，这些策略会影响何时发出分段请求。
+ **网络状况**-网络状况不佳可能会导致玩家多次或以不同于预期的时间间隔请求分段。
+ **CDN 配置**-不正确的 CDN `/v1/segment` 请求缓存可能导致错过或重复跟踪事件。
+ **会话管理**-确保每个播放会话都使用唯一的会话标识符，以防止跟踪事件冲突。

有关详细的故障排除指南，请参阅[排查常见 问题](monitoring-and-troubleshooting.md#troubleshooting-common-issues)。

# MediaTailor 服务器端跟踪特性和功能
<a name="ad-reporting-server-side-features"></a>

AWS Elemental MediaTailor 自动应用这些集成的服务器端跟踪功能，以优化广告衡量的准确性和可靠性。该系统可防止重复信标，在高流量期间管理流量，维护正确的事件顺序，并提供全面的性能监控，而无需您进行任何配置。您只需要确保您的广告决策服务器 (ADS) 在 VAST 响应中提供跟踪信标即可。

**注意**  
这些功能将于 2025 年 9 月 30 日起向新客户开放。作为持续服务改进的一部分，现有客户将在2025年全年获得访问权限。如果您想立即使用这些功能，请联系 [AWS Support](https://aws.amazon.com/premiumsupport/)。

**注意**  
这些功能适用于拼接 (SSAI) 和服务器引导 (SGAI) 广告插入方法。两种模式下的信标类型和时间相同。它们在 MediaTailor 触发信标的方式上有所不同 — 有关 SGAI 服务器端信标[使用服务器引导广告插入 (SGAI) 进行服务器端跟踪](ad-reporting-server-side-sgai.md)的详细信息，请参阅。

## 信标重复数据删除
<a name="ad-reporting-server-side-beacon-deduplication"></a>

MediaTailor 防止针对相同的广告事件重复触发信标。服务器端跟踪系统在每个广告观看会话中仅发送一次展示次数、四分位数和完成信标。当视频播放器由于网络状况、比特率变化或缓冲策略而多次请求相同的广告段时，会 MediaTailor 跟踪已发射的信标并屏蔽冗余传输。

重复数据删除可自动解决导致信标数量膨胀的常见情况：
+ **自适应比特率直播**-当玩家下载同一广告片段的不同质量变体时
+ **网络重试场景**-当玩家因网络问题或超时而重新请求分段时
+ **玩家缓冲策略**-当玩家出于缓冲目的预取或重新获取片段时

该系统旨在仅发射一次印象信标，即使玩家在不同的质量等级之间切换。

## 自适应限制和信标重试
<a name="ad-reporting-server-side-adaptive-throttling"></a>

MediaTailor 根据服务器响应指示器自动管理信标流量速率。系统监控 HTTP 响应模式、连接超时和错误代码以检测拥塞，然后相应地调整流量速率。当系统识别出服务器压力指标时，它会降低受影响域的流量速率，并在服务器表现出更高的容量时自动提高速率。

系统使用以下指标监控服务器运行状况：
+ **HTTP 连接超**时-当测量平台未在预期的时间范围内做出响应时
+ **错误响应代码**-表示服务器过载的 503、504 和 507 响应。您的广告服务器还必须支持这些错误代码才能完全兼容。
+ **响应模式**-衡量表明容量问题的平台性能变化

重试行为会自动尝试投递长达 1 小时，两次尝试之间至少有 30 秒的延迟。无法配置此重试行为。

## 每秒信标流量管理
<a name="ad-reporting-server-side-tps-management"></a>

您可以设置 TPS 限制来控制信标传送速率。这是服务器端跟踪功能的唯一可配置设置。账户级别限制限制了向所有衡量合作伙伴发送的广告跟踪请求总数。 MediaTailor 强制执行 10,000 的最低 TPS 上限，以便为企业规模的运营提供足够的容量。

提交 AWS 支持请求以建立 TPS 限制，并提供以下信息：
+ **AWS 账户 ID**-您的特定账户标识符
+ **目标区域**-您想要应用 TPS 限制的 AWS 区域
+ **所需的 TPS 阈值**-您所需的每秒交易上限（最低 10,000）

默认情况下，没有 TPS 限制。如果您的广告决策服务器 (ADS) 需要，则可以申请 TPS 限制，但该限制必须大于 10,000 TPS。 MediaTailor 不会超过您的指定限制，但不能保证吞吐量始终如一，直至该限制。您的广告决策服务器会告诉您它可以支持哪些 TPS 限制。

## 按顺序信标
<a name="ad-reporting-server-side-in-order-beaconing"></a>

MediaTailor 自动保持广告跟踪事件的顺序投放。即使发生网络问题、重试或流量管理，系统也会保留信标顺序。这样可以确保衡量合作伙伴以正确的顺序接收事件，从而进行准确的分析。

该系统遵循标准的行业信标序列：

1. **开始事件**-在广告开始播放时触发

1. **第一个四分位数事件**-广告完成率为 25% 时开火

1. **中点事件**-广告完成 50% 时开火

1. **第三个四分位数事件——广告完成**率为 75% 时开火

1. **完成事件**-广告完成时触发

这些功能会自动协同工作：
+ 在节流期间会保持信标以保持正常秩序
+ 每个衡量合作伙伴域都有单独的事件队列，以防止费率调整期间出现中断
+ 重复数据删除可跟踪事件类型和时间轴位置，同时保持时间顺序

# 客户端广告跟踪
<a name="ad-reporting-client-side"></a>

使用 AWS Elemental MediaTailor 客户端跟踪 API，您可以在直播工作流程中加入广告时段的播放器控件。在客户端跟踪中，玩家或客户端向广告决策服务器 (ADS) 和其他广告验证实体发送跟踪事件，例如展示次数和四分位数广告信标。这些事件既跟踪整体广告中断状态，也跟踪每个广告间隔时间内的单个广告投放情况。有关展示次数和四分位数 (ADS) 以及其他广告验证实体的更多信息。有关展示次数和四分位数广告信标的更多信息，请参阅。[客户端信标](ad-reporting-client-side-beaconing.md)有关 ADS 和其他广告验证实体的更多信息，请参阅。[客户端广告跟踪集成](ad-reporting-client-side-ad-tracking-integrations.md)

有关将玩家参数和会话数据传递给 ADS 以进行客户端跟踪的信息，请参阅[MediaTailor ADS 请求的玩家变量](variables-player.md)和[MediaTailor ADS 请求的会话变量](variables-session.md)。

客户端跟踪支持以下功能：
+ 广告时段倒计时器-有关更多信息，请参阅。[广告倒计时器](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-countdown-timer)
+ 广告点击量-有关更多信息，请参阅。[广告点击](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-clickthrough)
+ 展示随播广告-有关更多信息，请参阅[配套广告](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-companion-ads)。
+ 可跳过的广告-有关更多信息，请参阅。[可跳过的广告](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-skippable-ads)
+ 显示 VAST 图标以实现隐私合规性-有关更多信息，请参阅[Google 的图标为什么是这个广告 (WTA)](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-google-wta)。
+ 控制广告期间玩家的擦洗-有关更多信息，请参阅[擦洗](ad-reporting-client-side-ad-tracking-schema-player-controls.md#ad-reporting-client-side-ad-tracking-schema-player-controls-scrubbing)。

使用 MediaTailor 客户端跟踪 API，除了客户端跟踪之外，您还可以将元数据发送到启用其他功能的播放设备：

## 客户端报告工作流程
<a name="ad-reporting-client-side-workflow"></a>

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

![\[MediaTailor 客户端报告序列图，显示了从会话初始化到广告播放和信标的整个工作流程中，视频播放器、广告决策服务器、内容来源和广告验证服务之间的互动。 MediaTailor\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/tracking_flow.png)


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

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

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

1. **跟踪数据检索**-玩家定期轮询跟踪网址（匹配HLS的目标持续时间或达世币的最小更新周期）。 MediaTailor 返回 JSON 跟踪元数据，其中包含可用信息、广告、跟踪事件 URLs、信标和广告验证数据。

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

1. **持续轮询**-玩家在整个会话中继续轮询跟踪网址，以接收有关即将推出的广告时段和动态内容的更新元数据。

此工作流程支持高级功能，例如广告倒计时计时器、点击功能、配套广告、可跳过的广告和符合隐私要求的 VAST 图标显示。

**Topics**
+ [客户端报告工作流程](#ad-reporting-client-side-workflow)
+ [启用客户端跟踪](#ad-reporting-client-side-enabling)
+ [广告服务器参数](#ad-reporting-client-side-ad-server-parameters)
+ [源站交互查询参数](#ad-reporting-client-side-origin-interaction-query-parameters)
+ [会话配置的功能](#ad-reporting-client-side-session-configured-features)
+ [客户端跟踪的最佳实践](#ad-reporting-client-side-best-practices)
+ [客户端广告跟踪架构和属性](ad-reporting-client-side-ad-tracking-schema.md)
+ [广告追踪活动时机](ad-reporting-client-side-ad-tracking-schema-activity-timing.md)
+ [用于客户端广告跟踪的玩家控制和功能](ad-reporting-client-side-ad-tracking-schema-player-controls.md)
+ [客户端信标](ad-reporting-client-side-beaconing.md)
+ [带有服务器端广告信标的混合模式](ad-reporting-hybrid-mode.md)
+ [客户端广告跟踪集成](ad-reporting-client-side-ad-tracking-integrations.md)
+ [通过广告信标进行寻呼 GetTracking](#gettracking)

## 启用客户端跟踪
<a name="ad-reporting-client-side-enabling"></a>

您可以为每个会话启用客户端跟踪。玩家`POST`向 MediaTailor 配置的会话初始化前缀端点创建 HTTP。或者，玩家可以发送其他元数据， MediaTailor 以便在进行广告调用、调用 Origin 获取清单以及在会话级别调用或禁用 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`是的玩家参数`param1`，`player_params.param2`是的玩家参数`param2`。

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

## 广告服务器参数
<a name="ad-reporting-client-side-ad-server-parameters"></a>

JSON 结构的最顶层是一个 JS `adsParams` ON 对象。该对象内部有 MediaTailor 可以读取所有会话请求并将其发送到广告服务器的 key/value 配对。 MediaTailor 支持以下广告服务器：
+ 谷歌广告管理器 
+ SpringServe 
+ FreeWheel 
+ Publica 

## 源站交互查询参数
<a name="ad-reporting-client-side-origin-interaction-query-parameters"></a>

JSON 结构最顶层中的任何保留 key/value 对（例如`adsParams``availSuppression``overlayAvails`、和）都不会以查询参数的形式添加到原始请求网址中。向源发出的 MediaTailor 每个会话清单请求都包含这些查询参数。Origin 会忽略多余的查询参数。例如， MediaTailor 可以使用 key/value 配对将访问令牌发送到源。

## 会话配置的功能
<a name="ad-reporting-client-side-session-configured-features"></a>

使用会话初始化 JSON 结构启用、禁用或覆盖诸如`overlayAvails``availSuppression`、和之类的 MediaTailor功能。`adSignaling`会话初始化期间传递的任何功能配置都会覆盖 MediaTailor 配置级别的设置。

**注意**  
 MediaTailor 在会话初始化时提交的元数据是不可变的，并且在会话期间无法添加其他元数据。使用 SCTE-35 标记来携带会话期间发生变化的数据。有关更多信息，请参阅 [MediaTailor ADS 请求的会话变量](variables-session.md)。

**Example : 为 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"                     
           }
        }
```

**Example : 对 DASH 执行客户端广告跟踪**  

```
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.mpd

        {
            "adsParams": {
               "deviceType": "androidmobile",
               "uid": "xjhhddli-9189901-uic" 
           }
        }
```

### 报告模式参数
<a name="session-initialization-reporting-mode"></a>

在初始化会话时，您可以通过在请求正文中包含`reportingMode`参数来指定报告模式。此参数控制 MediaTailor 对会话执行客户端广告跟踪还是服务器端广告跟踪。
+ `client`-玩家执行广告跟踪并向广告服务器发送信标。如果未指定，则`reportingMode`这是默认模式。
+ `server`- MediaTailor 执行服务器端广告跟踪并将信标直接发送到广告服务器。

**Example 服务器端报告模式下的会话初始化**  

```
POST mediatailorURL/v1/session/hashed-account-id/origin-id/asset-id.m3u8

        {
            "adsParams": {
               "deviceType": "ipad",
               "uid": "abdgfdyei-2283004-ueu"                     
           },
           "reportingMode": "server"
        }
```

**Example 使用客户端报告模式进行会话初始化（显式）**  

```
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。正文包含一个带有`manifestUrl`和`trackingUrl`密钥的 JSON 对象。这些值是玩家可用于播放和广告事件跟踪目的的相对 URLs 值。

```
{
  "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"
}
```

有关客户端跟踪架构的更多信息，请参阅[客户端广告跟踪架构和属性](ad-reporting-client-side-ad-tracking-schema.md)。

## 客户端跟踪的最佳实践
<a name="ad-reporting-client-side-best-practices"></a>

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

### 实时工作流程
<a name="ad-reporting-client-side-best-practices-live"></a>

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

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

### VOD 工作流程
<a name="ad-reporting-client-side-best-practices-vod"></a>

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

![\[VOD 工作流程的呼叫流程。在会话初始化并 MediaTailor 收到第一个包含媒体的清单后，调用客户端跟踪端点。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/vod-workflow-best-practice.png)


### 服务器引导的广告插入
<a name="ad-reporting-client-side-best-practices-sgai"></a>

服务器引导式广告插入 (SGAI) 会话不使用 API。`GetTracking`相反，当你使用时`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`
+ 使用素材资源列表中 URLs 提供的跟踪信息来报告广告事件
+ 根据玩家中的实际广告播放事件发射追踪信标
+ 在获取素材资源列表时独立处理每个广告插播时间的跟踪

**重要**  
只有在设置后`aws.reportingMode=CLIENT`，该`TRACKING`部分才会包含在资产列表中。使用服务器端报告（SGAI 的默认设置）时，会省 MediaTailor 略该`TRACKING`栏目，改为在广告中嵌入信标数据。 URIs 有关更多信息，请参阅 [使用服务器引导广告插入 (SGAI) 进行服务器端跟踪](ad-reporting-server-side-sgai.md)。

# 客户端广告跟踪架构和属性
<a name="ad-reporting-client-side-ad-tracking-schema"></a>

借助 MediaTailor 客户端广告跟踪功能，您可以将详细的客户端广告跟踪数据集成到您的玩家环境中。以下各节涵盖了整个广告跟踪架构，以及构成该架构的特定属性和值。

## 架构
<a name="ad-reporting-client-side-ad-tracking-schema-table"></a>

以下 JSON 结构显示了 MediaTailor 客户端广告跟踪架构。此表示形式说明了架构的嵌套结构，可帮助您了解不同部分之间的关系。

有关每个属性的详细信息，请参阅[Properties](#ad-reporting-client-side-ad-tracking-schema-properties)。

```
{
  "avails": [
    {
      "ads": [
        {
          "adID": "string",
          "adParameters": "string",
          "adSystem": "string",
          "adTitle": "string",
          "adVerifications": [
            {
              "executableResource": [
                {
                  "apiFramework": "string",
                  "type": "string",
                  "uri": "string",
                  "language": "string"
                }
              ],
              "javaScriptResource": [
                {
                  "apiFramework": "string",
                  "browserOptional": "string",
                  "uri": "string"
                }
              ],
              "trackingEvents": [
                {
                  "event": "string",
                  "uri": "string"
                }
              ],
              "vendor": "string",
              "verificationParameters": "string"
            }
          ],
          "companionAds": [
            {
              "adParameters": "string",
              "altText": "string",
              "attributes": {
                "adSlotId": "string",
                "apiFramework": "string",
                "assetHeight": "string",
                "assetWidth": "string",
                "expandedHeight": "string",
                "expandedWidth": "string",
                "height": "string",
                "id": "string",
                "pxratio": "string",
                "renderingMode": "string",
                "width": "string"
              },
              "companionClickThrough": "string",
              "companionClickTracking": "string",
              "htmlResource": "string",
              "iFrameResource": "string",
              "sequence": "string",
              "staticResource": "string",
              "trackingEvents": [
                {
                  "event": "string",
                  "uri": "string"
                }
              ]
            }
          ],
          "creativeId": "string",
          "creativeSequence": "string",
          "duration": "string",
          "durationInSeconds": number,
          "extensions": [
            {
              "type": "string",
              "content": "string"
            }
          ],
          "icons": [
            {
              "attributes": {
                "apiFramework": "string",
                "duration": "string",
                "height": "string",
                "offset": "string",
                "program": "string",
                "pxratio": "string",
                "width": "string",
                "xPosition": "string",
                "yPosition": "string"
              },
              "htmlResource": "string",
              "iconClicks": {
                "iconClickThrough": "string",
                "iconClickTracking": {
                  "id": "string"
                },
                "iconClickFallbackImages": [
                  {
                    "altText": "string",
                    "height": "string",
                    "width": "string",
                    "staticResource": {
                      "creativeType": "string",
                      "uri": "string"
                    }
                  }
                ]
              },
              "iconViewTracking": "string",
              "iFrameResource": "string",
              "staticResource": {
                "creativeType": "string",
                "uri": "string"
              }
            }
          ],
          "mediaFiles": {
            "adParameters": "string",
            "duration": "string",
            "durationInSeconds": number,
            "mediaFilesList": [
              {
                "apiFramework": "string",
                "delivery": "string",
                "height": "string",
                "maintainAspectRatio": "string",
                "mediaFileUri": "string",
                "mediaType": "string",
                "scalable": "string",
                "width": "string",
                "bitrate": "string"
              }
            ],
            "mezzanine": "string",
            "startTime": "string",
            "startTimeInSeconds": number,
            "trackingEvents": [
              {
                "beaconUrls": ["string"],
                "duration": "string",
                "durationInSeconds": number,
                "dateTime": "string",
                "eventId": "string",
                "eventType": "string",
                "startTime": "string",
                "startTimeInSeconds": number
              }
            ]
          },
          "startTime": "string",
          "startTimeInSeconds": number,
          "dateTime": "string",
          "adBreakTrackingEvents": [...],
          "vastAdId": "string"
        }
      ],
      "adType": "string",
      "availID": "string",
      "duration": "string",
      "durationInSeconds": number,
      "startTime": "string",
      "startTimeInSeconds": number,
      "dateTime": "string",
      "adMarkerDuration": "string",
      "adProgramDateTime": "string",
      "dashAvailabilityStartTime": "string",
      "hlsAnchorMediaSequenceNumber": "string"
    }
  ],
  "nonLinearAvails": [
    {
      "nonLinearAds": [...],
      "nonLinearAdsList": [...]
    }
  ],
  "nextToken": "string",
  "meta": {}
}
```

## Properties
<a name="ad-reporting-client-side-ad-tracking-schema-properties"></a>

下表列出了客户端跟踪 API 中的属性及其定义、值类型和示例。


****  

| 属性 | 定义 | 值类型 | 示例 | 
| --- | --- | --- | --- | 
|   adID  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html) 路径：`/avails/ads/adId` VAST 映射：无  | 字符串 | 10 | 
|   adBreakTrackingEvents  |  一个数组，它承载来自 VAST 响应的 VMAP 跟踪事件。有关更多信息，请参阅 [VMAP 1.0](https://www.iab.com/guidelines/vmap/) 规范的第 2.3.3 节。 路径：`/avails/ads/adBreakTrackingEvents`  | 数组 |  []  | 
|   adMarkerDuration  |  从清单中的广告标记中观察到的有效时长。  | 字符串 |  30  | 
|   adParameters  |  一串来自 VAST VPAID 的广告参数， MediaTailor 传递给玩家。 路径：`/avails/ads/adParameters` 广阔的映射：`VAST/Ad/InLine/Creatives/Creative/Linear/AdParameters`  | 字符串 |  | 
|   adProgramDateTime  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html)  | 字符串 |  | 
|   ads  |  一个包含构成广告效果的广告对象的数组。广告按其在清单中的显示顺序列出。 路径：`/avails/ads`  | 数组 |  []  | 
|   adSystem  |  投放广告的系统的名称。  请务必提供一个值。如果您不提供值，则可能会出现问题。   | 字符串 |  myADS  | 
|   adTitle  |  广告的标题。  | 字符串 |  ad1  | 
|   adVerifications  |  包含执行第三方测量代码以验证创意播放所需的资源和元数据。有关此属性的更多信息，请参阅 V [AST 4.2 规范](https://iabtechlab.com/standards/vast/)的第 3.16 节。 MediaTailor 支持`adVerifications`作为 VAST 3 扩展节点。 路径：`/avails/ads/adVerifications` 广阔的映射：`VAST/Ad/InLine/AdVerifications`  | 数组 |  []  | 
|   altText  |  配套广告图片的替代文字。此文本允许为视障人士提供描述性音频支持的玩家回读对图像的描述。 路径：`/avails/ads/companionAds/altText`  | 字符串 |  video sequence advertising sneakers  | 
|   apiFramework  |  设置为`VPAID`，告诉玩家此广告是 VPAID 广告。 可以出现在架构中的多个位置。  | 字符串 |  VPAID  | 
|   availID  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html) 路径：`/avails/availID`  | 字符串 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html)  | 
|   avails  |  一个包含在活动清单窗口中显示的广告插*播对象或可用*对象的数组。这些可用按它们在清单中出现的顺序列出。 路径：`/avails`  | 数组 |  []  | 
|   adType  |  广告的类型。 路径：`/avails/adType`和 `/avails/ads/adType`  | 字符串 |  | 
|   dateTime  |  以 ISO 8601 秒格式编程广告或广告的开始日期时间。 路径：`/avails/dateTime`和 `/avails/ads/dateTime`  | 字符串 |  | 
|   duration  |  长度，采用 ISO 8601 秒格式。尽管信标持续时间始终为零，但响应包括整个广告投放时间以及每个广告和信标的持续时间。 路径：`/avails/duration`和 `/avails/ads/duration`  | 字符串 | 15.015 | 
|   durationInSeconds  |  长度，以秒为单位。 路径：`/avails/durationInSeconds`和 `/avails/ads/durationInSeconds`  | 数字 |  | 
|   extensions  |  广告服务器使用的 VAST 的自定义扩展程序。有关扩展的更多信息，请参阅 V [AST 4.2 规范](https://iabtechlab.com/standards/vast/)的第 3.18 节。 路径：`/avails/ads/extensions` 广阔的映射：`VAST/Ad/InLine/Extensions`  | 数组 | [] | 
|   icons  |  广告的图标元素。 路径：`/avails/ads/icons` 广阔的映射：`VAST/Ad/InLine/Creatives/Creative/Linear/Icons`  | 数组 |  | 
|   mediaFiles  |  玩家获得广告使用所需的视频和其他资产。 路径：`/avails/ads/mediaFiles`  | 对象 |  | 
|   nonLinearAvails  |  非线性广告可用对象数组。 路径：`/nonLinearAvails`  | 数组 |  | 
|   executableResource  |  用于验证的可执行资源。 路径：`/avails/ads/adVerifications/executableResource` 广阔的映射：`VAST/Ad/InLine/AdVerifications/Verification/ExecutableResource`  | 数组 |  | 
|   javaScriptResource  |  JavaScript 用于核查的资源。 路径：`/avails/ads/adVerifications/javaScriptResource` 广阔的映射：`VAST/Ad/InLine/AdVerifications/Verification/JavaScriptResource`  | 数组 |  | 
|   trackingEvents  |  跟踪验证广告或配套广告的事件。 路径：`/avails/ads/adVerifications/trackingEvents`或 `/avails/ads/companionAds/trackingEvents`  | 数组 |  | 
|   vendor  |  验证供应商。 路径：`/avails/ads/adVerifications/vendor` 广阔的映射：`VAST/Ad/InLine/AdVerifications/Verification/@vendor`  | 字符串 |  | 
|   uri  |  指向可执行资产、视频资产或跟踪端点的 URI。 路径：架构中的不同位置 VAST 映射：VAST 中的各种 CDATA 元素  | 字符串 | https://tracking.example.com/impression | 
|   verificationParameters  |  验证参数。 路径：`/avails/ads/adVerifications/verificationParameters` 广阔的映射：`VAST/Ad/InLine/AdVerifications/Verification/VerificationParameters`  | 字符串 |  | 
|   attributes  |  随播广告属性，例如尺寸和渲染模式。 路径：`/avails/ads/companionAds/attributes`  | 对象 |  | 
|   companionClickThrough  |  广告商页面的网址，当观众点击配套广告时，媒体播放器会打开该网址。 路径：`/avails/ads/companionAds/companionClickThrough` 广阔的映射：`VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/CompanionClickThrough`  | 字符串 | https://aws.amazon.com/ | 
|   companionClickTracking  |  该`companionClickThrough`属性的追踪网址。 路径：`/avails/ads/companionAds/companionClickTracking` 广阔的映射：`VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/CompanionClickTracking`  | 字符串 | https://myads.com/beaconing/event=clicktracking | 
|   htmlResource  |  直接插入到直播提供商的 HTML 页面中的 CDATA 编码的 HTML。 路径：`/avails/ads/companionAds/htmlResource` 广阔的映射：`VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/HTMLResource`  | 字符串 | <\$1[CDATA[<\$1doctype html><html><head><meta name=\$1"viewport\$1" content=\$1"width=1, initial-scale=1.0, minimum-scale=1.0,...]]> | 
|   iFrameResource  |  直播提供商加载到 iframe 中的 HTML 资源文件的网址。 路径：`/avails/ads/companionAds/iFrameResource` 广阔的映射：`VAST/Ad/InLine/Creatives/Creative/CompanionAds/Companion/iFrameResource`  | 字符串 |  | 
|   sequence  |  在 VAST 响应中为广告素材指定的序列值。 路径：`/avails/ads/companionAds/sequence`  | 字符串 | 1 | 
|   startTime  |  时间位置，采用 ISO 8601 秒格式。对于 HLS 来说，这与播放会话的开始时间有关。对于 DASH，这与清单的 AST（可用性开始时间）相关。该响应包含整个广告效用以及每个广告和信标的开始时间。 路径：`/avails/startTime`和 `/avails/ads/startTime`  | 字符串 | PT18.581355S | 
|   startTimeInSeconds  |  时间位置，以秒为单位。对于 HLS 来说，这与播放会话的开始时间有关。对于 DASH，这与清单的 AST（可用性开始时间）相关。该响应包含整个广告效用以及每个广告和信标的开始时间。 路径：`/avails/startTimeInSeconds`和 `/avails/ads/startTimeInSeconds`  | 数字 | 18.581 | 
|   eventId  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/ad-reporting-client-side-ad-tracking-schema.html)  | 字符串 |  | 
|   event  |  追踪事件的名称。 路径：`/avails/ads/adVerifications/trackingEvents/event`或 `/avails/ads/companionAds/trackingEvents/event`  | 字符串 | impression, start, firstQuartile, midpoint, thirdQuartile, complete | 
|   beaconUrls  |   MediaTailor 发送广告信标的网址。 路径：`/avails/ads/mediaFiles/trackingEvents/beaconUrls`  | 数组 |  | 
|   bitrate  |  视频资源的比特率。可执行资源通常不包含此属性。  | 字符串 | 2048 | 
|   companionAds  |  一个或多个配套广告内容规范，每个规格都指定了要使用的资源文件。配套广告附带广告可用，并提供在视频附近显示的内容，例如广告周围的画框或横幅。 路径：`/avails/ads/companionAds`  | 数组 | [] | 
|   creativeId  |  广告`Creative`标签的`Id`属性值。  | 字符串 | creative-1 | 
|   creativeSequence  |  根据 VAST 响应中的`Ad@id`值，广告的播放顺序。  | 字符串 | 1 | 
|   dashAvailabilityStartTime  |  对于 live/dynamic DASH 来说，`MPD@availabilityStartTime`原产地是显而易见的。  | 字符串 | 2022-10-05T19:38:39.263Z | 
|   delivery  |  表示是否正在使用`progressive`或`streaming`协议。  | 字符串 | progressive | 
|   eventType  |  信标的类型。 路径：`/avails/ads/mediaFiles/trackingEvents/eventType`  | 字符串 | impression | 
|   height  |  视频资源的高度（以像素为单位）。  | 字符串 | 360 | 
|   hlsAnchorMediaSequenceNumber  |  在 HLS 源清单中看到的 first/oldest 媒体序列的媒体序列号。  | 字符串 | 77 | 
|   maintainAspectRatio  |  表示缩放时是否保持视频的纵横比。  | 布尔值 | true | 
|   mediaFilesList  |  指定玩家投放广告所需的视频和其他素材。 路径：`/avails/ads/mediaFiles/mediaFilesList`  | 数组 | [] | 
|   mediaFileUri  |  指向可执行资源或视频资源的 URI。  | 字符串 | https://myad.com/ad/ad134/vpaid.js | 
|   mediaType  |  广告素材或配套资源的 MIME 类型。  | 字符串 | video/mp4 | 
|   meta  |  广告的其他元数据。  | 对象 |  | 
|   mezzanine  |  夹层资产的网址，如果 VPAID 广告 MP4 包含夹层资产的网址，则指定。 路径：`/avails/ads/mediaFiles/mezzanine`  | 字符串 | https://gcdn.2mdn.net/videoplayback/id/itag/ck2/file/file.mp4 | 
|   nextToken  |  指向下一页结果的标记的值（如果存在这样的值）。  | 字符串 | UFQzOS44NzNTXzIwMjMtMDctMzFUMTY6NTA6MDYuMzUwNjI2ODQ1Wl8x | 
|   nonLinearAds  |  出现在视频内容旁边的非线性广告。  | 数组 | [] | 
|   nonLinearAdsList  |  非线性广告清单。  | 数组 | [] | 
|   scalable  |  指示是否将视频缩放到其他尺寸。  | 布尔值 | true | 
|   skipOffset  |  时间值，用于标识玩家何时向用户提供跳过控件。  | 字符串 | 00:00:05 | 
|   staticResource  |  用于广告组件的静态广告素材文件的网址。 路径：`/avails/ads/companionAds/staticResource`  | 字符串 | https://very-interactive-ads.com/campaign1/file.json?c=1019113602 | 
|   vastAdId  |  `Ad`标签的`Id`属性值。  | 字符串 | ad1 | 
|   width  |  视频资源的宽度（以像素为单位）。  | 字符串 | 640 | 
|   xPosition  |  图标在视频播放器中的水平位置。可以是特定的像素值，也可以是 “左” 或 “右” 之类的位置。 路径：`/avails/ads/icons/attributes/xPosition`  | 字符串 | left 或 10 | 
|   yPosition  |  图标在视频播放器中的垂直位置。可以是特定的像素值，也可以是 “顶部” 或 “底部” 之类的位置。 路径：`/avails/ads/icons/attributes/yPosition`  | 字符串 | top 或 10 | 
|   iconClicks  |  包含图标的点击和跟踪信息。 路径：`/avails/ads/icons/iconClicks`  | 对象 |  | 
|   iconClickThrough  |  广告商页面的网址，当观众点击该图标时，媒体播放器会打开该网址。 路径：`/avails/ads/icons/iconClicks/iconClickThrough`  | 字符串 | https://advertiser.com/landing-page | 
|   iconClickTracking  |  该`iconClickThrough`属性的追踪网址。 路径：`/avails/ads/icons/iconClicks/iconClickTracking`  | 对象 |  | 
|   iconClickFallbackImages  |  如果无法显示图标，则要显示的备用图像数组。 路径：`/avails/ads/icons/iconClicks/iconClickFallbackImages`  | 数组 |  | 
|   iconViewTracking  |  查看图标时用于跟踪的网址。 路径：`/avails/ads/icons/iconViewTracking`  | 字符串 | https://tracking.example.com/icon-view | 
|   offset  |  广告播放期间图标何时应出现的时间偏移。 路径：`/avails/ads/icons/attributes/offset`  | 字符串 | 00:00:05 | 
|   program  |  与该图标关联的计划或计划，例如 “AdChoices”。 路径：`/avails/ads/icons/attributes/program`  | 字符串 | AdChoices | 
|   pxratio  |  图标或配套广告的像素比例，用于高 DPI 显示屏。 路径：`/avails/ads/icons/attributes/pxratio`或 `/avails/ads/companionAds/attributes/pxratio`  | 字符串 | 1 或 2 | 
|   type  |  资源或扩展的类型。 路径：`/avails/ads/extensions/type`或 `/avails/ads/adVerifications/executableResource/type`  | 字符串 | text/javascript | 
|   content  |  扩展程序的内容。 路径：`/avails/ads/extensions/content`  | 字符串 |  | 
|   language  |  可执行资源的编程语言。 路径：`/avails/ads/adVerifications/executableResource/language`  | 字符串 | javascript | 
|   browserOptional  |  表示 JavaScript 资源是否需要浏览器支持。 路径：`/avails/ads/adVerifications/javaScriptResource/browserOptional`  | 字符串 | true 或 false | 
|   id  |  架构中各种元素的标识符。 路径：`/avails/ads/companionAds/attributes/id`或 `/avails/ads/icons/iconClicks/iconClickTracking/id`  | 字符串 | companion-1 | 
|   assetHeight  |  配套广告素材资源的高度。 路径：`/avails/ads/companionAds/attributes/assetHeight`  | 字符串 | 250 | 
|   assetWidth  |  配套广告素材资源的宽度。 路径：`/avails/ads/companionAds/attributes/assetWidth`  | 字符串 | 300 | 
|   expandedHeight  |  展开后配套广告的高度。 路径：`/avails/ads/companionAds/attributes/expandedHeight`  | 字符串 | 600 | 
|   expandedWidth  |  随播广告展开后的宽度。 路径：`/avails/ads/companionAds/attributes/expandedWidth`  | 字符串 | 600 | 
|   renderingMode  |  配套广告的渲染模式。 路径：`/avails/ads/companionAds/attributes/renderingMode`  | 字符串 | default 或 transparent | 
|   adSlotId  |  应在其中展示配套广告的广告位的 ID。 路径：`/avails/ads/companionAds/attributes/adSlotId`  | 字符串 | banner-1 | 
|   creativeType  |  创意资源的 MIME 类型。 路径：`/avails/ads/icons/staticResource/creativeType`  | 字符串 | image/png | 

# 广告追踪活动时机
<a name="ad-reporting-client-side-ad-tracking-schema-activity-timing"></a>

在客户端报告中，玩家必须精确地发出跟踪事件（信标）。使用 MediaTailor 客户端跟踪架构，您可以确保每种可用性、广告、配套事件、叠加层事件和跟踪事件、时间和持续时间信息均以不同的形式存在。

使用以下 MediaTailor 键/值对让玩家准确协调广告事件活动（例如跟踪事件）和播放位置：
+ [startTime](ad-reporting-client-side-ad-tracking-schema.md#property-starttime) 
+  [startTimeInSeconds](ad-reporting-client-side-ad-tracking-schema.md#property-starttimeinseconds) 
+  [adProgramDateTime](ad-reporting-client-side-ad-tracking-schema.md#property-adprogramdatetime) 
+  [adID](ad-reporting-client-side-ad-tracking-schema.md#property-adid)/[eventId](ad-reporting-client-side-ad-tracking-schema.md#property-eventid) 

HLS 和 DASH 以`startTimeInSeconds`不同的方式实现`startTime`和的价值：
+ HLS-这些`startTime`值是相对于播放会话开始时间的。播放会话的开始时间定义为零时间。广告`startTime`是有效期之前所有`EXT-INF`细分持续时间的累积值的总和。广告或跟踪事件所在区段的媒体序列号也对应于客户端跟踪`eventId`响应中的`adId`或。
+ DASH：
  + 实时/动态清单-这些`startTime`值是相对于 DASH 清单`MPD@availabilityStartTime`的值。`MPD@avaibilityStartTime`是所有消耗直播的 MediaTailor 会话的计时锚点。
  + VOD/Static 清单-这些`startTime`值是相对于播放会话开始时间的。播放会话的开始时间定义为零时间。Avail中的每个广告都包含在自己的`Period`元素中。该`Period`元素的`@start`属性值与客户端跟踪负载中的`startTime`值相同。`PeriodId`也对应于客户端跟踪响应`eventId`中的`adId`或。

**Example HLS：**  
在以下示例中， MediaTailor 会话已启动，以下清单是第一个提供给客户端的清单：  

```
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:4603263
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:23.295678Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_34.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:27.306345Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_35.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:31.317012Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_36.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:35.327679Z
#EXTINF:4.010667,
https://123.cloudfront.net/out/v1/index_1_37.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:39.338346Z
#EXTINF:2.538667,
https://123.cloudfront.net/out/v1/index_1_38.ts
#EXT-X-DISCONTINUITY
#EXT-X-KEY:METHOD=NONE
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:41.453Z
#EXTINF:2.0,
https://123.cloudfront.net/tm/asset_1080_4_8_00001.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:43.453Z
#EXTINF:2.0,
https://123.cloudfront.net/tm/asset_1080_4_8_00002.ts
#EXT-X-PROGRAM-DATE-TIME:2023-05-03T21:24:45.453Z
#EXTINF:2.0,
https://123.cloudfront.net/tm/asset_1080_4_8_00003.ts
```
在客户端跟踪 JSON 负载中，以下值适用：  
+  `startTime`: `"PT18.581355S"` 
+  `startTimeInSeconds`: `18.581` 
+  `availProgramDateTime`: `"2023-05-03T21:24:41.453Z"` 
+  `adId`: `4603269` 

**Example DASH：**  
在以下示例中，会 MediaTailor 话在清单中获得中间滚动。请注意，第二个时段（即广告时段）的`@start`属性值具有相对于该`MPD@availabilityStartTime`值的值。此值是 MediaTailor 写入所有会话的客户端跟踪响应`startTime`字段的值。  

```
<?xml version="1.0" encoding="UTF-8"?>
<MPD availabilityStartTime="2022-10-05T19:38:39.263Z" minBufferTime="PT10S" minimumUpdatePeriod="PT2S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2023-05-03T22:06:48.411Z" suggestedPresentationDelay="PT10S" timeShiftBufferDepth="PT1M30S" type="dynamic" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd">
    <BaseURL>https://123.channel-assembly.mediatailor.us-west-2.amazonaws.com/v1/channel/my-channel/</BaseURL>
    <Location>https://123.cloudfront.net/v1/dash/94063eadf7d8c56e9e2edd84fdf897826a70d0df/MediaTailor-Live-HLS-DASH/channel/channel1/dash.mpd?aws.sessionId=794a15e0-2a7f-4941-a537-9d71627984e5</Location>
    <Period id="1683151479166_1" start="PT5042H25M59.903S" xmlns="urn:mpeg:dash:schema:mpd:2011">
        <BaseURL>https://123.cloudfront.net/out/v1/f1a946be8efa45b0931ea35c9055fb74/ddb73bf548a44551a0059c346226445a/eaa5485198bf497284559efb8172425e/</BaseURL>
        <AdaptationSet ...>
            ...
        </AdaptationSet>
    </Period>
    <Period id="1683151599194_1_1" start="PT5042H27M59.931S">
        <BaseURL>https://123.cloudfront.net/tm/94063eadf7d8c56e9e2edd84fdf897826a70d0df/fpc5omz5wzd2rdepgieibp23ybyqyrme/</BaseURL>
        <AdaptationSet ...>
            ...
        </AdaptationSet>
    </Period>
</MPD>
```
在客户端跟踪 JSON 负载中，以下值适用：  
+  `startTime`: `"PT5042H27M59.931S"` 
+  `startTimeInSeconds`: `18152879.931` 
+  `availProgramDateTime`: *null* 
+  `adId`: `1683151599194_1_1` 

# 用于客户端广告跟踪的玩家控制和功能
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls"></a>

MediaTailor 客户端跟踪元数据支持各种玩家控件和功能。以下列表描述了常用的播放器控件。

**Topics**
+ [擦洗](#ad-reporting-client-side-ad-tracking-schema-player-controls-scrubbing)
+ [广告倒计时器](#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-countdown-timer)
+ [可跳过的广告](#ad-reporting-client-side-ad-tracking-schema-player-controls-skippable-ads)
+ [广告点击](#ad-reporting-client-side-ad-tracking-schema-player-controls-ad-clickthrough)
+ [配套广告](#ad-reporting-client-side-ad-tracking-schema-player-controls-companion-ads)
+ [互动广告 (SIMID)](#ad-reporting-client-side-ad-tracking-schema-player-controls-simid-ads)
+ [互动广告（VPAID）](#ad-reporting-client-side-ad-tracking-schema-player-controls-vpaid-ads)
+ [Google 的图标为什么是这个广告 (WTA)](#ad-reporting-client-side-ad-tracking-schema-player-controls-google-wta)

## 擦洗
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-scrubbing"></a>

为了增强播放体验，播放器可以在播放时间轴中显示广告位置。 MediaTailor 在客户端跟踪响应中以`startTimeInSeconds`值的形式显示这些广告位置。

**注意**  
一些流媒体提供商会阻止用户越过广告位置。

![\[屏幕截图显示了视频时间轴中广告播放位置的 MediaTailor 标记位置。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/scrubbing.png)


以下客户端跟踪负载 JSON 响应显示了 avails 数组的根 JSON 对象内的可用性（广告中断）开始时间。玩家使用此数据在玩家时间轴上显示广告时段的位置，时间为 28 秒。

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [...],
      "availId": "7",
      "availProgramDateTime": null,
      "duration": "PT30S",
      "durationInSeconds": 30,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT28S",
      "startTimeInSeconds": 28
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMk0zNC44NjhTXzIwMjMtMDctMjFUMjA6MjM6MDcuNzc1NzE2MzAyWl8x",
  "nonLinearAvails": []
}
```

## 广告倒计时器
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-ad-countdown-timer"></a>

借助广告倒计时器， MediaTailor 您可以使用广告倒计时器来帮助您的受众在广告时段观看期间保持参与度。受众可以使用计时器来了解广告时段何时结束以及他们的节目何时恢复。

![\[屏幕截图 MediaTailor 显示了广告倒计时器，该计时器告诉受众距离节目恢复还有多长时间。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad-countdown-timer.png)


客户端跟踪元数据中在广告倒计时器中起作用的元素是`startTime`、`startTimeInSeconds``duration`、和`durationInSeconds`。玩家使用此元数据以及单独跟踪的会话经过的时间，来确定何时显示计时器以及计时器应从哪个值开始倒计时。

以下客户端跟踪负载 JSON 响应显示了显示广告倒计时器所需的信息。

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [...],
      "availId": "7",
      "availProgramDateTime": null,
      "duration": "PT30S",
      "durationInSeconds": 30,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT28S",
      "startTimeInSeconds": 28
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMk0zNC44NjhTXzIwMjMtMDctMjFUMjA6MjM6MDcuNzc1NzE2MzAyWl8x",
  "nonLinearAvails": []
}
```

当会话的经过时间达到可用性的开始时间时，玩家会显示一个倒数计时器，其值与该任务的持续时间相匹配。倒计时计时器值随着经过的时间超出可用性的开始时间而减小。

**Example 公式：HLS（直播和 VOD）和 DASH（VOD）的倒计时器**  
+ `session_start_time`= 所有`EXT-INF`时长值的总和-三个最新`EXT-INF`媒体序列的时长值
+ 计时器值 = `duration`-(`session_elapsed_time`-`startTime`)

![\[该图显示了 HLS（直播和 VOD）和 DASH（VOD）清单的广告倒计时器的计算结果，该计时器基于会话的开始时间和 avail 的开始时间。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad-countdown-timer-hls-dash-vod.png)


**Example 公式：DASH 的倒计时器（直播）**  
+ `session_start_time`=（最新片段 `startTime` \$1`duration`）/`timescale`-`MPD@suggestedPresentationDelay`
+ 计时器值 = `duration`-(`session_elapsed_time`-`startTime`)

![\[该图显示了基于会话开始时间和 avail's 开始时间计算的直播 DASH 清单的广告倒计时器。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad-countdown-timer-dash-live.png)


## 可跳过的广告
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-skippable-ads"></a>

*可跳过的广告*是允许观众跳过部分广告以继续观看节目的广告位。在 VAST 中，该`Linear@skipOffset`属性用于标识可跳过的广告。

以下 VAST 响应显示了如何使用可跳过的广告：

```
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad>
    <InLine>
      ...
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear skipoffset="00:00:05">
            <Duration>00:00:15</Duration>
            <MediaFiles>
              <MediaFile id="EMT" delivery="progressive" width="640" height="360" type="video/mp4" bitrate="143" scalable="true" maintainAspectRatio="true"><![CDATA[https://ads.com/file.mp4]]></MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
      ...
    </InLine>
  </Ad>
</VAST>
```

以下客户端跟踪负载 JSON 响应显示了`ads`数组内的广告元数据。该数组包含从 VAST 响应中 MediaTailor获得的`skipOffset`值。

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:11:40.693Z",
          "adSystem": "2.0",
          "adTitle": "AD-skiing-15",
          "adVerifications": [],
          "companionAds": [...],
          "creativeId": "1",
          "creativeSequence": "1",
          "duration": "PT15.015S",
          "durationInSeconds": 15.015,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": "00:00:05",
          "startTime": "PT9.943S",
          "startTimeInSeconds": 9.943,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://adserverbeaconing.com/v1/impression"
              ],
              "duration": "PT15.015S",
              "durationInSeconds": 15.015,
              "eventId": "2697726",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT9.943S",
              "startTimeInSeconds": 9.943
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2697726",
      "availProgramDateTime": "2023-07-31T16:11:40.693Z",
      "duration": "PT15.015S",
      "durationInSeconds": 15.015,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT9.943S",
      "startTimeInSeconds": 9.943
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "",
  "nonLinearAvails": []
}
```

## 广告点击
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-ad-clickthrough"></a>

点击可 URIs 让广告商衡量广告在吸引观众注意力方面的成功程度。在观看者点击正在进行的广告的有效视频帧后，网络浏览器会打开广告主主页或广告系列登录页面的 URI。玩家开发者决定点击行为，例如将按钮或标签叠加在广告视频上，并附上需要点击的消息，以了解更多信息。玩家开发者通常会在观众点击当前视频帧后暂停广告的视频。

![\[视频播放器中广告点击的屏幕截图。观看者点击视频画面。玩家暂停视频，然后打开网络浏览器，将观看者带到广告商的主页或广告活动登录页面。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/ad-clickthrough.png)


MediaTailor 可以解析并提供 VAST 响应中 URLs 返回的任何线性视频点击事件。以下 VAST 响应显示了广告点击示例。

```
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad>
    <InLine>
      ...
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear>
            <Duration>00:00:15</Duration>
            <MediaFiles>
              <MediaFile id="EMT" delivery="progressive" width="1280" height="720" type="video/mp4" bitrate="143" scalable="true" maintainAspectRatio="true"><![CDATA[https://ads.com/file.mp4]]></MediaFile>
            </MediaFiles>
            <VideoClicks>
              <ClickThrough id="EMT"><![CDATA[https://aws.amazon.com]]></ClickThrough>
              <ClickTracking id="EMT"><![CDATA[https://myads.com/beaconing/event=clicktracking]]></ClickTracking>
            </VideoClicks>
          </Linear>
        </Creative>
      </Creatives>
      ...
    </InLine>
  </Ad>
</VAST>
```

以下客户端跟踪负载 JSON 响应显示了如何在 MediaTailor 数组中显示点击和点击 URLs 跟踪。`trackingEvents``clickThrough`事件类型代表点击广告，`clickTracking`事件类型代表点击跟踪网址。

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:53:40.577Z",
          "adSystem": "2.0",
          "adTitle": "1",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "00006",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT39.339S",
          "startTimeInSeconds": 39.339,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://aws.amazon.com"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "clickThrough",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=clicktracking"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698795",
              "eventProgramDateTime": null,
              "eventType": "clickTracking",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2698188",
      "availProgramDateTime": "2023-07-31T16:53:40.577Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT39.339S",
      "startTimeInSeconds": 39.339
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQzOS4zMzlTXzIwMjMtMDctMzFUMTY6NTQ6MDQuODA1Mzk2NTI5Wl8x",
  "nonLinearAvails": []
}
```

## 配套广告
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-companion-ads"></a>

配*套广告*与线性广告一起显示。使用配套广告通过展示产品、徽标和品牌信息来提高广告位的有效性。展示广告可以包含快速响应 (QR) 码和可点击区域，以提高受众的参与度。

MediaTailor 在 VAST 响应中支持配套广告。它可以分别传递来自`StaticResource``iFrameResource`、和`HTMLResource`节点的元数据。

以下 VAST 响应显示了线性广告和配套广告的位置和格式示例。

```
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad>
    <InLine>
      ...
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear>
            <Duration>00:00:10</Duration>
            <MediaFiles>
              <MediaFile id="EMT" delivery="progressive" width="640" height="360" type="video/mp4" bitrate="143" scalable="true" maintainAspectRatio="true"><![CDATA[https://ads.com/file.mp4]]></MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
        <Creative id="2" sequence="1">
          <CompanionAds>
            <Companion id="2" width="300" height="250">
              <StaticResource creativeType="image/png"><![CDATA[https://emt.com/companion/9973499273]]></StaticResource>
              <TrackingEvents>
                <Tracking event="creativeView"><![CDATA[https://beacon.com/1]]></Tracking>
              </TrackingEvents>
              <CompanionClickThrough><![CDATA[https://beacon.com/2]]></CompanionClickThrough>
            </Companion>
            <Companion id="3" width="728" height="90">
              <StaticResource creativeType="image/png"><![CDATA[https://emt.com/companion/1238901823]]></StaticResource>
              <TrackingEvents>
                <Tracking event="creativeView"><![CDATA[https://beacon.com/3]]></Tracking>
              </TrackingEvents>
              <CompanionClickThrough><![CDATA[https://beacon.com/4]]></CompanionClickThrough>
            </Companion>
          </CompanionAds>
        </Creative>
      </Creatives>
      ...
    </InLine>
  </Ad>
</VAST>
```

数据显示在`/avail/x/ads/y/companionAds`列表中的客户端跟踪响应中。每个线性广告最多可以包含 6 个配套广告。如下例所示，随播广告显示在列表中

**注意**  
作为最佳实践，应用程序开发者应实现逻辑，以便在广告素材结尾处明确移除或卸载配套广告。

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "0",
          "adParameters": "",
          "adProgramDateTime": null,
          "adSystem": "EMT",
          "adTitle": "sample",
          "adVerifications": [],
          "companionAds": [
            {
              "adParameters": null,
              "altText": null,
              "attributes": {
                "adSlotId": null,
                "apiFramework": null,
                "assetHeight": null,
                "assetWidth": null,
                "expandedHeight": null,
                "expandedWidth": null,
                "height": "250",
                "id": "2",
                "pxratio": null,
                "renderingMode": null,
                "width": "300"
              },
              "companionClickThrough": "https://beacon.com/2",  
              "companionClickTracking": null,
              "htmlResource": null,
              "iFrameResource": null,
              "sequence": "1",
              "staticResource": "https://emt.com/companion/9973499273",
              "trackingEvents": [
                {
                  "beaconUrls": [
                    "https://beacon.com/1"
                  ],
                  "eventType": "creativeView"
                }
              ]
            },
            {
              "adParameters": null,
              "altText": null,
              "attributes": {
                "adSlotId": null,
                "apiFramework": null,
                "assetHeight": null,
                "assetWidth": null,
                "expandedHeight": null,
                "expandedWidth": null,
                "height": "90",
                "id": "3",
                "pxratio": null,
                "renderingMode": null,
                "width": "728"
              },
              "companionClickThrough": "https://beacon.com/4",
              "companionClickTracking": null,
              "htmlResource": null,
              "iFrameResource": null,
              "sequence": "1",
              "staticResource": "https://emt.com/companion/1238901823",
              "trackingEvents": [
                {
                  "beaconUrls": [
                    "https://beacon.com/3"
                  ],
                  "eventType": "creativeView"
                }
              ]
            }
          ],
          "creativeId": "1",
          "creativeSequence": "1",
          "duration": "PT10S",
          "durationInSeconds": 10,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT0S",
          "startTimeInSeconds": 0,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://beacon.com/impression/1"
              ],
              "duration": "PT10S",
              "durationInSeconds": 10,
              "eventId": "0",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT0S",
              "startTimeInSeconds": 0
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "0",
      "availProgramDateTime": null,
      "duration": "PT10S",
      "durationInSeconds": 10,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT0S",
      "startTimeInSeconds": 0
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMFNfMjAyMy0wNy0wNlQyMToxMDowOC42NzQ4NDA1NjJaXzE%3D",
  "nonLinearAvails": []
}
```

## 互动广告 (SIMID)
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-simid-ads"></a>

*SecureInteractive 媒体接口定义* (SIMID) 是互动广告管理局 (IAB) 在 VAST 4.x 标准中引入的互动广告标准。SIMID 将互动元素的加载与播放器上的主要线性素材分开，在 VAST 响应中同时引用了这两者。 MediaTailor 在主素材中缝合以保持播放体验，并将交互组件的元数据放在客户端的跟踪响应中。

在以下 VAST 4 响应示例中，SIMID 有效负载位于`InteractiveCreativeFile`节点内部。

```
<?xml version="1.0"?>
<VAST xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad id="1234567">
    <InLine>
      <AdSystem>SampleAdSystem</AdSystem>
      <AdTitle>Linear SIMID Example</AdTitle>
      <Description>SIMID example</Description>
      <Error>https://www.beacons.com/error</Error>
      <Impression>https://www.beacons.com/impression</Impression>
      <Creatives>
        <Creative sequence="1">
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
                ...
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough id="123">https://aws.amazon.com</ClickThrough>
              <ClickTracking id="123">https://www.beacons.com/click</ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4">
                                https://interactive-ads.com/interactive-media-ad-sample/media/file.mp4
                            </MediaFile>
              <InteractiveCreativeFile type="text/html" apiFramework="SIMID" variableDuration="true">
                                https://interactive-ads.com/interactive-media-ad-sample/sample_simid.html
                            </InteractiveCreativeFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>
```

在以下 VAST 3 响应中，SIMID 有效载荷位于`Extensions`节点内部。

```
<?xml version="1.0"?>
<VAST xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad id="1234567">
    <InLine>
      <AdSystem>SampleAdSystem</AdSystem>
      <AdTitle>Linear SIMID Example</AdTitle>
      <Description>SIMID example</Description>
      <Impression>https://www.beacons.com/impression</Impression>
      <Creatives>
        <Creative id="1" sequence="1">
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
                ...
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough id="123">https://aws.amazon.com</ClickThrough>
              <ClickTracking id="123">https://myads.com/beaconing/event=clicktracking</ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4">
                                https://interactive-ads.com/interactive-media-ad-sample/media/file.mp4
                            </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
      <Extensions>
        <Extension type="InteractiveCreativeFile">
          <InteractiveCreativeFile type="text/html" apiFramework="SIMID" variableDuration="true">
            https://interactive-ads.com/interactive-media-ad-sample/sample_simid.html
          </InteractiveCreativeFile>
        </Extension>
      </Extensions>
    </InLine>
  </Ad>
</VAST>
```

在以下客户端跟踪响应中，SIMID 数据显示在列表中。`/avails/x/ads/y/extensions`

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:53:40.577Z",
          "adSystem": "2.0",
          "adTitle": "Linear SIMID Example",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "1",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [
            {
              "content": "<InteractiveCreativeFile type=\"text/html\" apiFramework=\"SIMID\" variableDuration=\"true\">\nhttps://interactive-ads.com/interactive-media-ad-sample/sample_simid.html</InteractiveCreativeFile>",
              "type": "InteractiveCreativeFile"
            }
          ],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT39.339S",
          "startTimeInSeconds": 39.339,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://aws.amazon.com"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "clickThrough",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=clicktracking"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698795",
              "eventProgramDateTime": null,
              "eventType": "clickTracking",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2698188",
      "availProgramDateTime": "2023-07-31T16:53:40.577Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT39.339S",
      "startTimeInSeconds": 39.339
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQzOS4zMzlTXzIwMjMtMDctMzFUMTY6NTQ6MDQuODA1Mzk2NTI5Wl8x",
  "nonLinearAvails": []
}
```

## 互动广告（VPAID）
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-vpaid-ads"></a>

*视频播放器广告界面定义* (VPAID) 规定了广告和视频播放器之间支持广告互动和其他功能的协议。对于直播， MediaTailor 支持 VPAID 格式，方法是在可用期间拼接标题片段，然后在视频播放器使用的客户端跟踪响应中放置 VPAID 广告素材的元数据。玩家下载 VPAID 文件并播放线性广告素材并执行客户端的脚本。玩家永远*不*应该玩 slate 片段。

**注意**  
从 VAST 4.1 起，VPAID 已被弃用。

![\[VPAID 广告播放示意图。 MediaTailor 在内容时间轴中为可用时长拼接板片段。玩家在有效期内切换到 VPAID 资产。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/interactive-ads-vpaid.png)


以下示例显示了 VAST 响应中的 VPAID 内容。

```
<?xml version="1.0"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
  <Ad id="1234567">
    <InLine>
      <AdSystem>GDFP</AdSystem>
      <AdTitle>VPAID</AdTitle>
      <Description>Vpaid Linear Video Ad</Description>
      <Error>http://www.example.com/error</Error>
      <Impression>http://www.example.com/impression</Impression>
      <Creatives>
        <Creative sequence="1">
          <Linear>
            <Duration>00:00:00</Duration>
            <TrackingEvents>
              <Tracking event="start">http://www.example.com/start</Tracking>
              <Tracking event="firstQuartile">http://www.example.com/firstQuartile</Tracking>
              <Tracking event="midpoint">http://www.example.com/midpoint</Tracking>
              <Tracking event="thirdQuartile">http://www.example.com/thirdQuartile</Tracking>
              <Tracking event="complete">http://www.example.com/complete</Tracking>
              <Tracking event="mute">http://www.example.com/mute</Tracking>
              <Tracking event="unmute">http://www.example.com/unmute</Tracking>
              <Tracking event="rewind">http://www.example.com/rewind</Tracking>
              <Tracking event="pause">http://www.example.com/pause</Tracking>
              <Tracking event="resume">http://www.example.com/resume</Tracking>
              <Tracking event="fullscreen">http://www.example.com/fullscreen</Tracking>
              <Tracking event="creativeView">http://www.example.com/creativeView</Tracking>
              <Tracking event="acceptInvitation">http://www.example.com/acceptInvitation</Tracking>
            </TrackingEvents>
            <AdParameters><![CDATA[ {"videos":[ {"url":"https://my-ads.com/interactive-media-ads/media/media_linear_VPAID.mp4","mimetype":"video/mp4"}]} ]]></AdParameters>
            <VideoClicks>
              <ClickThrough id="123">http://google.com</ClickThrough>
              <ClickTracking id="123">http://www.example.com/click</ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" apiFramework="VPAID" type="application/javascript" width="640" height="480"> https://googleads.github.io/googleads-ima-html5/vpaid/linear/VpaidVideoAd.js </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>
```

以下示例显示了追踪信息。

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "1",
          "adParameters": "",
          "adProgramDateTime": "2023-07-31T16:53:40.577Z",
          "adSystem": "2.0",
          "adTitle": "1",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "00006",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT39.339S",
          "startTimeInSeconds": 39.339,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://aws.amazon.com"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698188",
              "eventProgramDateTime": null,
              "eventType": "clickThrough",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            },
            {
              "beaconUrls": [
                "https://myads.com/beaconing/event=clicktracking"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "2698795",
              "eventProgramDateTime": null,
              "eventType": "clickTracking",
              "startTime": "PT39.339S",
              "startTimeInSeconds": 39.339
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "2698188",
      "availProgramDateTime": "2023-07-31T16:53:40.577Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT39.339S",
      "startTimeInSeconds": 39.339
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQzOS4zMzlTXzIwMjMtMDctMzFUMTY6NTQ6MDQuODA1Mzk2NTI5Wl8x",
  "nonLinearAvails": []
}{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "2922274",
          "adParameters": "",
          "adProgramDateTime": "2023-08-14T19:49:53.998Z",
          "adSystem": "Innovid Ads",
          "adTitle": "VPAID",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "",
          "creativeSequence": "",
          "duration": "PT16.016S",
          "durationInSeconds": 16.016,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [
              {
                "apiFramework": "VPAID",
                "bitrate": 0,
                "codec": null,
                "delivery": "progressive",
                "height": 9,
                "id": "",
                "maintainAspectRatio": false,
                "maxBitrate": 0,
                "mediaFileUri": "http://my-ads.com/mobileapps/js/vpaid/1h41kg?cb=178344c0-8e67-281a-58ca-962e4987cd60&deviceid=&ivc=",
                "mediaType": "application/javascript",
                "minBitrate": 0,
                "scalable": false,
                "width": 16
              }
            ],
            "mezzanine": "http://my-ads.com/mobileapps/js/vpaid/1h41kg?cb=178344c0-8e67-281a-58ca-962e4987cd60&deviceid=&ivc="
          },
          "skipOffset": null,
          "startTime": "PT8M42.289S",
          "startTimeInSeconds": 522.289,
          "trackingEvents": [
            {
              "beaconUrls": [
                "about:blank"
              ],
              "duration": "PT16.016S",
              "durationInSeconds": 16.016,
              "eventId": "2922274",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT8M42.289S",
              "startTimeInSeconds": 522.289
            }
          ],
          "vastAdId": "1h41kg"
        }
      ],
      "availId": "2922274",
      "availProgramDateTime": "2023-08-14T19:49:53.998Z",
      "duration": "PT16.016S",
      "durationInSeconds": 16.016,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT8M42.289S",
      "startTimeInSeconds": 522.289
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQ4TTQyLjI4OVNfMjAyMy0wOC0xNFQxOTo1MDo0MS4zOTc5MjAzODVaXzE%3D",
  "nonLinearAvails": []
}
```

## Google 的图标为什么是这个广告 (WTA)
<a name="ad-reporting-client-side-ad-tracking-schema-player-controls-google-wta"></a>

*AdChoices*是一项行业标准，它为观众提供有关他们看到的广告的信息，包括这些广告是如何定位到他们的。

![\[谷歌 Why This Ad (WTA) 徽标。WTA 会告知观众他们看到的广告，包括这些广告是如何针对他们的。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/google-wta.png)


 MediaTailor 客户端跟踪 API 支持 VAST 响应的 VAST 扩展节点中携带的图标元数据。有关 VAST 响应中的 WTA 的更多信息，请参阅[此示例 VAST XML 响应](https://storage.googleapis.com/interactive-media-ads/ad-tags/ima_wta_sample_vast_3.xml)。

**注意**  
MediaTailor 目前仅支持 VAST 版本 3。

```
<VAST>
    <Ad>  
    <InLine>  
       ...
      <Extensions>
        <Extension type="IconClickFallbackImages">
          <IconClickFallbackImages program="GoogleWhyThisAd">
            <IconClickFallbackImage width="400" height="150">
              <AltText>Alt icon fallback</AltText>
              <StaticResource creativeType="image/png"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png]]></StaticResource>
            </IconClickFallbackImage>
          </IconClickFallbackImages>
          <IconClickFallbackImages program="AdChoices">
            <IconClickFallbackImage width="400" height="150">
              <AltText>Alt icon fallback</AltText>
              <StaticResource creativeType="image/png"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=1x]]></StaticResource>
            </IconClickFallbackImage>
            <IconClickFallbackImage width="800" height="300">
              <AltText>Alt icon fallback</AltText>
              <StaticResource creativeType="image/png"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=2x]]></StaticResource>
            </IconClickFallbackImage>
          </IconClickFallbackImages>
        </Extension>
      </Extensions>
    </InLine>
  </Ad>
</VAST>
```

以下示例显示`/avails/x/ads/y/extensions`列表中的客户端跟踪响应。

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "0",
          "adParameters": "",
          "adProgramDateTime": null,
          "adSystem": "GDFP",
          "adTitle": "Google Why This Ad VAST 3 Sample",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "7891011",
          "creativeSequence": "1",
          "duration": "PT10S",
          "durationInSeconds": 10,
          "extensions": [
            {
              "content": "<IconClickFallbackImages program=\"GoogleWhyThisAd\">      
                          <IconClickFallbackImage height=\"150\" width=\"400\">      
                          <AltText>Alt icon fallback</AltText>      
                          <StaticResource creativeType=\"image/png\"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png]]>
                          </StaticResource>     
                          </IconClickFallbackImage>    
                          </IconClickFallbackImages>     
                          <IconClickFallbackImages program=\"AdChoices\">     
                          <IconClickFallbackImage height=\"150\" width=\"400\">     
                          <AltText>Alt icon fallback</AltText>       
                          <StaticResource creativeType=\"image/png\"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=1x]]>
                          </StaticResource>      
                          </IconClickFallbackImage>      
                          <IconClickFallbackImage height=\"300\" width=\"800\">       
                          <AltText>Alt icon fallback</AltText>       
                          <StaticResource creativeType=\"image/png\"><![CDATA[https://storage.googleapis.com/interactive-media-ads/images/wta_dialog.png?size=2x]]>
                          </StaticResource>      
                          </IconClickFallbackImage>     
                          </IconClickFallbackImages>",
              "type": "IconClickFallbackImages"
            }
          ],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": "00:00:03",
          "startTime": "PT0S",
          "startTimeInSeconds": 0,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://example.com/view"
              ],
              "duration": "PT10S",
              "durationInSeconds": 10,
              "eventId": "0",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT0S",
              "startTimeInSeconds": 0
            }
          ],
          "vastAdId": "123456"
        }
      ],
      "availId": "0",
      "availProgramDateTime": null,
      "duration": "PT10S",
      "durationInSeconds": 10,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT0S",
      "startTimeInSeconds": 0
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMFNfMjAyMy0wNy0wNlQyMDo0MToxNy45NDE4MDM0NDhaXzE%3D",
  "nonLinearAvails": []
}
```

# 客户端信标
<a name="ad-reporting-client-side-beaconing"></a>

借助客户端跟踪`startTimeInSeconds`元素，您可以使用 MediaTailor 来支持信标计时。

以下 JSON 响应显示了主要的信标类型：展示次数、开始次数、四分位数和完成量。

**注意**  
互动广告局 (IAB) 的《视频展示量衡量指南》规定，展示次数要求广告内容在客户端加载，并且至少要有开始向玩家呈现的时间。有关更多信息，请参阅 IAB 网站上的[数字视频广告投放模板 (VAST)](https://www.iab.com/guidelines/vast/)。

```
{
  "avails": [
    {
      "ads": [
        {
          "adId": "8104385",
          "duration": "PT15.100000078S",
          "durationInSeconds": 15.1,
          "startTime": "PT17.817798612S",
          "startTimeInSeconds": 17.817,
          "trackingEvents": [
          {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=impression"
              ],
              "duration": "PT15.100000078S",
              "durationInSeconds": 15.1,
              "eventId": "8104385",
              "eventType": "impression",
              "startTime": "PT17.817798612S",
              "startTimeInSeconds": 17.817
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=start"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104385",
              "eventType": "start",
              "startTime": "PT17.817798612S",
              "startTimeInSeconds": 17.817
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=firstQuartile"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104386",
              "eventType": "firstQuartile",
              "startTime": "PT21.592798631S",
              "startTimeInSeconds": 21.592
            },
             {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=midpoint"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104387",
              "eventType": "midpoint",
              "startTime": "PT25.367798651S",
              "startTimeInSeconds": 25.367
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=thirdQuartile"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104388",
              "eventType": "thirdQuartile",
              "startTime": "PT29.14279867S",
              "startTimeInSeconds": 29.142
            },
            {
              "beaconUrls": [
                "http://exampleadserver.com/tracking?event=complete"
              ],
              "duration": "PT0S",
              "durationInSeconds": 0.0,
              "eventId": "8104390",
              "eventType": "complete",
              "startTime": "PT32.91779869S",
              "startTimeInSeconds": 32.917
            }
          ]
        }
      ],
      "availId": "8104385",
      "duration": "PT15.100000078S",
      "durationInSeconds": 15.1,
      "startTime": "PT17.817798612S",
      "startTimeInSeconds": 17.817
    }
  ]
}
```

# 带有服务器端广告信标的混合模式
<a name="ad-reporting-hybrid-mode"></a>

MediaTailor 支持用于会话跟踪的混合模式。在此模式下，该服务会发出与播放相关的广告跟踪事件，但会话可以使用完整的客户端跟踪有效负载

要使用播放前缀启用混合跟踪，请根据您的协议，使用以下格式之一的请求从 MediaTailor 播放器初始化新的播放会话：

**Example : HLS 格式**  

```
POST master.m3u8
    {
        "adsParams": {
           "deviceType": "ipad"
       },
       "reportingMode":"server"
    }
```

**Example : 达世币格式**  

```
POST manifest.mpd
    {
        "adsParams": {
           "deviceType": "ipad"
       },
       "reportingMode":"server"
    }
```

MediaTailor 在混合模式下维护以下跟踪事件：
+ 印象
+ 晚于
+ 第一四分位数
+ Midpoint
+ 第三四分位数
+ 完成
+ `breakStart`(vmap)
+ `breakEnd`(vmap)

# 客户端广告跟踪集成
<a name="ad-reporting-client-side-ad-tracking-integrations"></a>

本节介绍各种客户端广告跟踪服务器 MediaTailor 之间的集成。

**Topics**
+ [打开测量 SDK](#ad-reporting-client-side-ad-tracking-integrations-open-measurement-sdk)
+ [Datazoom 免费播放器 SDKs](#ad-reporting-client-side-ad-tracking-integrations-dz)
+ [Roku 广告框架 (RAF)](#ad-reporting-client-side-ad-tracking-integrations-raf)
+ [TheoPlayer](#ad-reporting-client-side-ad-tracking-integrations-theoplayer)
+ [MediaTailor SDK](#ad-reporting-client-side-ad-tracking-integrations-mediatailor-sdk)

## 打开测量 SDK
<a name="ad-reporting-client-side-ad-tracking-integrations-open-measurement-sdk"></a>

互动广告局 (IAB) Open Measurement SDK (OM SDK) 便于第三方对投放到网络视频和原生应用环境的广告进行可见性和验证性评估。

对于较旧的 VAST 版本 3 文档，应使用扩展节点加载验证码，并带有扩展类型`AdVerifications`。扩展节点的根`AdVerifications`节点是与 VAST 4.1 元素具有相同架构的节点。

为了便于更轻松地采用 OM SDK， MediaTailor 已与 Datazoom 合作 SDKs ，免费提供针对开放测量进行配置和验证的播放器。有关更多信息，请参阅 [Datazoom 免费播放器 SDKs](#ad-reporting-client-side-ad-tracking-integrations-dz)。

**注意**  
MediaTailor 目前仅支持 VAST 版本 3。

**Example : VAST 3 中的验证节点，4.1 之前的版本**  

```
...
<Extensions>
    <Extension type="AdVerifications">
        <AdVerifications>
            <Verification vendor="company.com-omid">
                <JavaScriptResource apiFramework="omid" browserOptional="true">
                    <![CDATA[https://verification.com/omid_verification.js]]>
                </JavaScriptResource>
                <TrackingEvents>
                    <Tracking event="verificationNotExecuted">
                        <![CDATA[https://verification.com/trackingurl]]>
                    </Tracking>
                </TrackingEvents>
                <VerificationParameters>
                    <![CDATA[verification params key/value pairs]]>
                </VerificationParameters>
            </Verification>
        </AdVerifications>
    </Extension>
</Extensions>
```

MediaTailor 从`<Extensions>`节点提取`AdVerifications`数据并将其放入客户端跟踪响应中的`adVerifications`数组中。

**Example : 客户端跟踪响应中的广告数组**  

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "adMarkerDuration": null,
      "ads": [
        {
          "adId": "3062770",
          "adParameters": "",
          "adProgramDateTime": "2023-08-23T16:25:40.914Z",
          "adSystem": "2.0",
          "adTitle": "AD-polarbear-15",
          "adVerifications": [
            {
              "executableResource": [],
              "javaScriptResource": [
                {
                  "apiFramework": "omid",
                  "browserOptional": "true",
                  "uri": "https://verification.com/omid_verification.js"
                }
              ],
              "trackingEvents": [
                {
                  "event": "verificationNotExecuted",
                  "uri": "https://verification.com/trackingurl"
                }
              ],
              "vendor": "company.com-omid",
              "verificationParameters": "verification params key value pairs"
            }
          ],
          "companionAds": [],
          "creativeId": "00006",
          "creativeSequence": "1",
          "duration": "PT14.982S",
          "durationInSeconds": 14.982,
          "extensions": [
            {
              "content": "<AdVerifications>\n\t\t\t\t\t\t<Verification vendor=\"company.com-omid\">\n\t\t\t\t\t\t\t<JavaScriptResource apiFramework=\"omid\" browserOptional=\"true\"><![CDATA[https://verification.com/omid_verification.js;]]></JavaScriptResource>\n\t\t\t\t\t\t\t<TrackingEvents>\n\t\t\t\t\t\t\t\t<Tracking event=\"verificationNotExecuted\"><![CDATA[;https://verification.com/trackingurl;]]></Tracking>\n\t\t\t\t\t\t\t</TrackingEvents>\n\t\t\t\t\t\t\t<VerificationParameters><![CDATA[verification params key/value pairs;]]></VerificationParameters>\n\t\t\t\t\t\t</Verification>\n\t\t\t\t\t</AdVerifications>",
              "type": "AdVerifications"
            }
          ],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT10.11S",
          "startTimeInSeconds": 10.11,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://n8ljfs0h09.execute-api.us-west-2.amazonaws.com/v1/impression"
              ],
              "duration": "PT14.982S",
              "durationInSeconds": 14.982,
              "eventId": "3062770",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT10.11S",
              "startTimeInSeconds": 10.11
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "3062770",
      "availProgramDateTime": "2023-08-23T16:25:40.914Z",
      "duration": "PT14.982S",
      "durationInSeconds": 14.982,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT10.11S",
      "startTimeInSeconds": 10.11
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": "UFQxMC4xMVNfMjAyMy0wOC0yM1QxNjoyNjoyNC4yNDYxMDIxOTBaXzE%3D",
  "nonLinearAvails": []
}
```

**注意**  
与 IAB 技术实验室合作，确保应用程序每年都经过认证，以确保合规性。

有关 OM SDK 的更多信息，请参阅 IAB 技术实验室网站上的[开放测量 SDK](https://iabtechlab.com/standards/open-measurement-sdk/)。

## Datazoom 免费播放器 SDKs
<a name="ad-reporting-client-side-ad-tracking-integrations-dz"></a>

为了便于更轻松地采用该播放器 SDKs， MediaTailor 已与Datazoom合作 SDKs ，免费提供使用和IAB Tech进行配置[与 Google 广告管理器的客户端 AWS Elemental MediaTailor 集成](gam-integration-pal.md)和测试的播放器。[打开测量 SDK](#ad-reporting-client-side-ad-tracking-integrations-open-measurement-sdk)

Datazoom 播放器 SDK 支持以下功能：
+ 直播和 VOD 播放列表
+ DASH 和 HLS 规格
+ 玩家供应商支持 Bitmovin、exoplayer、安卓媒体播放器、苹果、Brightcove AVPlayer、Chromecast Receiver、Dash.js、hls.js、Shaka 播放器、THEO 播放器 JWPlayer、Video.js、Roku 等
+ IAB Tech Lab 开放测量认证，仅适用于特定设备
+ 点击事件处理
+ 广告事件调度器，例如广告倒计时器、广告叠加和非线性事件、广告时段开始、广告插播结束
+ 客户端广告信标
+ Google 编程访问库 (PAL) SDK，作为可选配置设置

Datazoom还提供玩家支持的付费分析和遥测服务。 SDKs客户可以从 Datazoom 管理控制台选择并控制玩家 SDK 遥测功能。[要访问Datazoom播放器 SDKs 并了解有关增值遥测和分析服务的更多信息，请使用Datazoom网站上的联系信息。](https://www.datazoom.io/partner-aws)

## Roku 广告框架 (RAF)
<a name="ad-reporting-client-side-ad-tracking-integrations-raf"></a>

Roku广告框架（RAF）在整个Roku平台上保持一致的广告体验。所有频道，包括视频广告，都必须符合Roku对英国皇家空军的认证要求。值得注意的是，该应用程序必须始终使用通过英国皇家空军触发的客户端事件。 MediaTailor，作为服务器端广告插入 (SSAI) 提供商，支持客户端事件触发。RAFX SSAI 适配器为 SSAI 清单服务器（拼接器）和 RAF 提供接口。这些接口包括：
+ 解析`masterURL`响应并提取`playURL``AdURL`、和广告元数据。
+ 将 MediaTailor SSAI 广告元数据转换为 RAF 可用的广告元数据，并配置 RAF 进行播放。
+ 观察直播事件和定时元数据。
+ 按时匹配直播事件、广告元数据和触发事件像素。
+ 按照 MediaTailor SSAI 清单服务器的`AdURL`要求执行 Ping/轮询，然后解析和重新配置 RAF。

有关适用于 RAF 的 SSAI 适配器的更多信息，请参阅 Roku 网站上的[使用 Roku 适配器实现服务器端广告插入](https://developer.roku.com/docs/developer-program/advertising/ssai-adapters.md)。

## TheoPlayer
<a name="ad-reporting-client-side-ad-tracking-integrations-theoplayer"></a>

TheoPlayer 与集成执行以下 MediaTailor 操作：
+ 提供支持 VOD 和直播工作流程的 HLS 和 DASH MediaTailor 客户端事件跟踪的功能。
+ 仅支持为线性广告发送跟踪信标。
+ 禁止在广告期间进行搜索。但是，当用户越过广告时段时，播放广告的逻辑并不合理。

要了解有关 SSAI 的更多信息 TheoPlayer，以及要查看网页、安卓、iOS 和 tvOS SDKs 的更多信息 MediaTailor，请[MediaTailor](https://docs.theoplayer.com/how-to-guides/01-ads/12-mediatailor.md)访问网站。 TheoPlayer 

## MediaTailor SDK
<a name="ad-reporting-client-side-ad-tracking-integrations-mediatailor-sdk"></a>

AWS Elemental 维护着一个 JavaScript基于软件开发套件 (SDK)。 AWS Elemental 按原样提供 SDK，不附带任何暗示担保。使用 SDK 作为参考演示，简化入门流程。 MediaTailorSDK 展示了如何与 MediaTailor 客户端跟踪 API 进行交互。SDK 可为 HTML5基于玩家的客户端广告跟踪和报告。SDK 会初始化 MediaTailor 客户端报告会话，然后定期请求广告跟踪信息。在播放期间，当检测到新的广告事件时，SDK 会发出广告跟踪事件。

S MediaTailor DK 支持以下功能：
+ 直播和 VOD 播放列表
+ DASH 和 HLS 规格
+ 点击事件处理
+ 广告活动调度员
+ 自定义事件挂钩
+ 客户端广告信标。有关发送广告信标的更多信息，请参阅[客户端信标](ad-reporting-client-side-beaconing.md)。

**注意**  
提交 Su AWS pport 工单以获取的示例 JavaScript SDK MediaTailor。您将收到软件包及其文件的下载链接。

## 通过广告信标进行寻呼 GetTracking
<a name="gettracking"></a>

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

`GetTracking`返回一个`NextToken`值，您可以使用该值通过分页浏览返回的信标列表来缩小返回的信标数量。您可以循环浏览这些`NextToken`值，找到广告信标`StartTimeInSeconds`字段的所需值。
+ 在第一次调用`GetTracking`时，将返回所有可能落在清单窗口中的广告，包括每个广告的 a `NextToken` 和值。
+ 如果`GetTracking`请求*不*包含 a`NextToken`，则会返回清单窗口中的所有广告。
+ 如果`GetTracking`请求包含`NextToken`但没有新的信标可返 MediaTailor 回，则返回与您在原始请求中发送`NextToken`的信标相同的值。
+ 当不再有与广告对应的信标时，`GetTracking`会将该广告从其响应中移除。
+ 代币将在 24 小时后`GetTracking`过期。如果`NextToken`值大于 24 小时，则下一次调用将`GetTracking`返回空值`NextToken`。

### GetTracking 来自玩家的广义调用顺序
<a name="gettracking.generalsequence"></a>

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

```
https://YouMediaTailorUrl/v1/tracking
{

     "NextToken": "value"
     .
     .
     .
}
```

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

1. 拨打第一个电话`GetTracking`。

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

1. 如果的值为空，`NextToken`则 MediaTailor 返回所有广告信标。

1. 如果已过期，`NextToken`则 MediaTailor 返回一条 HTTP 返回码 400 错误消息。

   重新调用`GetTracking`以检索有效的 `NextToken` s。

1. 扫描整个响应，`StartTimeInSeconds`找到位于所需范围内的广告信标。

1. 使用与所需值`GetTracking``NextToken`关联的值对进行新调用`StartTimeInSeconds`。

1. 如有必要，请再次浏览返回的广告，直到找到想要播放的确切广告。

#### 扩展示例
<a name="gettracking.extendedexample"></a>

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

MediaTailor 收到`GetTracking`请求。响应中包含一个标识为 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 响应： JF57ITe48t1441mv7Tm LKu ZLrox DzfIslp 6Bi SNL1 IJmz PVMDN0lqr BYycg Mb KEb。

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

假设现在响应中除了上一则编号为 9935407 的广告之外，还包括另一则编号为 9235407 的广告。广告编号为 9235407 的信标有 `StartTimeInSeconds` 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
    }
  ]
}
```

# 叠加广告
<a name="overlay-ads"></a>

对于想要在不中断插播广告观看体验的情况下提高盈利能力的直播工作流程，您可以利用当前的 AWS Elemental MediaTailor 集成来指导在客户端呈现的广告格式。这种类型的广告被称为*叠加广告*。叠加广告是非线性视频广告，以 “L 波段广告”、“非线性视频广告”、“广告”、“动态叠加”、“内容内picture-in-picture 广告” 或 “框架广告” 的形式出现。

MediaTailor 检测具有分段类型的 SCTE-35 标记`id=0x38`作为带内信号，以获得叠加广告插入机会。SCTE-35 标记会导致 MediaTailor 向广告决策服务器 (ADS) 发送请求，然后广告决策服务器 (ADS) 在 VAST 响应中使用非线性广告有效载荷进行响应。 MediaTailor 解析 VAST 响应以支持叠加广告插入。 MediaTailor 不会对线性广告进行任何拼接，而是向玩家发出信号，表明有非线性叠加广告可供播放。该信号允许玩家从客户端跟踪端点获取并关联要播放的非线性广告。然后，玩家处理与这些广告相关的展示、举报和其他任务。例如，玩家的开发者可以使用供应商提供的支持叠加广告格式的设备 SDK。有关客户端跟踪集成的更多信息，请参阅。[客户端广告跟踪集成](ad-reporting-client-side-ad-tracking-integrations.md)

![\[该图片描绘了内容视频旁边显示的各种广告类型的时间表。线性广告在内容视频之前和之后播放。内容视频之前的广告称为片前广告。内容视频之后的广告称为片尾广告。非线性广告与内容视频本身的一部分重叠。非线性广告称为叠加广告。\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/client-side-overlays.png)


**Topics**
+ [使用叠加广告的先决条件 MediaTailor](overlay-ads-prerequisites.md)
+ [开始使用叠加式广告 MediaTailor](overlay-ads-getting-started.md)
+ [中叠加广告的日志记录和指标 MediaTailor](overlay-ads-logging-and-metrics.md)
+ [中叠加广告的计费 MediaTailor](overlay-ads-billing.md)

# 使用叠加广告的先决条件 MediaTailor
<a name="overlay-ads-prerequisites"></a>

使用叠加式广告时，需要满足以下先决条件 MediaTailor：
+ 工作流程必须是实时的，而不是视频点播 (VOD)。
+ 必须将广告决策服务器 (ADS) 响应配置为在 VAST 响应中仅返回非线性广告。 MediaTailor 为了拼接广告而忽略任何线性广告。
+ 清单必须使用分段类型的 SCTE-35 时间信号消息`id=0x38`才能调用叠加广告功能。
+ 流媒体提供商必须控制客户端设备应用程序，并与 MediaTailor 客户端跟踪 API 集成。

# 开始使用叠加式广告 MediaTailor
<a name="overlay-ads-getting-started"></a>

本节介绍如何开始使用的叠加广告功能。 MediaTailor您将设置 SCTE-35 信令、配置广告决策服务器 (ADS) 响应并设置会话级控制。

**Topics**
+ [启用叠加广告](overlay-ads-getting-started-enabling.md)
+ [使用客户端元数据跟踪叠加广告](overlay-ads-client-side-tracking-metadata.md)

# 启用叠加广告
<a name="overlay-ads-getting-started-enabling"></a>

MediaTailor 默认情况下，对叠加广告的支持处于启用状态。清单中特定的 SCTE-35 广告标记类型会触发叠加广告的插入。由于某些玩家可能不支持叠加广告的客户端渲染，因此您可以在会话级别禁用该功能。

**要使用 HLS 或 DASH 播放前缀禁用叠加广告支持，请执行以下操作：**
+ 在播放器中，根据您的协议，使用以下格式之一的请求初始化新的 MediaTailor 播放会话：
  + 示例：HLS 格式

    ```
    GET mediatailorURL/v1/master/hashed-account-id/origin-id/asset-id?aws.overlayAvails=off
    ```
  + 示例：DASH 格式

    ```
    GET mediatailorURL/v1/master/hashed-account-id/origin-id/asset-id?aws.overlayAvails=off
    ```

**要使用会话初始化前缀禁用叠加广告支持，请执行以下操作：**
+ 在播放器上，为会话初始化请求构造一个 JSON 消息正文，以 MediaTailor：
  + 要禁用广告叠加层支持，请添加一个值为的`overlays`对象作为顶级键。`off`默认`overlays`值为`on`。
  + （可选）提供 MediaTailor 随后传递给`adsParams`对象内的 ADS 的任何参数。这些参数对应于 MediaTailor 配置的 ADS 模板 URL 中的 `[player_params.param]` 设置。

**Example HLS：**  

```
POST master.m3u8
    {
       "adsParams": {
           "deviceType": "ipad"
       },
       "overlayAvails": "off"
    }
```

**Example DASH：**  

```
POST manifest.mpd
    {
        "adsParams": {
           "deviceType": "androidmobile"
       },
       "overlayAvails": "off"
    }
```

# 清单信号
<a name="overlay-ads-manifest-signaling"></a>

MediaTailor 当它在清单中看到特定的 SCTE-35 标记时，就会触发叠加广告支持。所需的信号是拼接命令类型 6 或时间信号，即提供商叠加广告开始信号。此信号的分段类型 ID 为 `0x38`

以下示例显示了 JSON 对象中的 `0x38` SCTE-35 标记。

```
{
  "tableId": 252,
  "selectionSyntaxIndicator": false,
  "privateIndicator": false,
  "sectionLength": 53,
  "protocolVersion": 0,
  "encryptedPacket": false,
  "encryptedAlgorithm": 0,
  "ptsAdjustment": 0,
  "cwIndex": 0,
  "tier": 4095,
  "spliceCommandLength": 5,
  "spliceCommandType": 6,
  "spliceCommand": {
    "specified": true,
    "pts": 1800392
  },
  "descriptorLoopLength": 31,
  "descriptors": [
    {
      "spliceDescriptorTag": 2,
      "descriptorLength": 29,
      "indentifier": "CUEI",
      "segmentationEventId": 158389361,
      "segmentationEventCancelIndicator": false,
      "programSegmentationFlag": true,
      "segmentationDurationFlag": true,
      "deliveryNotRestrictedFlag": false,
      "webDeliveryAllowedFlag": true,
      "noRegionalBlackoutFlag": true,
      "archiveAllowedFlag": true,
      "deviceResctrictions": 3,
      "segmentationDuration": 1350000,
      "segmentationUpidType": 9,
      "segmentationUpidLength": 7,
      "segmentationUpid": {
        "0": 111,
        "1": 118,
        "2": 101,
        "3": 114,
        "4": 108,
        "5": 97,
        "6": 121
      },
      "segmentationTypeId": 56,
      "segmentNum": 1,
      "segmentsExpected": 0
    }
  ],
  "crc": 2510422713
}
```

以下示例显示了以二进制（基数 32 /十六进制）值表示的 SCTE-35 信号：

```
0xfc303500000000000000fff00506fe001b78c8001f021d435545490970d4717fdf00000dbba009076f7665726c6179380100000084226c4f
```

以下示例显示了 HLS 和 DASH 清单中的 SCTE-35 标记。

**Example : HLS 清单**  

```
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:419
#EXT-X-DISCONTINUITY-SEQUENCE:3
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:09.231Z
#EXTINF:6.02,
https://aws.cloudfront.net/media/asset1/index1_00007.ts
#EXT-X-DISCONTINUITY
#EXT-X-KEY:METHOD=NONE
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:15.251Z
#EXTINF:6.0,
https://aws.cloudfront.net/media/asset1/index1_00001.ts
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:21.251Z
#EXTINF:4.0,
https://aws.cloudfront.net/media/asset1/index1_00002.ts
#EXT-X-DISCONTINUITY
#EXT-X-DATERANGE:ID="1692073825251-30-1",START-DATE="2023-08-15T04:30:25.251Z",DURATION=10.0,PLANNED-DURATION=10.0,SCTE35-OUT=0xfc303500000000000000fff00506fe001b78c8001f021d435545490970d4717fdf00000dbba009076f7665726c6179380100000084226c4f
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:25.251Z
#EXTINF:2.0,
https://aws.cloudfront.net/media/asset1/index1_00003.ts
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:27.251Z
#EXTINF:6.0,
https://aws.cloudfront.net/media/asset1/index1_00004.ts
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:33.251Z
#EXTINF:2.0,
https://aws.cloudfront.net/media/asset1/index1_00005.ts
#EXT-X-DISCONTINUITY
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:35.251Z
#EXTINF:4.0,
https://aws.cloudfront.net/media/asset1/index1_00006.ts
#EXT-X-PROGRAM-DATE-TIME:2023-08-15T04:30:39.251Z
#EXTINF:6.02,
https://aws.cloudfront.net/media/asset1/index1_00007.ts
```

**Example : DASH 清单**  

```
<?xml version="1.0"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" availabilityStartTime="2023-08-15T16:34:05.911Z" minBufferTime="PT30S" minimumUpdatePeriod="PT2S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2023-08-15T16:34:17.950Z" suggestedPresentationDelay="PT20S" timeShiftBufferDepth="PT1M30S" type="dynamic" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd">
  <Period xmlns="urn:mpeg:dash:schema:mpd:2011" id="1692117245944_1" start="PT0.033S">
    <BaseURL>https://aws.cloudfront.net/out/v1/abc/123/def/</BaseURL>
    <EventStream schemeIdUri="urn:scte:scte35:2013:xml" timescale="90000">
      <Event duration="900000">
        <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="0" tier="4095">
          <scte35:TimeSignal>
            <scte35:SpliceTime ptsTime="0"/>
          </scte35:TimeSignal>
          <scte35:SegmentationDescriptor segmentNum="0" segmentationDuration="900000" segmentationEventCancelIndicator="false" segmentationEventId="1" segmentationTypeId="56" segmentsExpected="0" subSegmentNum="0" subSegmentsExpected="0">
            <scte35:SegmentationUpid segmentationUpidFormat="hexBinary" segmentationUpidType="14">63736f7665726c6179</scte35:SegmentationUpid>
          </scte35:SegmentationDescriptor>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
    <AdaptationSet bitstreamSwitching="true" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
      <Representation bandwidth="3000000" codecs="avc1.4D4028" frameRate="30/1" height="1080" id="1" width="1920">
        <SegmentTemplate initialization="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_video_1_0_init.mp4" media="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_video_1_0_$Number$.mp4" presentationTimeOffset="0" startNumber="1" timescale="30000">
          <SegmentTimeline>
            <S d="60000" r="6" t="1000"/>
            <S d="30000" t="421000"/>
          </SegmentTimeline>
        </SegmentTemplate>
      </Representation>
      <Representation bandwidth="2499968" codecs="avc1.4D4028" frameRate="30/1" height="1080" id="2" width="1920">
        <SegmentTemplate initialization="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_video_2_0_init.mp4" media="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_video_2_0_$Number$.mp4" presentationTimeOffset="0" startNumber="1" timescale="30000">
          <SegmentTimeline>
            <S d="60000" r="6" t="1000"/>
            <S d="30000" t="421000"/>
          </SegmentTimeline>
        </SegmentTemplate>
      </Representation>
      <Representation bandwidth="2200000" codecs="avc1.4D401F" frameRate="30/1" height="720" id="3" width="1280">
        <SegmentTemplate initialization="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_video_3_0_init.mp4" media="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_video_3_0_$Number$.mp4" presentationTimeOffset="0" startNumber="1" timescale="30000">
          <SegmentTimeline>
            <S d="60000" r="6" t="1000"/>
            <S d="30000" t="421000"/>
          </SegmentTimeline>
        </SegmentTemplate>
      </Representation>
    </AdaptationSet>
    <AdaptationSet lang="eng" mimeType="audio/mp4" segmentAlignment="0">
      <Label>Alternate Audio</Label>
      <Representation audioSamplingRate="48000" bandwidth="128000" codecs="mp4a.40.2" id="9">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
        <SegmentTemplate initialization="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_audio_9_0_init.mp4" media="../cf684d31ec9e451ca98d2349989f6c0a/855c733eed20493ab3cc1100750bcf0b/index_audio_9_0_$Number$.mp4" presentationTimeOffset="0" startNumber="1" timescale="48000">
          <SegmentTimeline>
            <S d="98304" t="0"/>
            <S d="96256" t="98304"/>
            <S d="95232" t="194560"/>
            <S d="96256" r="2" t="289792"/>
            <S d="95232" t="578560"/>
            <S d="46080" t="673792"/>
          </SegmentTimeline>
        </SegmentTemplate>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>
```

# 广告决策服务器 (ADS) 响应
<a name="overlay-ads-ads-response"></a>

ADS 响应必须包含一个有效的追踪事件。至少，跟踪事件可以是`Impression`跟踪事件。跟踪事件应至少包含一个`NonLinear`广告。此广告是叠加广告，采用静态、HTML 或 iFrame 资源的形式。

```
<vmap AdBreak breaktype="linear" breakId="csoverlay"
```

如果 VAST 响应是带有 `breakType` of 的 VMAP`nonlinear`，则可用元数据位于`nonLinearAvails`根对象内。如果 VAST 响应是带有 VMAP 的 VMA `breakType` P`linear`，或者是没有 VMAP 的普通 VAST 响应，则可用元数据位于`avails`根对象内。

以下 VAST 响应是一个封装的 VMAP 响应，其`breakType``linear`值为。

除了封装的 VMAP 响应外， MediaTailor 还支持`breakType`值为的封装 VMAP 响应和普通的 VAST 响应。`nonlinear`

```
<?xml version="1.0" encoding="utf-8"?>
<vmap:VMAP xmlns:vmap="http://www.iab.net/vmap-1.0" version="1.0">
  <vmap:AdBreak breakType="linear" breakId="csoverlay">
    <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="1">
      <vmap:VASTAdData>
        <VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" xsi:noNamespaceSchemaLocation="vast.xsd">
          <Ad sequence="1">
            <InLine>
              <AdSystem>2.0</AdSystem>
              <AdTitle>2</AdTitle>
              <Impression><![CDATA[https://adserver.com/beacon=impression]]></Impression>
              <Creatives>
                <Creative>
                  <NonLinearAds>
                    <NonLinear width="640" height="360" id="18">
                      <StaticResource creativeType="text/js_ref"><![CDATA[https://client-side-ads.com/tags/static/ctv-generic/overlay001.json?iv_geo_country%3DUS%26]]></StaticResource>
                    </NonLinear>
                  </NonLinearAds>
                </Creative>
              </Creatives>
            </InLine>
          </Ad>
        </VAST>
      </vmap:VASTAdData>
    </vmap:AdSource>
    <vmap:TrackingEvents>
      <vmap:Tracking event="breakStart"><![CDATA[https://adserver.com/beacon=breakstartimpression]]></vmap:Tracking>
      <vmap:Tracking event="breakEnd"><![CDATA[https://adserver.com/beacon=breakendimpression]]></vmap:Tracking>
    </vmap:TrackingEvents>
  </vmap:AdBreak>
</vmap:VMAP>
```

**Example 1: DASH 清单来源到 MediaTailor**  

```
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="dynamic" publishTime="2022-11-07T19:59:05+00:00" minimumUpdatePeriod="PT2S" availabilityStartTime="2022-11-07T06:57:11.250000+00:00" minBufferTime="PT10S" suggestedPresentationDelay="PT20.000S" timeShiftBufferDepth="PT58.999S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <Period start="PT46827.601S" id="0" duration="PT88.321S">
  ...
  </Period>
  <Period start="PT46915.922S" id="45" duration="PT6.006S">
    <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2014:xml+bin">
    <Event duration="540000" id="144">
        <scte35:Signal>
            <scte35:Binary>SCTE35-binary</scte35:Binary>
        </scte35:Signal>
    </Event>
    </EventStream>
    ... 
  </Period>
  <Period start="PT46921.928S" id="49"> 
  ...
  </Period>
</MPD>
```

**Example 2：包含广告 ID 装饰的 MediaTailor 个性化 DASH 清单**  

```
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="dynamic" publishTime="2022-11-07T19:59:05+00:00" minimumUpdatePeriod="PT2S" availabilityStartTime="2022-11-07T06:57:11.250000+00:00" minBufferTime="PT10S" suggestedPresentationDelay="PT20.000S" timeShiftBufferDepth="PT58.999S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <Period start="PT46827.601S" id="0" duration="PT88.321S">
  ...
  </Period>
  <Period start="PT46915.922S" id="45" duration="PT6.006S">
  <EventStream schemeIdUri="urn:sva:advertising-wg:ad-id-signaling" timescale="90000">
    <Event presentationTime="13500000" duration="1351350">
    <![CDATA[{"version": 1,"identifiers": [{"scheme": "urn:smpte:ul:060E2B34.01040101.01200900.00000000","value": "adId","ad_position": "adId", "ad_type":"overlay","creative_id": "creativeId","tracking_uri": "trackingUri"}]}]]></Event>
  </EventStream>
  ...
  </Period>
  <Period start="PT46921.928S" id="49"> 
  ...
  </Period>
</MPD>
```

# 使用客户端元数据跟踪叠加广告
<a name="overlay-ads-client-side-tracking-metadata"></a>

MediaTailor 将叠加广告置于可`nonLinearAdsList`用的范围内。 MediaTailor 客户端跟踪 API 有两个根对象，名为`avails`和。`nonLinearAvails`如果 VAST 响应是带有 `breakType` of 的 VMAP`nonlinear`，则可用元数据位于`nonLinearAvails`根对象内。如果 VAST 响应是带有 VMAP 的 VMA `breakType` P`linear`，或者是没有 VMAP 的普通 VAST 响应，则可用元数据位于`avails`根对象内。

有关客户端跟踪的更多信息，请参阅[客户端广告跟踪](ad-reporting-client-side.md)。

以下示例显示了`breakType`值为的普通 VAST 响应或 VMAP 响应。`linear`

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [
        {
          "beaconUrls": [
            "https://adserver.com/beacon=breakstartimpression"
          ],
          "eventType": "breakStart"
        },
        {
          "beaconUrls": [
            "https://adserver.com/beacon=breakendimpression"
          ],
          "eventType": "breakEnd"
        }
      ],
      "adMarkerDuration": null,
      "ads": [],
      "availId": "828",
      "availProgramDateTime": null,
      "duration": "PT0S",
      "durationInSeconds": 0,
      "meta": null,
      "nonLinearAdsList": [
        {
          "extensions": null,
          "nonLinearAdList": [
            {
              "adId": "",
              "adParameters": null,
              "adSystem": "2.0",
              "adTitle": "2",
              "apiFramework": null,
              "clickThrough": null,
              "clickTracking": null,
              "clickTrackingId": null,
              "creativeAdId": "",
              "creativeId": "18",
              "creativeSequence": "",
              "duration": null,
              "durationInSeconds": 0,
              "expandedHeight": null,
              "expandedWidth": null,
              "height": "360",
              "htmlResource": null,
              "iFrameResource": null,
              "maintainAspectRatio": false,
              "minSuggestedDuration": null,
              "scalable": false,
              "staticResource": "https://client-side-ads.com/tags/static/ctv-generic/overlay001.json?iv_geo_country%3DUS%26",
              "staticResourceCreativeType": "text/js_ref",
              "width": "640"
            }
          ],
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://adserver.com/beacon=impression"
              ],
              "duration": null,
              "durationInSeconds": 0,
              "eventId": null,
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": null,
              "startTimeInSeconds": 0
            }
          ]
        }
      ],
      "startTime": "PT1M46.08S",
      "startTimeInSeconds": 106.08
    }
  ],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": null,
  "nonLinearAvails": []
}
```

以下示例显示了`breakType`值为的普通 VMAP 响应。`nonlinear`

```
{
  "avails": [],
  "dashAvailabilityStartTime": null,
  "hlsAnchorMediaSequenceNumber": null,
  "nextToken": null,
  "nonLinearAvails": [
    {
      "adBreakTrackingEvents": [
        {
          "beaconUrls": [
            "https://adserver.com/beacon=breakstartimpression"
          ],
          "eventType": "breakStart"
        },
        {
          "beaconUrls": [
            "https://adserver.com/beacon=breakendimpression"
          ],
          "eventType": "breakEnd"
        }
      ],
      "adMarkerDuration": null,
      "ads": [],
      "availId": "828",
      "availProgramDateTime": null,
      "duration": "PT0S",
      "durationInSeconds": 0,
      "meta": null,
      "nonLinearAdsList": [
        {
          "extensions": null,
          "nonLinearAdList": [
            {
              "adId": "",
              "adParameters": null,
              "adSystem": "2.0",
              "adTitle": "2",
              "apiFramework": null,
              "clickThrough": null,
              "clickTracking": null,
              "clickTrackingId": null,
              "creativeAdId": "",
              "creativeId": "18",
              "creativeSequence": "",
              "duration": null,
              "durationInSeconds": 0,
              "expandedHeight": null,
              "expandedWidth": null,
              "height": "360",
              "htmlResource": null,
              "iFrameResource": null,
              "maintainAspectRatio": false,
              "minSuggestedDuration": null,
              "scalable": false,
              "staticResource": "https://client-side-ads.com/tags/static/ctv-generic/overlay001.json?iv_geo_country%3DUS%26",
              "staticResourceCreativeType": "text/js_ref",
              "width": "640"
            }
          ],
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://adserver.com/beacon=impression"
              ],
              "duration": null,
              "durationInSeconds": 0,
              "eventId": null,
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": null,
              "startTimeInSeconds": 0
            }
          ]
        }
      ],
      "startTime": "PT1M46.08S",
      "startTimeInSeconds": 106.08
    }
  ]
}
```

# 中叠加广告的日志记录和指标 MediaTailor
<a name="overlay-ads-logging-and-metrics"></a>

本节介绍中叠加广告的日志记录和指标 MediaTailor。有关设置日志记录的更多信息，请参阅[监控和标记资源 AWS Elemental MediaTailor](monitoring.md)。

**Topics**
+ [CloudWatch 日志](#overlay-ads-logging-and-metrics-cloudwatch)
+ [CloudWatch 指标](#overlay-ads-logging-and-metrics-cloudwatch-metrics)

## CloudWatch 日志
<a name="overlay-ads-logging-and-metrics-cloudwatch"></a>

CloudWatch 收集有关叠加广告的以下日志信息：
+ `VAST_RESPONSE`-显示有关非线性广告列表的信息。
+ `FILLED_PROVIDER_OVERLAY`-显示有关非线性广告的信息。

**注意**  
`RAW_ADS_RESPONSE`是一个可选事件，显示来自 ADS 的原始响应。使用此事件在试运行和测试环境中特别有用。要在配置或账户上启用此事件，请向 Support 提交 AWS 工单。

## CloudWatch 指标
<a name="overlay-ads-logging-and-metrics-cloudwatch-metrics"></a>

MediaTailor 将叠加广告指标与其他广告指标分开收集。 MediaTailor成功从 ADS 获取广告后收集这些指标。您不必通过轮询 `GetTracking` API 来收集指标。

下表描述了叠加广告的 CloudWatch 指标：


| 指标 | 说明 | 
| --- | --- | 
| AdDecisionServer.OverlayAds |  在您指定的 CloudWatch 时间段内，ADS 响应中包含的叠加广告数量。  | 
| AdDecisionServer.OverlayErrors |  在您指定的时间段内从 ADS MediaTailor 收到的非 HTTP `200` 状态码响应、空响应和超 CloudWatch 时响应的数量。  | 
| AdDecisionServer.OverlayFilled |  成功填充至少一个叠加广告的可用数量： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/overlay-ads-logging-and-metrics.html) `SampleCount`跟踪已填充的可用数量。 `Sum`跟踪成功填充的叠加层可用数量。  | 
| AdDecisionServer.OverlayMinSuggestedDuration |  在您指定的`minSuggestedDuration`时间段内从 ADS MediaTailor 收到的所有广告 CloudWatch 的时长总和（以毫秒为单位）。如果`minSuggestedDuration`未指定，则显示的持续时间为计划持续时间。  | 
| AdDecisionServer.OverlayLatency |  向 ADS 发 MediaTailor 出的请求的响应时间，以毫秒为单位。  | 
| AdDecisionServer.OverlayTimeouts |  在您指定的时间段内向 ADS 发出的超 CloudWatch 时请求数。  | 
| AdsBilled |  有关广告收费的更多信息，请参阅[中叠加广告的计费 MediaTailor](overlay-ads-billing.md)。  | 
| Avail.\$1 |  因为 MediaTailor 没有为叠加广告做任何规划，所以 CloudWatch 不显示任何`Avail.X`指标。  | 
| SkippedReason.\$1 |  因为 MediaTailor 没有为叠加广告做任何规划，所以 CloudWatch 不显示任何`SkippedReason.X`指标。  | 

# 中叠加广告的计费 MediaTailor
<a name="overlay-ads-billing"></a>

MediaTailor 根据ADS响应中的非线性广告数量向客户开具账单。此数字包括超过中断时间的非线性广告。 MediaTailor 填写空缺后，它会为其填充的广告收费。

对于预取工作流程，在检索预取时 MediaTailor 不收取广告费用，而是在该会话的消费窗口中看到兼容的广告可用时。

有关其他账单信息，请参阅[https://aws.amazon.com/mediatailor/pricing/](https://aws.amazon.com/mediatailor/pricing/)。

# 广告 ID 装饰
<a name="ad-id-decoration"></a>

AWS Elemental MediaTailor 从内容过渡到广告插播时段时，会执行服务器端广告拼接。 MediaTailor 可以用与已拼接的广告关联的元数据来限制清单内容。这样做可以带来以下好处：

**重要**  
Ad-ID 装饰与服务器引导式广告插入 (SGAI) 方法不兼容，因为只有在广告播放期间获取素材资源列表时才会知道填充`X-AD-CREATIVE-SIGNALING `标题的字段，而不是最初写入可缓存清单时才会知道。
+ *视频开始时间* (VST) 得到改善
+ MediaTailor 可以支持服务器端广告插入和服务器引导式广告插入的混合模式
+ 服务器端会话可以使用广告位置标记来建立播放时间表
+ 对于已经使用 MediaTailor API 构建播放时间表的客户端会话，会话 VST 有所改进，因为会话不依赖调用跟踪 API 来构建时间表
+ 可以利用 MediaTailor 服务器端广告插入以及场景中显示的客户端渲染广告。这样，玩家的软件开发套件 (SDK) 就无需单独集成即可直接为客户端广告调用广告投放实体。 MediaTailor 可以通过清单和客户端跟踪 API 来销售广告。

将每个创意广告素材资源与唯一标识符关联是有标准的。该关联允许广告商、代理商、供应商和发布商在其独立的工作流程中关联创意广告资产。随着直播指标和监控的不断改进，以及越来越多的发行商使用基于服务器的插入架构，因此需要在 interleaved/stitched 演示文稿中（例如个性化清单中）准确传达分配给各个创意资产的标识符。

**Topics**
+ [为会话启用广告 ID 信令](ad-id-session-state.md)
+ [清单和广告元数据插入](ad-id-manifest.md)
+ [广告决策服务器 (ADS) 互动](ad-id-ads-interactions.md)
+ [客户端跟踪 API](ad-id-client-side-tracking-api.md)

# 为会话启用广告 ID 信令
<a name="ad-id-session-state"></a>

在会话初始化期间，必须启用广告 ID 信令功能。启用该功能的过程不同于使用 HLS/DASH 播放前缀（隐式会话初始化）创建会话，而使用会话初始化前缀（显式会话初始化）创建会话。

**使用 HLS/DASH 播放前缀为会话启用广告 ID**
+ 在播放器中，根据您的协议，使用以下格式之一的请求初始化新的 MediaTailor 播放会话：
  + 示例：HLS 格式

    ```
    GET <mediatailorURL>/v1/master/<hashed-account-id>/<origin-id>/<asset-id>?aws.adSignalingEnabled=true
    ```
  + 示例：DASH 格式

    ```
    GET <mediatailorURL>/v1/dash/<hashed-account-id>/<origin-id>/<asset-id>?aws.adSignalingEnabled=true
    ```

**使用会话初始化前缀为会话启用广告 ID**
+ 在播放器上，为会话初始化请求构造一个 JSON 消息正文，以 MediaTailor：
  + 在`adsParams`对象内部，提供 MediaTailor 应传递给 ADS 的任何参数。这些参数对应于 MediaTailor 配置的 ADS 模板网址中的`[player_params.param]`设置。
  + 要启用广告 ID 信号，请添加一个`adSignaling`对象作为顶级对象，然后在其中添加一个名为的`true`参数`enabled`，值为。默认`adSignaling`值为`disabled`。
  + 示例：HLS 格式

    ```
    POST master.m3u8
        {
           "adsParams": {
               "deviceType": "ipad"
           },
           "adSignaling": {
               "enabled": "true"
           },
           "reportingMode": "client"
        }
    ```
  + 示例：DASH 格式

    ```
    POST manifest.mpd
        {
            "adsParams": {
               "deviceType": "ipad"
           },
           "adSignaling": {
                "enabled": "true"
            },
            "reportingMode": "client"
        }
    ```

# 清单和广告元数据插入
<a name="ad-id-manifest"></a>

在广告拼接过程中，向清单中 MediaTailor 添加与正在拼接的每个广告素材关联的唯一 ID。 MediaTailor 从 VAST 响应中该广告素材的`id`属性值中获取该广告素材的唯一 ID。如果广告素材缺少 ID 属性值，则 MediaTailor 会发布一个空值 (`id=""`)。

MediaTailor 使用清单中的元数据信号来解耦广告素材元数据的客户跟踪 API 与整个时间轴 timing/positioning 内的依赖关系。这种解耦可以减少播放延迟（尤其是在VOD场景中），在这种场景中，播放器的用户界面 (UI) 会在初始化播放之前在时间轴上呈现广告插播位置。

添加的元数据采用以下形式：
+ 对于 HLS 清单，添加的元数据采用有效期内每个广告的`DATERANGE`标签形式。
+ 对于 DASH 清单，添加的元数据在每个广告周期内采用`Event`元素的形式。

以下 JSON 消息正文显示了 VAST 响应示例：

```
{
  "version": 1,
  "identifiers": [
    {
      "scheme": "urn:smpte:ul:060E2B34.01040101.01200900.00000000",
      "value": "creativeId",
      "ad_position": "adId",
      "ad_type": "adType",
      "tracking_uri": "trackingUri",
      "custom_vast_data":"customVastData"
    }
  ]
}
```

在上述示例中：
+ *creativeId*是广告`Creative`元素的`Id`属性值
+ *adId*要么是与广告开头关联的 HLS 序列号，要么是广告的 DASH 时段 ID
+ *adType*是`avail`或`overlay`，基于 VAST 响应
+ *trackingUri*是会 MediaTailor 话的相对跟踪端点，格式为 `../../../../tracking/hashed-account-id/origin-id/session-id`
+ *customVastData*是从 V `creative_signaling` AST 扩展中 MediaTailor 提取的值。 MediaTailor 使用 CDATA 节点的内容（如果存在）。有关更多详细信息和 VAST 响应示例，请参阅[广告决策服务器 (ADS) 互动](ad-id-ads-interactions.md)部分。

# 使用广告元数据个性化 HLS 清单
<a name="ad-id-manifest-hls"></a>

对于直播 HLS 直播， MediaTailor 仅当直播包含`PROGRAM-DATA-TIME`标签时才添加元数据，每个清单持续时间至少添加一次。对于视频点播 (VOD) 流，在个性化清单中至少 MediaTailor 添加`PROGRAM-DATE-TIME`一个片段，其中每个 VOD 资产的开始时间均为零纪元 ()。`1970-01-01T00:00:00Z`如果源清单`PROGRAM-DATE-TIME`包含现有内容，则 MediaTailor 保留该内容。

MediaTailor 使用广告决策服务器 (ADS) 返回的广告素材对清单进行个性化设置。对于每则广告， MediaTailor 还包括一个跨越广告持续时间的`DATERANGE`标签。`DATERANGE`标签格式与 *SV* A 技术出版物 2023 年版中 [DASH 和 HLS 中的广告创意信号](https://www.svta.org/document/draft-ad-creative-signaling-in-dash-and-hls/)一节中描述的格式类似。

 MediaTailor 生`DATERANGE`成的具有唯一的 ID 值。为确保唯一性（考虑到 M [apping SCTE-35 中指定的指导方针 EXT-X-DATERANGE），请将](https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.2.7.1)*第一个*广告段的编`MEDIA-SEQUENCE`号与可用范围内的广告序列号 MediaTailor 耦合。

对于启用了 slate 的配置上填充不足的广告时段，请将 slate 区段 MediaTailor 附加到可用内容的末尾，用`DISCONTINUITY`标签分隔，但不包含任何元数据。`DATERANGE`

对于拼接到个性化清单中的每个广告，都会 MediaTailor 添加广告素材元数据，该元数据在自定义标签中以 base64 编码的数据表示。`DATERANGE`

**Example 线性 HLS 原点 (`#EXT-X-CUE-OUT`):**  

```
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:398
#EXT-X-PROGRAM-DATE-TIME:2023-02-10T19:20:01.397Z
#EXTINF:6.006,
index_1_398.ts?m=1676054627
#EXTINF:5.873,
index_1_399.ts?m=1676054627
#EXT-OATCLS-SCTE35:/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXT-X-CUE-OUT:59.993
#EXTINF:6.139,
index_1_400.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=6.139,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_401.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=12.145,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_402.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=18.151,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_403.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=24.157,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_404.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=30.163,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_405.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=36.169,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_406.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=42.175,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_407.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=48.181,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:6.006,
index_1_408.ts?m=1676054627
#EXT-X-CUE-OUT-CONT:ElapsedTime=54.187,Duration=59.993,SCTE35=/DAlAAAAAyiYAP/wFAUAAAACf+//jPl97P4AUmNiAAEBAQAAse4/gA==
#EXTINF:5.806,
index_1_409.ts?m=1676054627
#EXT-X-CUE-IN
#EXTINF:6.206,
index_1_410.ts?m=1676054627
#EXTINF:6.006,
index_1_411.ts?m=1676054627
#EXTINF:6.006,
index_1_412.ts?m=1676054627
```

**Example 线性 HLS 原点 (`#EXT-X-DATERANGE`):**  

```
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:25
#EXT-X-PROGRAM-DATE-TIME:2023-02-10T19:19:53.389Z
#EXTINF:6.006,
index_1_25.ts?m=1676056675
#EXTINF:6.006,
index_1_26.ts?m=1676056675
#EXTINF:6.006,
index_1_27.ts?m=1676056675
#EXTINF:1.869,
index_1_28.ts?m=1676056675
#EXT-X-DATERANGE:ID="2",START-DATE="2023-02-10T19:20:13.276Z",PLANNED-DURATION=59.993,SCTE35-OUT=0xFC302500000003289800FFF01405000000027FEFFF8CF97DECFE00526362000101010000B1EE3F80
#EXTINF:6.139,
index_1_29.ts?m=1676056675
#EXTINF:6.006,
index_1_30.ts?m=1676056675
#EXTINF:6.006,
index_1_31.ts?m=1676056675
#EXTINF:6.006,
index_1_32.ts?m=1676056675
#EXTINF:6.006,
index_1_33.ts?m=1676056675
#EXTINF:6.006,
index_1_34.ts?m=1676056675
#EXTINF:6.006,
index_1_35.ts?m=1676056675
#EXTINF:6.006,
index_1_36.ts?m=1676056675
#EXTINF:6.006,
index_1_37.ts?m=1676056675
#EXTINF:5.806,
index_1_38.ts?m=1676056675
#EXT-X-DATERANGE:ID="2",START-DATE="2023-02-10T19:20:13.276Z",END-DATE="2023-02-10T19:21:13.269Z",DURATION=59.993
#EXTINF:6.206,
index_1_39.ts?m=1676056675
#EXTINF:6.006,
index_1_40.ts?m=1676056675
```

**Example 线性 HLS 个性化清单（带有创意广告信号）：**  
 MediaTailor 生`DATERANGE`成的具有唯一的 ID 值。为确保唯一性（考虑到 M [apping SCTE-35 中指定的指导方针 EXT-X-DATERANGE），请将](https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.2.7.1)*第一个*广告段的编`MEDIA-SEQUENCE`号与可用范围内的广告序列号 MediaTailor 耦合。  
在以下示例中， MediaTailor 将 `MEDIA-SEQUENCE` 421 与广告位置编号连接起来。  

```
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:418
#EXT-X-DISCONTINUITY-SEQUENCE:5
#EXT-X-PROGRAM-DATE-TIME:2023-02-10T19:19:55.391Z
#EXTINF:6.006,
https://d3fch9e2fcarly.cloudfront.net/out/v1/1cc7058242a74fdd8aea14e22a9b4131/index_1_397.ts?m=1676054627
#EXTINF:6.006,
https://d3fch9e2fcarly.cloudfront.net/out/v1/1cc7058242a74fdd8aea14e22a9b4131/index_1_398.ts?m=1676054627
#EXTINF:5.873,
https://d3fch9e2fcarly.cloudfront.net/out/v1/1cc7058242a74fdd8aea14e22a9b4131/index_1_399.ts?m=1676054627
#EXT-X-DISCONTINUITY
#EXT-X-PROGRAM-DATE-TIME:2023-02-10T19:19:55.391Z
#EXT-X-DATERANGE:ID="421-1",CLASS="urn:sva:advertising-wg:ad-id-signaling",START-DATE=2019-01-01T00:02:30.000Z,DURATION=15.015,X-AD-CREATIVE-SIGNALING="base64JSON"
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056813
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056814
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056815
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056816
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056817
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056818
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056819
#EXTINF:1.001,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056820
#EXT-X-DISCONTINUITY
#EXT-X-PROGRAM-DATE-TIME:2023-02-10T19:19:55.391Z
#EXT-X-DATERANGE:ID="421-1",START-DATE="2023-02-10T19:36:13.435Z",END-DATE="2023-02-10T19:36:43.432Z",DURATION=15.015
#EXT-X-DATERANGE:ID="421-2",CLASS="urn:sva:advertising-wg:ad-id-signaling",START-DATE=2019-01-01T00:02:30.000Z,DURATION=15.015,X-AD-CREATIVE-SIGNALING="base64JSON"
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056821
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056822
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056823
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056824
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056825
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056826
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056827
#EXTINF:1.001,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056828
#EXT-X-DISCONTINUITY
#EXT-X-PROGRAM-DATE-TIME:2023-02-10T19:19:55.391Z
#EXT-X-DATERANGE:ID="421-2",START-DATE="2023-02-10T19:36:13.435Z",END-DATE="2023-02-10T19:36:43.432Z",DURATION=15.015
#EXT-X-DATERANGE:ID="421-3",CLASS="urn:sva:advertising-wg:ad-id-signaling",START-DATE=2019-01-01T00:02:30.000Z,DURATION=15.015,X-AD-CREATIVE-SIGNALING="base64JSON"
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056829
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056830
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056831
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056832
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056833
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056834
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056835
#EXTINF:1.001,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056836
#EXT-X-DISCONTINUITY
#EXT-X-PROGRAM-DATE-TIME:2023-02-10T19:19:55.391Z
#EXT-X-DATERANGE:ID="421-3",START-DATE="2023-02-10T19:36:13.435Z",END-DATE="2023-02-10T19:36:43.432Z",DURATION=29.997
#EXT-X-DATERANGE:ID="421-4",CLASS="urn:sva:advertising-wg:ad-id-signaling",START-DATE=2019-01-01T00:02:30.000Z,DURATION=15.015,X-AD-CREATIVE-SIGNALING="base64JSON"
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056837
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056838
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056839
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056840
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056841
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056842
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056843
#EXTINF:1.001,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/9e178fa9-dce5-4248-83d2-5b5d98b019bf/0/1676056844
#EXT-X-DISCONTINUITY
#EXT-X-DATERANGE:ID="421-4",START-DATE="2023-02-10T19:36:13.435Z",END-DATE="2023-02-10T19:36:43.432Z",DURATION=15.015
#EXTINF:6.206,
https://d3fch9e2fcarly.cloudfront.net/out/v1/1cc7058242a74fdd8aea14e22a9b4131/index_1_410.ts?m=1676054627
#EXTINF:6.006,
https://d3fch9e2fcarly.cloudfront.net/out/v1/1cc7058242a74fdd8aea14e22a9b4131/index_1_411.ts?m=1676054627
```

**Example VOD HLS 起源（带有 SCTE 信号）：**  

```
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6,
index_720p1500k_00001.ts
#EXTINF:6,
index_720p1500k_00002.ts
#EXTINF:6,
index_720p1500k_00003.ts
#EXTINF:6,
index_720p1500k_00004.ts
#EXTINF:6,
index_720p1500k_00005.ts
#EXT-X-CUE-OUT:0
#EXT-X-CUE-IN
#EXTINF:6,
index_720p1500k_00006.ts
#EXTINF:6,
index_720p1500k_00007.ts
#EXTINF:6,
index_720p1500k_00008.ts
#EXTINF:6,
index_720p1500k_00009.ts
#EXTINF:6,
index_720p1500k_00010.ts
#EXTINF:6,
index_720p1500k_00011.ts
#EXTINF:6,
index_720p1500k_00012.ts
```

**Example VOD HLS 起源：**  

```
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6,
index_720p1500k_00001.ts
#EXTINF:6,
index_720p1500k_00002.ts
#EXTINF:6,
index_720p1500k_00003.ts
#EXTINF:6,
index_720p1500k_00004.ts
#EXTINF:4,
index_720p1500k_00005.ts
#EXTINF:2,
index_720p1500k_00006.ts
#EXTINF:6,
index_720p1500k_00007.ts
#EXTINF:6,
index_720p1500k_00008.ts
#EXTINF:6,
index_720p1500k_00009.ts
#EXTINF:6,
index_720p1500k_00010.ts
#EXTINF:6,
index_720p1500k_00011.ts
#EXTINF:6,
index_720p1500k_00012.ts
```

**Example VOD HLS 个性化清单：**  
MediaTailor 添加`PROGRAM-DATE-TIME`到 VOD 清单中，以便将其用作指示广告位置的 HLS `DATERANGE` 元素的锚点。  
 MediaTailor 生`DATERANGE`成的具有唯一的 ID 值。为确保唯一性（考虑到 M [apping SCTE-35 中指定的指导方针 EXT-X-DATERANGE），请将](https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.2.7.1)*第一个*广告段的编`MEDIA-SEQUENCE`号与可用范围内的广告序列号 MediaTailor 耦合。  
在以下示例中， MediaTailor 将 `MEDIA-SEQUENCE` 421 与广告位置编号连接起来。  

```
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:1970-01-01T00:00:00Z
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00001.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00002.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00003.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00004.ts
#EXTINF:4.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00005.ts
#EXT-X-DISCONTINUITY
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/28
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/29
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/30
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/31
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/32
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/33
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/34
#EXTINF:1.001,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/35
#EXT-X-DISCONTINUITY
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/36
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/37
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/38
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/39
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/40
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/41
#EXTINF:2.002,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/42
#EXTINF:1.001,
../../../../segment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/vod-variations/9810d863-8736-45fa-866e-be6d2c2bfa20/0/43
#EXT-X-DISCONTINUITY
#EXTINF:2.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00006.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00007.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00008.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00009.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00010.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00011.ts
#EXTINF:6.0,
https://d3fch9e2fcarly.cloudfront.net/cunsco-media/SKO-22/asset-1/hls/index_720p1500k_00012.ts
#EXT-X-ENDLIST
#EXT-X-DATERANGE:ID="5-1",START-DATE="1970-01-01T00:00:28.000Z",END-DATE="1970-01-01T00:00:43.015Z",DURATION=15.015
#EXT-X-DATERANGE:ID="5-2",START-DATE="1970-01-01T00:00:43.015Z",END-DATE="1970-01-01T00:00:58.030Z",DURATION=15.01
```

# 使用广告元数据对 DASH 清单进行个性化设置
<a name="ad-id-manifest-dash"></a>

MediaTailor 使用广告决策服务器 (ADS) 返回的广告素材对清单进行个性化设置。对于每个广告， MediaTailor 还包括一个跨越广告持续时间的`EventStream`元素。`Event`元素格式与 *SV* A 技术出版物 2023 年版中 [DASH 和 HLS 中的广告创意信号](https://www.svta.org/document/draft-ad-creative-signaling-in-dash-and-hls/)一节中描述的格式类似。

对于已启用 slate 的配置上填充不足的广告时段，请将 slate 时段 MediaTailor 附加到可用期的末尾，但不包含任何元数据 `EventStream`

对于拼接到个性化清单中的每个广告，都会 MediaTailor 添加广告素材元数据，表示为`CDATA`元素中的一个`Event`元素。

**Example 线性 DASH 原点（内联 SCTE 属性）：**  

```
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="dynamic" publishTime="2023-02-10T21:08:40+00:00" minimumUpdatePeriod="PT6S" availabilityStartTime="2023-02-09T22:47:05.865000+00:00" minBufferTime="PT10S" suggestedPresentationDelay="PT20.000S" timeShiftBufferDepth="PT88.999S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <Period start="PT80141.456S" id="104" duration="PT304.103S">
    <AdaptationSet id="1485523442" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
      <SegmentTemplate timescale="60000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1676062374" initialization="index_video_$RepresentationID$_0_init.mp4?m=1676062374" startNumber="151" presentationTimeOffset="4808487386">
        <SegmentTimeline>
          <S t="4824975858" d="360360" r="3"/>
          <S t="4826417298" d="316316"/>
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="1" width="960" height="540" frameRate="30000/1001" bandwidth="1800000" codecs="avc1.4D401F"/>
      <Representation id="3" width="640" height="360" frameRate="30000/1001" bandwidth="1200000" codecs="avc1.4D401E"/>
      <Representation id="5" width="480" height="270" frameRate="30000/1001" bandwidth="800000" codecs="avc1.4D4015"/>
    </AdaptationSet>
    <AdaptationSet id="1377232898" mimeType="audio/mp4" segmentAlignment="0" lang="eng">
      <Label>eng</Label>
      <SegmentTemplate timescale="48000" media="index_audio_$RepresentationID$_0_$Number$.mp4?m=1676062374" initialization="index_audio_$RepresentationID$_0_init.mp4?m=1676062374" startNumber="151" presentationTimeOffset="3846790126">
        <SegmentTimeline>
          <S t="3859981294" d="287744"/>
          <S t="3860269038" d="288768"/>
          <S t="3860557806" d="287744"/>
          <S t="3860845550" d="288768"/>
          <S t="3861134318" d="252928"/>
        </SegmentTimeline>
        </SegmentTemplate>
        <Representation id="2" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
      <Representation id="4" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
      <Representation id="6" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
    </AdaptationSet>
    <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2023-02-10T21:02:31.007Z"/>
  </Period>
  <Period start="PT80445.560S" id="155" duration="PT44.978S">
    <EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
      <Event duration="4048044">
        <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="207000" tier="4095">
          <scte35:SpliceInsert spliceEventId="111" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
            <scte35:Program>
              <scte35:SpliceTime ptsTime="7239893422"/>
            </scte35:Program>
            <scte35:BreakDuration autoReturn="true" duration="4048044"/>
          </scte35:SpliceInsert>
        </scte35:SpliceInfoSection>
      </Event>
    </EventStream>
    <AdaptationSet id="1485523442" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
      <SegmentTemplate timescale="60000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1676062374" initialization="index_video_$RepresentationID$_0_init.mp4?m=1676062374" startNumber="156" presentationTimeOffset="4826733614">
        <SegmentTimeline>
          <S t="4826733614" d="284284"/>
          <S t="4827017898" d="360360" r="5"/>
          <S t="4829180058" d="252252"/>
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="1" width="960" height="540" frameRate="30000/1001" bandwidth="1800000" codecs="avc1.4D401F"/>
      <Representation id="3" width="640" height="360" frameRate="30000/1001" bandwidth="1200000" codecs="avc1.4D401E"/>
      <Representation id="5" width="480" height="270" frameRate="30000/1001" bandwidth="800000" codecs="avc1.4D4015"/>
    </AdaptationSet>
    <AdaptationSet id="1377232898" mimeType="audio/mp4" segmentAlignment="0" lang="eng">
      <Label>eng</Label>
      <SegmentTemplate timescale="48000" media="index_audio_$RepresentationID$_0_$Number$.mp4?m=1676062374" initialization="index_audio_$RepresentationID$_0_init.mp4?m=1676062374" startNumber="156" presentationTimeOffset="3861387246">
        <SegmentTimeline>
          <S t="3861387246" d="227328"/>
          <S t="3861614574" d="288768"/>
          <S t="3861903342" d="287744"/>
          <S t="3862191086" d="288768"/>
          <S t="3862479854" d="287744"/>
          <S t="3862767598" d="288768"/>
          <S t="3863056366" d="287744"/>
          <S t="3863344110" d="202752"/>
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="2" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
      <Representation id="4" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
      <Representation id="6" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
    </AdaptationSet>
    <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2023-02-10T21:07:35.111Z"/>
  </Period>
  <Period start="PT80490.538S" id="163">
    <AdaptationSet id="1485523442" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
      <SegmentTemplate timescale="60000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1676062374" initialization="index_video_$RepresentationID$_0_init.mp4?m=1676062374" startNumber="164" presentationTimeOffset="4829432310">
        <SegmentTimeline>
          <S t="4829432310" d="348348"/>
          <S t="4829780658" d="360360" r="1"/>
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="1" width="960" height="540" frameRate="30000/1001" bandwidth="1800000" codecs="avc1.4D401F"/>
      <Representation id="3" width="640" height="360" frameRate="30000/1001" bandwidth="1200000" codecs="avc1.4D401E"/>
      <Representation id="5" width="480" height="270" frameRate="30000/1001" bandwidth="800000" codecs="avc1.4D4015"/>
    </AdaptationSet>
    <AdaptationSet id="1377232898" mimeType="audio/mp4" segmentAlignment="0" lang="eng">
      <Label>eng</Label>
      <SegmentTemplate timescale="48000" media="index_audio_$RepresentationID$_0_$Number$.mp4?m=1676062374" initialization="index_audio_$RepresentationID$_0_init.mp4?m=1676062374" startNumber="164" presentationTimeOffset="3863546862">
        <SegmentTimeline>
          <S t="3863546862" d="278528"/>
          <S t="3863825390" d="287744"/>
          <S t="3864113134" d="288768"/>
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="2" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
      <Representation id="4" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
      <Representation id="6" bandwidth="193007" audioSamplingRate="48000" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
    </AdaptationSet>
    <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2023-02-10T21:08:20.090Z"/>
  </Period>
</MPD>
```

**Example Linear DASH 个性化清单（带有创意广告信号）：**  

```
<MPD availabilityStartTime="2023-02-09T22:47:05.865000+00:00" id="201" minBufferTime="PT10S" minimumUpdatePeriod="PT6S" profiles="urn:mpeg:dash:profile:isoff-live:2011" publishTime="2023-02-10T21:08:43+00:00" suggestedPresentationDelay="PT20.000S" timeShiftBufferDepth="PT88.999S" type="dynamic" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd">
    <BaseURL>https://d3fch9e2fcarly.cloudfront.net/out/v1/f9f38deca3f14fc4b5ab3cdbd76cfb9e/</BaseURL>
    <Location>https://777788889999.mediatailor.us-west-2.amazonaws.com/v1/dash/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/out/v1/f9f38deca3f14fc4b5ab3cdbd76cfb9e/index.mpd?aws.sessionId=672ed481-4ffd-4270-936f-7c8403947f2e</Location>
    <Period duration="PT304.103S" id="104" start="PT80141.456S">
        <AdaptationSet bitstreamSwitching="true" id="1485523442" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
            <SegmentTemplate initialization="index_video_$RepresentationID$_0_init.mp4?m=1676062374" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1676062374" presentationTimeOffset="4808487386" startNumber="151" timescale="60000">
                <SegmentTimeline>
                    <S d="360360" r="3" t="4824975858"/>
                    <S d="316316" t="4826417298"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation bandwidth="1800000" codecs="avc1.4D401F" frameRate="30000/1001" height="540" id="1" width="960"/>
            <Representation bandwidth="1200000" codecs="avc1.4D401E" frameRate="30000/1001" height="360" id="3" width="640"/>
            <Representation bandwidth="800000" codecs="avc1.4D4015" frameRate="30000/1001" height="270" id="5" width="480"/>
        </AdaptationSet>
        <AdaptationSet id="1377232898" lang="eng" mimeType="audio/mp4" segmentAlignment="0">
            <Label>eng</Label>
            <SegmentTemplate initialization="index_audio_$RepresentationID$_0_init.mp4?m=1676062374" media="index_audio_$RepresentationID$_0_$Number$.mp4?m=1676062374" presentationTimeOffset="3846790126" startNumber="151" timescale="48000">
                <SegmentTimeline>
                    <S d="287744" t="3859981294"/>
                    <S d="288768" t="3860269038"/>
                    <S d="287744" t="3860557806"/>
                    <S d="288768" t="3860845550"/>
                    <S d="252928" t="3861134318"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation audioSamplingRate="48000" bandwidth="193007" codecs="mp4a.40.2" id="2">
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
            <Representation audioSamplingRate="48000" bandwidth="193007" codecs="mp4a.40.2" id="4">
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
            <Representation audioSamplingRate="48000" bandwidth="193007" codecs="mp4a.40.2" id="6">
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
        </AdaptationSet>
        <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2023-02-10T21:02:31.007Z"/>
    </Period>
    <Period id="155_1" start="PT22H20M45.56S">
        <BaseURL>https://777788889999.mediatailor.us-west-2.amazonaws.com/v1/dashsegment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/672ed481-4ffd-4270-936f-7c8403947f2e/155/155_1/</BaseURL>
        <EventStream schemeIdUri="urn:sva:advertising-wg:ad-id-signaling" timescale="90000">
            <Event presentationTime="xxxxx" duration="1351350">
                <![CDATA[{"version": 1,"identifiers": [{"scheme": "urn:smpte:ul:060E2B34.01040101.01200900.00000000","value": "155_1","ad_position": "155_1", "ad_type":"avail","creative_id": "123","tracking_uri": "../../../../v1/tracking/hashed-account-id/origin-id/session-id","custom_vast_data":"123abc"}]}]]>
            </Event>
        </EventStream>
        <AdaptationSet bitstreamSwitching="false" frameRate="30000/1001" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
            <SegmentTemplate startNumber="1" timescale="90000"/>
            <Representation bandwidth="1800000" codecs="avc1.64001f" height="540" id="1" width="960">
                <SegmentTemplate initialization="asset_540_1_2init.mp4" media="asset_540_1_2_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
            <Representation bandwidth="1200000" codecs="avc1.64001e" height="360" id="3" width="640">
                <SegmentTemplate initialization="asset_360_1_1init.mp4" media="asset_360_1_1_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
            <Representation bandwidth="800000" codecs="avc1.640015" height="270" id="5" width="480">
                <SegmentTemplate initialization="asset_270_0_0init.mp4" media="asset_270_0_0_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
        </AdaptationSet>
        <AdaptationSet lang="eng" mimeType="audio/mp4" segmentAlignment="0">
            <SegmentTemplate initialization="asset_audio_128_3init.mp4" media="asset_audio_128_3_$Number%09d$.mp4" startNumber="1" timescale="48000"/>
            <Label>eng</Label>
            <Representation audioSamplingRate="48000" bandwidth="128000" codecs="mp4a.40.2" id="6">
                <SegmentTemplate initialization="asset_audio_128_3init.mp4" media="asset_audio_128_3_$Number%09d$.mp4" startNumber="1" timescale="48000">
                    <SegmentTimeline>
                        <S d="98304" t="0"/>
                        <S d="96256" r="1" t="98304"/>
                        <S d="95232" t="290816"/>
                        <S d="96256" r="2" t="386048"/>
                        <S d="48128" t="674816"/>
                    </SegmentTimeline>
                </SegmentTemplate>
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
        </AdaptationSet>
    </Period>
    <Period id="155_2" start="PT22H21M0.575S">
        <BaseURL>https://777788889999.mediatailor.us-west-2.amazonaws.com/v1/dashsegment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/672ed481-4ffd-4270-936f-7c8403947f2e/155/155_2/</BaseURL>
        <EventStream schemeIdUri="urn:sva:advertising-wg:ad-id-signaling" timescale="90000">
            <Event presentationTime="0" duration="1351350">
                <![CDATA[{"version": 1,"identifiers": [{"scheme": "urn:smpte:ul:060E2B34.01040101.01200900.00000000","value": "155_2","ad_position": "155_2", "ad_type":"avail","creative_id": "234","tracking_uri": "../../../../v1/tracking/hashed-account-id/origin-id/session-id","custom_vast_data":"123abc"}]}]]>
            </Event>
        </EventStream>
        <AdaptationSet bitstreamSwitching="false" frameRate="30000/1001" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
            <SegmentTemplate startNumber="1" timescale="90000"/>
            <Representation bandwidth="1800000" codecs="avc1.64001f" height="540" id="1" width="960">
                <SegmentTemplate initialization="asset_540_1_2init.mp4" media="asset_540_1_2_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
            <Representation bandwidth="1200000" codecs="avc1.64001e" height="360" id="3" width="640">
                <SegmentTemplate initialization="asset_360_1_1init.mp4" media="asset_360_1_1_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
            <Representation bandwidth="800000" codecs="avc1.640015" height="270" id="5" width="480">
                <SegmentTemplate initialization="asset_270_0_0init.mp4" media="asset_270_0_0_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
        </AdaptationSet>
        <AdaptationSet lang="eng" mimeType="audio/mp4" segmentAlignment="0">
            <SegmentTemplate initialization="asset_audio_128_3init.mp4" media="asset_audio_128_3_$Number%09d$.mp4" startNumber="1" timescale="48000"/>
            <Label>eng</Label>
            <Representation audioSamplingRate="48000" bandwidth="128000" codecs="mp4a.40.2" id="6">
                <SegmentTemplate initialization="asset_audio_128_3init.mp4" media="asset_audio_128_3_$Number%09d$.mp4" startNumber="1" timescale="48000">
                    <SegmentTimeline>
                        <S d="98304" t="0"/>
                        <S d="96256" r="1" t="98304"/>
                        <S d="95232" t="290816"/>
                        <S d="96256" r="2" t="386048"/>
                        <S d="48128" t="674816"/>
                    </SegmentTimeline>
                </SegmentTemplate>
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
        </AdaptationSet>
    </Period>
    <Period id="155_3" start="PT22H21M15.59S">
        <BaseURL>https://777788889999.mediatailor.us-west-2.amazonaws.com/v1/dashsegment/94063eadf7d8c56e9e2edd84fdf897826a70d0df/emt/672ed481-4ffd-4270-936f-7c8403947f2e/155/155_3/</BaseURL>
        <EventStream schemeIdUri="urn:sva:advertising-wg:ad-id-signaling" timescale="90000">
            <Event presentationTime="0" duration="1351350">
                <![CDATA[{"version": 1,"identifiers": [{"scheme": "urn:smpte:ul:060E2B34.01040101.01200900.00000000","value": "155_3","ad_position": "155_3", "ad_type":"avail","creative_id": "345","tracking_uri": "../../../../v1/tracking/hashed-account-id/origin-id/session-id","custom_vast_data":"123abc"}]}]]>
            </Event>
        </EventStream>
        <AdaptationSet bitstreamSwitching="false" frameRate="30000/1001" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
            <SegmentTemplate startNumber="1" timescale="90000"/>
            <Representation bandwidth="1800000" codecs="avc1.64001f" height="540" id="1" width="960">
                <SegmentTemplate initialization="asset_540_1_2init.mp4" media="asset_540_1_2_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
            <Representation bandwidth="1200000" codecs="avc1.64001e" height="360" id="3" width="640">
                <SegmentTemplate initialization="asset_360_1_1init.mp4" media="asset_360_1_1_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
            <Representation bandwidth="800000" codecs="avc1.640015" height="270" id="5" width="480">
                <SegmentTemplate initialization="asset_270_0_0init.mp4" media="asset_270_0_0_$Number%09d$.mp4" startNumber="1" timescale="90000">
                    <SegmentTimeline>
                        <S d="180180" r="6" t="0"/>
                        <S d="90090" t="1261260"/>
                    </SegmentTimeline>
                </SegmentTemplate>
            </Representation>
        </AdaptationSet>
        <AdaptationSet lang="eng" mimeType="audio/mp4" segmentAlignment="0">
            <SegmentTemplate initialization="asset_audio_128_3init.mp4" media="asset_audio_128_3_$Number%09d$.mp4" startNumber="1" timescale="48000"/>
            <Label>eng</Label>
            <Representation audioSamplingRate="48000" bandwidth="128000" codecs="mp4a.40.2" id="6">
                <SegmentTemplate initialization="asset_audio_128_3init.mp4" media="asset_audio_128_3_$Number%09d$.mp4" startNumber="1" timescale="48000">
                    <SegmentTimeline>
                        <S d="98304" t="0"/>
                        <S d="96256" r="1" t="98304"/>
                        <S d="95232" t="290816"/>
                        <S d="96256" r="2" t="386048"/>
                        <S d="48128" t="674816"/>
                    </SegmentTimeline>
                </SegmentTemplate>
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
        </AdaptationSet>
    </Period>
    <Period id="163" start="PT80490.538S">
        <AdaptationSet bitstreamSwitching="true" id="1485523442" mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
            <SegmentTemplate initialization="index_video_$RepresentationID$_0_init.mp4?m=1676062374" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1676062374" presentationTimeOffset="4829432310" startNumber="164" timescale="60000">
                <SegmentTimeline>
                    <S d="348348" t="4829432310"/>
                    <S d="360360" r="1" t="4829780658"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation bandwidth="1800000" codecs="avc1.4D401F" frameRate="30000/1001" height="540" id="1" width="960"/>
            <Representation bandwidth="1200000" codecs="avc1.4D401E" frameRate="30000/1001" height="360" id="3" width="640"/>
            <Representation bandwidth="800000" codecs="avc1.4D4015" frameRate="30000/1001" height="270" id="5" width="480"/>
        </AdaptationSet>
        <AdaptationSet id="1377232898" lang="eng" mimeType="audio/mp4" segmentAlignment="0">
            <Label>eng</Label>
            <SegmentTemplate initialization="index_audio_$RepresentationID$_0_init.mp4?m=1676062374" media="index_audio_$RepresentationID$_0_$Number$.mp4?m=1676062374" presentationTimeOffset="3863546862" startNumber="164" timescale="48000">
                <SegmentTimeline>
                    <S d="278528" t="3863546862"/>
                    <S d="287744" t="3863825390"/>
                    <S d="288768" t="3864113134"/>
                </SegmentTimeline>
            </SegmentTemplate>
            <Representation audioSamplingRate="48000" bandwidth="193007" codecs="mp4a.40.2" id="2">
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
            <Representation audioSamplingRate="48000" bandwidth="193007" codecs="mp4a.40.2" id="4">
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
            <Representation audioSamplingRate="48000" bandwidth="193007" codecs="mp4a.40.2" id="6">
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            </Representation>
        </AdaptationSet>
        <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2023-02-10T21:08:20.090Z"/>
    </Period>
</MPD>
```

# 广告决策服务器 (ADS) 互动
<a name="ad-id-ads-interactions"></a>

MediaTailor 使用 VAST 响应中的广告素材`id`属性值作为广告 ID 信号中的值。如果`id`属性值为空或未出现在 VAST 响应中，则在广告 ID 信号中 MediaTailor 放置一个空值。

**Example 反应非常广泛：**  
以下示例 VAST 响应包括内联线`id`性的属性值`Creative`。 MediaTailor 从自定义 VAST `Extension` 元素中提取值，并将该值放在清单的素材元数据中。  

```
<?xml version="1.0" encoding="utf-8"?>
<VAST version="3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Ad sequence="3">
        <InLine>
            <AdSystem>2.0</AdSystem>
            <AdTitle>AD-caribbean2-15</AdTitle>
            <Impression><![CDATA[https://n8ljfs0xxx.execute-api.us-west-2.amazonaws.com/v1/impression]]></Impression>
            <Creatives>
                <Creative sequence="3" apiFramework="inLine" id="1234">
                    <Linear>
                        <Duration>00:00:15</Duration>
                        <MediaFiles>
                            <MediaFile id="00002" delivery="progressive" type="video/mp4" width="1280" height="720"><![CDATA[https://d3re4i3vgppxxx.cloudfront.net/Media/Bumpers/AD-caribbean2-15-HD.mp4]]></MediaFile>
                        </MediaFiles>
                    </Linear>
                </Creative>
            </Creatives>
          <Extensions>
            <Extension type="creative_signaling"><![CDATA[999999|TVNlDDNpFTchtpRj,E5TfTtcYd5IEzvEt,ChA05OHcvWRGFY6Zp5VSSlxUEJ2B9p8GGhQIDzIQkFeQC-Ho67FR3P9qNa6khSAGKgAyAA]]></Extension>
          </Extensions>
        </InLine>
    </Ad>
</VAST>
```

# 客户端跟踪 API
<a name="ad-id-client-side-tracking-api"></a>

以下示例展示了玩家 SDK 如何使用和将清单中的广告元数据与客户端跟踪响应负载中的完整跟踪事件数据关联`creativeId`起来`adId`。

**Example JSON 消息：**  

```
{
  "avails": [
    {
      "adBreakTrackingEvents": [],
      "ads": [
        {
          "adId": "5",
          "adParameters": "",
          "adProgramDateTime": null,
          "adSystem": "2.0",
          "adTitle": "AD-caribbean2-15",
          "adVerifications": [],
          "companionAds": [],
          "creativeId": "1234",
          "creativeSequence": "2",
          "duration": "PT15S",
          "durationInSeconds": 15,
          "extensions": [],
          "mediaFiles": {
            "mediaFilesList": [],
            "mezzanine": ""
          },
          "skipOffset": null,
          "startTime": "PT30S",
          "startTimeInSeconds": 30,
          "trackingEvents": [
            {
              "beaconUrls": [
                "https://myServer/impression"
              ],
              "duration": "PT15S",
              "durationInSeconds": 15,
              "eventId": "5",
              "eventProgramDateTime": null,
              "eventType": "impression",
              "startTime": "PT30S",
              "startTimeInSeconds": 30
            }
          ],
          "vastAdId": ""
        }
      ],
      "availId": "5",
      "availProgramDateTime": null,
      "duration": "PT15S",
      "durationInSeconds": 15,
      "meta": null,
      "nonLinearAdsList": [],
      "startTime": "PT30S",
      "startTimeInSeconds": 30
    }
  ],
  "nextToken": "UFQ1TTM0Ljk2N1NfMjAyMi0xMS0xOFQwNDozMzo1Mi4yNDUxOTdaXzE%3D",
  "nonLinearAvails": []
}
```