

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

# 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 错误
+ **文档：**保持所有别名映射及其用途的清晰文档
+ **测试程序：**对所有别名组合实施全面测试