

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

# 广告自助餐
<a name="ad-buffet"></a>

Interactive Advertising Bureau(IAB) Video Ad Serving Template (VAST) 规范定义了广告窗格和广告自助餐。此机制支持有序广告插入，并在广告插入失败时自动回退。在广告窗格中，按顺序播放广告。独立广告充当自助餐，当顺序广告失败时，可以从 MediaTailor中选择替代广告。

AWS Elemental MediaTailor 通过中的`AdSequencingMode`设置支持此规范`PlaybackConfiguration`。`AdDecisionServerConfiguration`如果设置为`FOLLOW_AD_SEQUENCE`，则按顺序 MediaTailor 插入顺序广告，并且仅在序列广告无法插入时使用独立广告作为替代品。

## VAST 响应示例
<a name="ad-buffet-vast-example"></a>

以下示例显示了包含序列广告和独立广告的 VAST 响应：

```
<VAST>
  <Ad sequence="1" id="sequencedAd1">...</Ad>    <!-- Sequenced Ad 1 -->
  <Ad sequence="2" id="sequencedAd2">...</Ad>    <!-- Sequenced Ad 2 -->
  <Ad id="standAloneAd1">...</Ad>                <!-- Standalone Ad 1 -->
  <Ad id="standAloneAd2">...</Ad>                <!-- Standalone Ad 2 -->
  <Ad id="standAloneAd3">...</Ad>                <!-- Standalone Ad 3 -->
</VAST>
```

在此示例中，两个按顺序排列的广告形成一个广告窗格。这三个独立的广告构成了广告自助餐。它们共同构成了一个自助餐组。如果`sequencedAd1`失败，请 MediaTailor 先尝试将其替换为来自同一自助餐组的符合条件的独立广告。如果该群组中没有符合条件的独立广告，请从其他自助餐群组的独立广告中进行 MediaTailor 选择。

下图显示了 VAST 响应，其中包含一个广告窗格（序列广告）和一个广告自助餐（独立广告），它们共同构成一个自助餐组。

![VAST 响应示意图，其中一个广告窗格（两个按顺序排列的广告）和一个广告自助餐（三个独立广告）构成一个自助餐组。](http://docs.aws.amazon.com/zh_cn/mediatailor/latest/ug/images/vastVisualizedAdBuffetBuffetGroup.png)


## 重要概念
<a name="ad-buffet-key-concepts"></a>

以下术语描述了广告自助餐的核心概念：
+ **序列广告 **-`<Ad>` 元素中带有`sequence`属性的广告。它们形成一个有序的广告窗格，并按递增的序列顺序插入。
+ **独立（自助餐）广告 **-没有`sequence`属性的广告。只有在序列广告无法插入时，它们才用作替代品。
+ **自助餐群组 ** — 在单个 VAST 响应中将广告窗格与其独立广告配 MediaTailor 对。当按顺序排列的广告作为包装时，其重定向的 VAST 会形成自己的独立自助餐组。替换失败的顺序广告时， MediaTailor 优先考虑来自同一自助餐组的独立广告。如果同一自助餐组中不存在符合条件的独立广告， MediaTailor 则退回到其他自助餐组的独立广告。

**注意**  
`sequence`指的是`<Ad>`元素级属性，而不是元素中的`sequence``<Creative>`属性。

## 广告自助餐的好处
<a name="ad-buffet-benefits"></a>

如果没有广告自助餐，则 MediaTailor 对所有广告一视同仁，这可能会导致以下问题：
+ **VOD ** — 即使没有出现故障，也会插入独立广告，从而破坏商定的广告插播位置并过度填充广告间隔。
+ **直播 ** —— Lower-revenue 独立广告可以在序列广告之前插入，占用有效时长，没有空间投放收入更高的序列广告。

启用广告自助服务后，仅 MediaTailor 插入按顺序排列的广告，并且仅在序列广告无法插入时使用独立广告作为替代品。这样可以确保首先播放收入最高的广告。

**警告**  
如果您的广告决策服务器 (ADS) 响应不包含任何按顺序排列的广告（没有任何`<Ad>`元素具有`sequence`属性），则启用广告自助餐不会导致广告插入。

## 启用广告自助餐
<a name="ad-buffet-enable"></a>

广告自助餐是一项可选功能，您可以使用 `PutPlaybackConfiguration` API 为每种播放配置进行配置。

### AdSequencingMode 价值观
<a name="ad-buffet-sequencing-modes"></a>

下表描述了可用`AdSequencingMode`值。


| 值 | 说明 | 
| --- | --- | 
| IGNORE\_AD\_SEQUENCE（默认值） | MediaTailor 无论序列属性如何，均按照广告在 VAST 响应中出现的顺序插入广告。 | 
| FOLLOW\_AD\_SEQUENCE | MediaTailor 为直播和 VOD 工作流程插入按顺序排列的广告。失败的顺序广告将被独立广告所取代。 | 
| FOLLOW\_AD\_SEQUENCE\_ONLY\_LIVE | 广告自助餐行为仅适用于实时工作流程。 | 
| FOLLOW\_AD\_SEQUENCE\_ONLY\_VOD | 广告自助餐行为仅在 VOD 工作流程中启用。 | 

**注意**  
当您启用自助广告时，应 MediaTailor 遵循`Wrapper.fallbackOnNoAd`和`Wrapper.allowMultipleAds`属性。

### Midroll 配置
<a name="ad-buffet-midroll-config"></a>

以下示例为直播和 VOD 工作流程启用了自助广告：

```
{
    "PlaybackConfiguration": {
        "AdDecisionServerConfiguration": {
            "VastResponse": {
                "AdSequencingMode": "FOLLOW_AD_SEQUENCE"
            }
        }
    }
}
```

以下示例仅为实时工作流程启用广告自助餐：

```
{
    "PlaybackConfiguration": {
        "AdDecisionServerConfiguration": {
            "VastResponse": {
                "AdSequencingMode": "FOLLOW_AD_SEQUENCE_ONLY_LIVE"
            }
        }
    }
}
```

以下示例仅为 VOD 工作流程启用广告自助餐：

```
{
    "PlaybackConfiguration": {
        "AdDecisionServerConfiguration": {
            "VastResponse": {
                "AdSequencingMode": "FOLLOW_AD_SEQUENCE_ONLY_VOD"
            }
        }
    }
}
```

### 直播预播配置
<a name="ad-buffet-preroll-config"></a>

以下示例为实时预投广告启用了广告自助餐：

```
{
    "PlaybackConfiguration": {
        "LivePrerollConfiguration": {
            "AdDecisionServerConfiguration": {
                "VastResponse": {
                    "AdSequencingMode": "FOLLOW_AD_SEQUENCE"
                }
            }
        }
    }
}
```

**注意**  
`LivePrerollConfiguration`仅支持`FOLLOW_AD_SEQUENCE`和`IGNORE_AD_SEQUENCE`。通过 midroll 配置为 VOD 预投配置广告自助餐。

## 广告自助餐的运作方式
<a name="ad-buffet-how-it-works"></a>

### 广告替换条件
<a name="ad-buffet-replacement-conditions"></a>

如果按顺序排列的广告遇到以下失败案例之一，则 MediaTailor尝试使用来自同一自助餐组的符合条件的独立广告替换排序后的广告。如果同一自助餐组中没有独立广告，则 MediaTailor 使用其他自助餐组中的独立广告（如果有）。


| 失败案例 | 说明 | 
| --- | --- | 
| VAST 解析失败 | 由于缺少必需的 VAST 元素（例如、、、缺失或Impression无效）MediaFilesCreatives，按顺序排列的广告无法解析。MediaFile VASTAdTagURI | 
| VAST 封装器解析失败 | 重定向超时、失败或返回空响应。 | 
| VPAID 广告已下线 | 按顺序排列的广告是 VPAID，会话使用服务器端报告或未配置 Slate。 | 
| 广告转码尚未准备就绪 | 顺序广告的转码状态不是 “成功”（例如，IN\_PROGRESS 或 ERROR）。 | 
| 已超过可用时长 | 顺序广告的持续时间超过剩余的使用时长（实时工作流程）。 | 

### 独立广告资格
<a name="ad-buffet-standalone-eligibility"></a>

要获得替代资格，独立广告必须满足以下标准：
+ 不要成为 VPAID 广告
+ 完成转码
+ 持续时间与剩余可用持续时间相符

### 独立广告精选
<a name="ad-buffet-standalone-selection"></a>

当按顺序排列的广告失败时，使用以下优先级从符合条件的独立广告 MediaTailor 中选择替代品：

1. **首先是相同的自助餐群组 ** — MediaTailor 首选失败广告自己的自助餐组中的独立广告。

1. **其他自助餐群组 **-仅在同一自助餐组中不存在符合条件的广告时使用。

如果未找到符合条件的独立广告，则该职位将空缺并发布相应`SkippedReason`的广告。

## VAST 包装器行为
<a name="ad-buffet-wrapper-behavior"></a>

对包装器重定向响应的处理 MediaTailor 取决于两个包装器变量的值：`Wrapper.fallbackOnNoAd`和。`Wrapper.allowMultipleAds`
+ `fallbackOnNoAd`当重定向响应为空、超时或在 ADS 请求期间发生错误时生效。
+ `allowMultipleAds`如果 ADS 响应包含一个或多个广告，则生效。

### VAST 为空、请求错误或请求超时
<a name="ad-buffet-wrapper-empty-response"></a>

下表描述了重定向响应为空、超时或发生错误时的 MediaTailor 行为。


| 后退 OnNoAd | MediaTailor 行为 | 
| --- | --- | 
| true（默认值） | MediaTailor 选择独立广告来替换失效的包装纸，首选相同的自助餐组。如果没有符合条件的同组广告，请从其他自助餐群组中 MediaTailor 选择。 | 
| false | MediaTailor 删除广告位置并移至窗格中的下一个广告。不进行更换。 | 

**Example fall OnNoAd back =真（重定向失败）**  
**家长 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad sequence="2">
    <Wrapper fallbackOnNoAd="true">
      <VASTAdTagURI>https://ads.example.com/vast</VASTAdTagURI>
    </Wrapper>
  </Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**包装器重定向响应：**VAST 为空、超时或错误。  
**已解决 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <!-- standAloneAd1 replaced failed Wrapper Ad and now has the Wrapper's sequence (2) -->
  <Ad sequence="2" id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**播放顺序：**  

1. seqad1

1. 展台 AloneAd 1

**Example fall OnNoAd back =false（重定向失败）**  
**家长 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad sequence="2">
    <Wrapper fallbackOnNoAd="false">
      <VASTAdTagURI>https://ads.example.com/vast</VASTAdTagURI>
    </Wrapper>
  </Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**包装器重定向响应：**VAST 为空、超时或错误。  
**已解决 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <!-- sequence 2 is not replaced -->
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**播放顺序：**  

1. seqad1

### 回复包含一个或多个广告
<a name="ad-buffet-wrapper-ads-response"></a>

下表描述了重定向响应包含一个或多个广告时的 MediaTailor 行为。


| 允许 MultipleAds | MediaTailor 行为 | 
| --- | --- | 
| false（默认值） | MediaTailor 从重定向响应中选择一个广告并丢弃剩余的广告。所选广告继承父包装广告的序列值。选择策略： MediaTailor 选择重定向响应中顺序最低的广告。如果没有按顺序排列的广告可用，则 MediaTailor 选择独立广告（如果有）。 | 
| true | 当包装器具有序列属性时， MediaTailor 会在包装器的位置插入重定向广告。当包装器没有序列属性时，在父级的排序广告之后 MediaTailor 插入重定向广告。已解析的广告构成了自己的自助餐组。 | 

**Example 允许 MultipleAds =false，包装器的序列为 2**  
**家长 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad sequence="2">
    <Wrapper allowMultipleAds="false">
      <VASTAdTagURI>https://ads.example.com/vast</VASTAdTagURI>
    </Wrapper>
  </Ad>
  <Ad sequence="3" id="seqAd3">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**包装器重定向响应：**  

```
<VAST>
  <Ad sequence="1" id="redirectSeqAd1">...</Ad>
  <Ad sequence="2" id="redirectSeqAd2">...</Ad>
  <Ad id="redirectStandAloneAd1">...</Ad>
</VAST>
```
**已解决 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad sequence="2" id="redirectSeqAd1">...</Ad> <!-- redirectSeqAd1 selected, inherits Wrapper's sequence (2) -->
  <Ad sequence="3" id="seqAd3">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**播放顺序：**  

1. seqad1

1. 重定向 SeqAd 1

1. SeqAd3

**Example 允许 MultipleAds =false，包装器没有序列**  
**家长 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad>
    <Wrapper allowMultipleAds="false">
      <VASTAdTagURI>https://ads.example.com/vast</VASTAdTagURI>
    </Wrapper>
  </Ad>
  <Ad sequence="3" id="seqAd3">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**包装器重定向响应：**  

```
<VAST>
  <Ad sequence="1" id="redirectSeqAd1">...</Ad>
  <Ad sequence="2" id="redirectSeqAd2">...</Ad>
  <Ad id="redirectStandAloneAd1">...</Ad>
</VAST>
```
**已解决 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad id="redirectSeqAd1">...</Ad> <!-- redirectSeqAd1 selected, inherits Wrapper's sequence (UNDEFINED) -->
  <Ad sequence="3" id="seqAd3">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**播放顺序：**  

1. seqad1

1. SeqAd3
重定向 SeqAd 1 无法播放，因为它没有定义序列。

**Example 允许 MultipleAds =true，包装器的序列=2**  
**家长 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad sequence="2">
    <Wrapper allowMultipleAds="true">
      <VASTAdTagURI>https://ads.example.com/vast</VASTAdTagURI>
    </Wrapper>
  </Ad>
  <Ad sequence="3" id="seqAd3">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**包装器重定向响应：**  

```
<VAST>
  <Ad sequence="1" id="redirectSeqAd1">...</Ad>
  <Ad sequence="2" id="redirectSeqAd2">...</Ad>
  <Ad id="redirectStandAloneAd1">...</Ad>
</VAST>
```
**已解决 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <!-- Redirect response merged at sequence 2 -->
  <Ad sequence="1" id="redirectSeqAd1">...</Ad>
  <Ad sequence="2" id="redirectSeqAd2">...</Ad>
  <Ad id="redirectStandAloneAd1">...</Ad>
  <Ad sequence="3" id="seqAd3">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**播放顺序：**  

1. seqad1

1. 重定向 SeqAd 1

1. 重定向 SeqAd 2

1. SeqAd3

**Example MultipleAdsallow =true，包装器没有序列**  
**家长 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad>
    <Wrapper allowMultipleAds="true">
      <VASTAdTagURI>https://ads.example.com/vast</VASTAdTagURI>
    </Wrapper>
  </Ad>
  <Ad sequence="3" id="seqAd3">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**包装器重定向响应：**  

```
<VAST>
  <Ad sequence="1" id="redirectSeqAd1">...</Ad>
  <Ad sequence="2" id="redirectSeqAd2">...</Ad>
  <Ad id="redirectStandAloneAd1">...</Ad>
</VAST>
```
**已解决 VAST：**  

```
<VAST>
  <Ad sequence="1" id="seqAd1">...</Ad>
  <Ad sequence="3" id="seqAd3">...</Ad>
  <!-- Redirect response merged after sequenced ads -->
  <Ad sequence="1" id="redirectSeqAd1">...</Ad>
  <Ad sequence="2" id="redirectSeqAd2">...</Ad>
  <Ad id="redirectStandAloneAd1">...</Ad>
  <Ad id="standAloneAd1">...</Ad>
  <Ad id="standAloneAd2">...</Ad>
</VAST>
```
**播放顺序：**  

1. seqad1

1. SeqAd3

1. 重定向 SeqAd 1

1. 重定向 SeqAd 2

## 指标和日志监控
<a name="ad-buffet-metrics"></a>

### 对现有指标的更改
<a name="ad-buffet-existing-metrics"></a>

启用广告自助餐后，以下现有指标会改变行为。


| 指标 | 广告自助餐的行为 | 
| --- | --- | 
| AdDecisionServer.Ads | 从 ADS 响应中解析出的顺序广告的数量。 | 
| AdDecisionServer.Duration | 仅限顺序广告的总时长。 | 
| AdDecisionServer.FillRate | 填充率仅使用顺序广告计算。 | 

### 新指标
<a name="ad-buffet-new-metrics"></a>

启用广告自助餐后，以下新指标可用。


| 指标 | 说明 | 
| --- | --- | 
| AdNotReady.SequencedAd | 尚未准备好插入的序列广告的数量。 | 
| AdNotReady.StandaloneAd | 尚未准备好插入的独立广告的数量（不包括跳过的StandaloneAdNotNeeded广告）。 | 
| Avail.FillRate.SequencedAd | 按顺序排列的广告填补的收益百分比。 | 
| Avail.FillRate.StandaloneAd | 独立广告填补的收益百分比。 | 
| Avail.FilledDuration.SequencedAd | 无效期限充斥着按顺序排列的广告。 | 
| Avail.FilledDuration.StandaloneAd | 使用期限充斥着独立广告。 | 
| AdsBilled.SequencedAd | 按顺序计费的广告数量。 | 
| AdsBilled.StandaloneAd | 独立付费广告的数量。 | 
| SkippedReason.StandaloneAdNotNeeded | 由于所有序列广告均已成功插入，因此不需要独立广告时发出。 | 

### 新跳过广告的原因
<a name="ad-buffet-skipped-reason"></a>

启用广告自助餐后，以下新的跳过广告原因可用。


| Reason | 说明 | 
| --- | --- | 
| STANDALONE\_AD\_NOT\_NEEDED | 独立广告符合条件，但不是必需的，因为所有按顺序排列的广告均已成功插入。未触发错误信标。 | 

对于不符合插入资格的独立广告（例如，VPAID 或转码未准备就绪），实际失败原因将以（例如，`TRANSCODE_IN_PROGRESS`或`VPAID_AD`）的形式发布。`SkippedReason`

### 信标时出错
<a name="ad-buffet-error-beaconing"></a>

MediaTailor 按如下方式处理广告自助餐的错误信标：
+ 失败的顺序广告——触发错误信标（现有行为）。
+ 尚未准备就绪的独立广告（广告转码状态不成功）——会触发错误信标（与序列广告相同）。
+ 符合插入条件但不需要的未使用独立广告——不会触发错误信标。

## ADS 活动变更
<a name="ad-buffet-ads-events"></a>

启用广告自助餐后， MediaTailor 将以下字段添加到两个 ADS 事件中：

### VAST\_RESPONSE 事件
<a name="ad-buffet-vast-response-event"></a>

`VAST_RESPONSE`事件`VastAd`中的每个字段都包含以下字段。


| 字段 | Type | 说明 | 
| --- | --- | --- | 
| buffetGroup | 字符串 | MediaTailor 生成的字符串，用于定义广告属于哪个自助餐组。 | 
| sequence | Int | Ad元素的序列值。 | 

### FILLED\_AVAIL 事件
<a name="ad-buffet-filled-avail-event"></a>

活动中`creativeAds`和`FILLED_AVAIL`活动`skippedAds`中的每个条目都包含以下字段。


| 字段 | Type | 说明 | 
| --- | --- | --- | 
| buffetGroup | 字符串 | MediaTailor 生成的字符串，用于定义广告属于哪个自助餐组。 | 
| sequence | Int | Ad元素的序列值。 | 

这些字段允许您确定：
+ 哪些广告是按顺序解析的，哪些是独立的
+ 插入了哪些广告及其类型
+ 为什么跳过了序列广告，以及是否由独立广告取而代之
+ 为什么独立广告不可用

## 另请参阅
<a name="ad-buffet-see-also"></a>

有关 `PutPlaybackConfiguration` API 和 IAB VAST 规范的更多信息，请参阅以下内容：
+ [PutPlaybackConfiguration API 参考 ](https://docs.aws.amazon.com/mediatailor/latest/apireference/API_PutPlaybackConfiguration.html) — 用于配置`AdSequencingMode`和相关设置的完整参数参考。
+ [IAB VAST 4.x Specification](https://iabtechlab.com/standards/vast/)IAB Tech Lab网站上 — 定义广告窗格、序列广告和独立广告的行业标准。
+ [监控 AWS Elemental MediaTailor 使用亚马逊 CloudWatch 指标](monitoring-cloudwatch-metrics.md)— 所有 MediaTailor CloudWatch 指标的完整参考，包括新的广告自助餐指标。