

# 使用 CloudFront 的点播视频和实时流视频
<a name="on-demand-streaming-video"></a>

您可以借助任何 HTTP 源使用 CloudFront 来传输点播视频（VOD）或实时流视频。您可以在云中设置视频工作流的一种方法是将 CloudFront 与 [Amazon Media Services](https://www.amazonaws.cn/media-services/)结合使用。

**Topics**
+ [关于流视频](#StreamingVideo)
+ [通过 CloudFront 提供点播视频](on-demand-video.md)
+ [使用 CloudFront 和 Amazon Media Services 提供视频流](live-streaming.md)
+ [媒体质量感知弹性](media-quality-score.md)

## 关于流视频
<a name="StreamingVideo"></a>

您必须使用编码器打包视频内容，然后 CloudFront 才能分配内容。打包过程会创建*分段*，其中包含音频、视频和字幕内容。它还生成清单文件，这些文件以特定顺序描述要播放的分段以及何时播放。常见的包格式为 MPEG DASH、Apple HLS、Microsoft Smooth Streaming 和 CMAF。

**VOD 流**  
对于 VOD 流，您的视频内容存储在服务器上，查看器能够随时观看。要创建查看器可以流式传输的资产，请使用编码器（例如 [AWS Elemental MediaConvert](https://docs.amazonaws.cn/mediaconvert/latest/ug/getting-started.html)）来对媒体文件进行格式化和打包。  
在将您的视频打包成正确的格式之后，您可以将其存储在服务器或 Amazon S3 存储桶中，然后在查看器请求时使用 CloudFront 提供视频。

**实时视频流**  
对于实时视频流，视频内容在实时活动发生时实时进行流式传输，或设置为全天候实时通道。要为广播和流式传输创建实时输出，请使用编码器（如 AWS Elemental MediaLive）压缩视频并针对查看设备设置视频格式。  
将视频编码后，您可以将其存储在 AWS Elemental MediaStore 中，或使用 AWS Elemental MediaPackage 转换为不同的传输格式。使用其中任何一个源设置 CloudFront 分配来传输内容。对于创建与这些服务协同工作的分配的具体步骤和指导信息，请参阅[使用 AWS Elemental MediaStore 作为源来提供视频](live-streaming.md#video-streaming-mediastore)和[提供使用 AWS Elemental MediaPackage 格式化的实时视频](live-streaming.md#live-streaming-with-mediapackage)。

Wowza 和 Unified Streaming 还提供了一些工具，您可以使用它们通过 CloudFront 流式处理视频。有关将 Wowza 与 CloudFront 结合使用的更多信息，请参阅 Wowza 文档网站上的[将 Wowza Streaming Engine 许可证引入到 CloudFront 实时 HTTP 流](https://www.wowza.com/docs/how-to-bring-your-wowza-streaming-engine-license-to-cloudfront-live-http-streaming)。有关将 Unified Streaming 与 CloudFront 结合使用来进行 VOD 流式处理的信息，请参阅 Unified Streaming 文档网站上的 [CloudFront](https://docs.unified-streaming.com/documentation/vod/cloud/amazon/amazon-cloudfront.html)。

# 通过 CloudFront 提供点播视频
<a name="on-demand-video"></a>

要使用 CloudFront 进行点播视频 (VOD) 流式传输，请使用以下服务：
+ Amazon S3 以原始格式存储内容并存储转码后的视频。
+ 用于将视频转码为流式传输格式的编码器（如 AWS Elemental MediaConvert）。
+ CloudFront 将转码视频传输给查看器。有关 Microsoft Smooth Streaming，请参阅[为 Microsoft Smooth Streaming 配置点播视频](#on-demand-streaming-smooth)。

**使用 CloudFront 创建 VOD 解决方案**

1. 将您的内容上传到 Amazon S3 存储桶。要了解有关使用 Amazon S3 的更多信息，请参阅《Amazon Simple Storage Service 用户指南》[https://docs.amazonaws.cn/AmazonS3/latest/userguide/](https://docs.amazonaws.cn/AmazonS3/latest/userguide/)。

1. 通过使用 MediaConvert 作业对您的内容进行转码。作业将视频转换为查看器使用的播放器所需的格式。您还可以使用此作业来创建分辨率和比特率不同的资产。这些资产用于自适应比特率 (ABR) 流式传输，这种传输方式根据查看器的可用带宽调整查看质量。MediaConvert 将转码后的视频存储在 S3 存储桶中。

1. 使用 CloudFront 分配传输转换后的内容。查看器可以随时在任何设备上观看内容。

## 为 Microsoft Smooth Streaming 配置点播视频
<a name="on-demand-streaming-smooth"></a>

您可以通过以下选项使用 CloudFront 来分配已转码为 Microsoft Smooth Streaming 格式的点播视频 (VOD) 内容：
+ 指定运行 Microsoft IIS 并支持将 Smooth Streaming 作为分配源的 Web 服务器。
+ 在 CloudFront 分配的缓存行为中启用 Smooth Streaming。由于您可以在分配中使用多个缓存行为，因此您可以将一个分配用于 Smooth Streaming 媒体文件以及其他内容。

**重要**  
如果指定运行 Microsoft IIS 的 Web 服务器作为源，请*不* 要在 CloudFront 分配的缓存行为中启用 Smooth Streaming。如果您为缓存行为启用 Smooth Streaming，则 CloudFront 无法使用 Microsoft IIS 服务器作为源。

如果您在缓存行为中启用 Smooth Streaming（即您不具有运行 Microsoft IIS 的服务器），请注意以下几点：
+ 如果内容与同一缓存行为的**路径模式**值匹配，您仍可以使用该缓存行为分配其他内容。
+ CloudFront 可以将 Amazon S3 存储桶或自定义源用于 Smooth Streaming 媒体文件。如果您为缓存行为启用 Smooth Streaming，则 CloudFront 无法使用 Microsoft IIS 服务器作为源。
+ 您无法使 Smooth Streaming 格式的媒体文件失效。如果要在文件到期前更新它们，则必须将其重命名。有关更多信息，请参阅 [添加、删除或替换 CloudFront 分配的内容](AddRemoveReplaceObjects.md)。

有关 Smooth Streaming 客户端的信息，请参阅 Microsoft 文档网站上的 [Smooth Streaming](https://learn.microsoft.com/en-us/shows/iis-net-site-videos/smooth-streaming)。

**在 Microsoft IIS Web 服务器不是源时使用 CloudFront 分配 Smooth Streaming 文件**

1. 将您的媒体文件转码为 Smooth Streaming 分片的 MP4 格式。

1. 请执行以下操作之一：
   + **如果您使用的是 CloudFront 控制台：**当您创建或更新分配时，请在分配的一个或多个缓存行为中启用 Smooth Streaming。
   + **如果您使用的是 CloudFront API：**针对一个或多个分配的缓存行为，将 `SmoothStreaming` 元素添加到 `DistributionConfig` 复杂类型中。

1. 将 Smooth Streaming 文件上传到您的源。

1. 创建 `clientaccesspolicy.xml` 或 `crossdomainpolicy.xml` 文件，并将其添加到可在您的分配的根目录访问的位置，例如 `https://d111111abcdef8.cloudfront.net/clientaccesspolicy.xml`。下面是一个策略示例：

   ```
   <?xml version="1.0" encoding="utf-8"?>
   <access-policy>
   <cross-domain-access>
   <policy>
   <allow-from http-request-headers="*">
   <domain uri="*"/>
   </allow-from>
   <grant-to>
   <resource path="/" include-subpaths="true"/>
   </grant-to>
   </policy>
   </cross-domain-access>
   </access-policy>
   ```

   有关更多信息，请参阅 Microsoft Developer Network 网站上的[让服务跨域边界可用](https://docs.microsoft.com/en-us/previous-versions/windows/silverlight/dotnet-windows-silverlight/cc197955(v=vs.95))。

1. 对于应用程序（例如媒体播放器）中的链接，请以下面的格式指定媒体文件的 URL：

   `https://d111111abcdef8.cloudfront.net/video/presentation.ism/Manifest`

# 使用 CloudFront 和 Amazon Media Services 提供视频流
<a name="live-streaming"></a>

要将 Amazon Media Services 与 CloudFront 配合用于向全球观众传输实时内容，请参阅以下指南。

使用 [AWS Elemental MediaLive](https://docs.amazonaws.cn/medialive/latest/ug/getting-started.html) 实时编码实时视频流。要对大型视频流进行编码，MediaLive 将其压缩为可分配给查看器的较小版本（*编码*）。

压缩实时视频流后，您可以使用以下两个主要选项之一来准备和提供内容：
+ **将内容转换为所需的格式，然后提供内容** – 如果您需要多种格式的内容，请使用 [AWS Elemental MediaPackage](https://www.amazonaws.cn/mediapackage/) 针对不同设备类型打包内容。当您打包内容时，您还可以实施额外的特征并添加数字版权管理 (DRM)，以防止未经授权使用您的内容。有关使用 CloudFront 提供 MediaPackage 格式化的内容的分步说明，请参阅[提供使用 AWS Elemental MediaPackage 格式化的实时视频](#live-streaming-with-mediapackage)。
+ **使用可扩展源存储和提供内容** – 如果 MediaLive 对内容进行编码的格式是查看器所用的所有设备所需的格式，则使用高度可扩展的源（如 [AWS Elemental MediaStore](https://docs.amazonaws.cn/mediastore/latest/ug/getting-started.html)）来提供内容。有关使用 CloudFront 提供存储在 MediaStore 容器中的内容的分步说明，请参阅[使用 AWS Elemental MediaStore 作为源来提供视频](#video-streaming-mediastore)。

使用上述选项之一设置您的源之后，您可以使用 CloudFront 将实时流视频分发给查看器。

**提示**  
您可以了解 Amazon 解决方案，该解决方案可自动部署服务以构建高度可用的实时查看体验。要查看自动部署此解决方案的步骤，请参阅[实时流式自动化部署](https://docs.amazonaws.cn/solutions/latest/live-streaming/deployment.html)。

**Topics**
+ [使用 AWS Elemental MediaStore 作为源来提供视频](#video-streaming-mediastore)
+ [提供使用 AWS Elemental MediaPackage 格式化的实时视频](#live-streaming-with-mediapackage)
+ [使用 AWS Elemental MediaPackage 提供视频点播内容](#live-streaming-mediapackage-vod)

## 使用 AWS Elemental MediaStore 作为源来提供视频
<a name="video-streaming-mediastore"></a>

如果将视频存储在 [AWS Elemental MediaStore](https://docs.amazonaws.cn/mediastore/latest/ug/getting-started.html) 容器中，您可以创建 CloudFront 分配以提供内容。

要开始操作，您可以授予 CloudFront 对您的 MediaStore 容器的访问权限。然后，您创建一个 CloudFront 分配，并将其配置为使用 MediaStore。

**从 AWS Elemental MediaStore 容器提供内容**

1. 按照[允许 Amazon CloudFront 访问您的 AWS Elemental MediaStore 容器](https://docs.amazonaws.cn/mediastore/latest/ug/cdns-allowing-cloudfront-to-access-mediastore.html)中的过程进行操作，然后返回到这些步骤以创建分配。

1. 使用以下设置创建分配：

   1. **源域** – 分配到您的 MediaStore 容器的数据端点。从下拉列表中，选择用于您的实时视频的 MediaStore 容器。

   1. **源路径** – 存储您的对象的 MediaStore 容器中的文件夹结构。有关更多信息，请参阅 [源路径](DownloadDistValuesOrigin.md#DownloadDistValuesOriginPath)。

   1. **添加自定义标头** – 如果您希望 CloudFront 在将请求转发到源时添加自定义标头，请添加标头名称和值。

   1. **查看器协议策略** - 选择**将 HTTP 重定向到 HTTPS**。有关更多信息，请参阅 [查看器协议策略](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy)。

   1. **缓存策略**和**源请求策略** 
      + 对于**缓存策略**，选择**创建策略**，然后创建一个适合您的缓存需求和分段持续时间的缓存策略。在创建策略后，刷新缓存策略列表，然后选择您刚创建的策略。
      + 对于**源请求策略**，从下拉列表中选择 **CORS-CustomOrigin**。

   对于其他设置，您可以基于其他技术要求或您企业的需求设置特定值。有关分配的所有选项的列表以及有关设置这些选项的信息，请参阅[所有分配设置参考](distribution-web-values-specify.md)。

1. 对于您的应用程序中的链接（例如，媒体播放器），请以您通过 CloudFront 分配其他对象所用的相同格式指定媒体文件的名称。

## 提供使用 AWS Elemental MediaPackage 格式化的实时视频
<a name="live-streaming-with-mediapackage"></a>

如果您已使用 AWS Elemental MediaPackage 设置实时流格式，您可以创建一个 CloudFront 分配，并配置缓存行为以提供实时流。以下过程假定您已使用 MediaPackage 为实时视频[创建了通道](https://docs.amazonaws.cn/mediapackage/latest/ug/channels-create.html)并[添加了端点](https://docs.amazonaws.cn/mediapackage/latest/ug/channels-add-endpoint.html)。

要手动为 MediaPackage 创建 CloudFront 分配，请执行以下步骤：

**Topics**

### 步骤 1：创建和配置 CloudFront 分配
<a name="live-streaming-with-mediapackage-create-dist"></a>

完成以下步骤，以便为您使用 MediaPackage 创建的实时视频通道设置 CloudFront 分配。<a name="live-streaming-with-mediapackage-create-dist-procedure"></a>

**为您的实时视频通道创建分配**

1. 登录 Amazon Web Services 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home)。

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

1. 选择用于分配的设置，包括以下内容：  
**源域**  
您的 MediaPackage 实时视频通道和端点所在的源。选择文本字段，然后从下拉列表中为您的实时视频选择 MediaPackage 源域。您可将一个域映射到多个源端点。  
如果您已使用另一个 Amazon 账户创建源域，则在此字段中键入源 URL 值。源必须是 HTTPS URL。  
例如，对于像 `https://3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com/out/v1/abc123/index.m3u8` 这样的 HLS 端点，源域是 `3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com`。  
有关更多信息，请参阅 [源域](DownloadDistValuesOrigin.md#DownloadDistValuesDomainName)。  
**源路径**  
从中提供内容的 MediaPackage 端点的路径。  
有关源路径如何工作的更多信息，请参阅[源路径](DownloadDistValuesOrigin.md#DownloadDistValuesOriginPath)。
**重要**  
需要通配符路径 `*` 才能路由到 CloudFront 分配中的某处。为防止与显式路径不匹配的请求路由到真实源，请为该通配符路径创建“虚拟”源。  
**Example ：创建“虚拟”源**  

   在以下示例中，端点 `abc123` 和 `def456` 路由到“真实”源，但对任何其他端点的视频内容的请求会路由到没有正确子域的 `mediapackage.us-west-2.amazonaws.com`，这会导致 HTTP `404` 错误。

   MediaPackage 端点：

   ```
   https://3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com/out/v1/abc123/index.m3u8
   https://3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com/out/v1/def456/index.m3u8
   ```

   CloudFront 源 A：

   ```
   Domain: 3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com
   Path: None
   ```

   CloudFront 源 B：

   ```
   Domain: mediapackage.us-west-2.amazonaws.com
   Path: None
   ```

   CloudFront 缓存行为：

   ```
   1. Path: /out/v1/abc123/* forward to Origin A
   2. Path: /out/v1/def456/* forward to Origin A
   3. Path: * forward to Origin B
   ```

   对于其他分配设置，可以基于其他技术要求或您企业的需求设置特定值。有关分配的所有选项的列表以及有关设置这些选项的信息，请参阅[所有分配设置参考](distribution-web-values-specify.md)。

   完成选择其他分配设置后，请选择**创建分配**。

1. 选择刚刚创建的分配，然后选择**行为**。

1. 选择默认缓存行为，然后选择**编辑**。为您选择作为源的通道指定正确的缓存行为设置。稍后，您将添加一个或多个其他源，并为其编辑缓存行为设置。

1. 转到 [CloudFront 分配页面](https://console.amazonaws.cn/cloudfront/v4/home#/distributions)。

1. 等到分配的**上次修改时间**列的值从**正在部署**变为某个日期和时间后，即表示 CloudFront 已创建您的分配。

### 步骤 2：为 MediaPackage 端点的域添加源
<a name="live-streaming-with-mediapackage-add-endpoints"></a>

重复此处的步骤，将您的每个 MediaPackage 通道端点添加到您的分配，请记住需要创建一个“虚拟”源。<a name="live-streaming-with-mediapackage-add-endpoints-procedure"></a>

**将其它端点作为源进行添加**

1. 在 CloudFront 控制台上，选择您为通道创建的分配。

1. 选择**源**，然后选择**创建源**。

1. 对于**源域**，请在下拉列表中，为您的通道选择一个 MediaPackage 端点。

1. 对于其他设置，可以基于其他技术要求或您企业的需求设置值。有关更多信息，请参阅 [源设置](DownloadDistValuesOrigin.md)。

1. 选择**创建源**。

### 步骤 3：配置所有端点的缓存行为
<a name="live-streaming-with-mediapackage-create-cache-behavior"></a>

对于每个端点，您必须配置缓存行为，以添加可正确路由请求的路径模式。您指定的路径模式取决于您提供的视频格式。以下过程包括用于 Apple HLS、CMAF、DASH 和 Microsoft Smooth Streaming 格式的路径模式信息。

您通常为每个端点设置两个缓存行为：
+ 父清单文件，这是您文件的索引。
+ 分段，它们是视频内容的文件。<a name="live-streaming-with-mediapackage-create-cache-behavior-procedure"></a>

**为端点创建缓存行为**

1. 在 CloudFront 控制台上，选择您为通道创建的分配。

1. 选择**行为**，然后选择**创建行为**。

1. 对于**路径模式**，使用特定的 MediaPackage `OriginEndpoint` GUID 作为路径前缀。  
**路径模式**  
对于像 `https://3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com/out/v1/abc123/index.m3u8` 这样的 HLS 端点，创建以下两个缓存行为：  
   + 对于父清单和子清单，请使用 `/out/v1/abc123/*.m3u8`。
   + 对于内容段，请使用 `/out/v1/abc123/*.ts`。
对于像 `https://3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com/out/v1/abc123/index.m3u8` 这样的 CMAF 端点，创建以下两个缓存行为：  
   + 对于父清单和子清单，请使用 `/out/v1/abc123/*.m3u8`。
   + 对于内容段，请使用 `/out/v1/abc123/*.mp4`。
对于像 `https://3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com/out/v1/abc123/index.mpd` 这样的 DASH 端点，创建以下两个缓存行为：  
   + 对于父清单，请使用 `/out/v1/abc123/*.mpd`。
   + 对于内容段，请使用 `/out/v1/abc123/*.mp4`。
对于像 `https://3ae97e9482b0d011.mediapackage.us-west-2.amazonaws.com/out/v1/abc123/index.ism` 这样的 Microsoft Smooth Streaming 端点，仅提供清单文件，因此仅创建一个缓存行为：`out/v1/abc123/index.ism/*`。

1. 对于每个缓存行为，指定以下设置的值：  
**查看器协议策略**  
选择**将 HTTP 重定向到 HTTPS**。  
**缓存策略和源请求策略**  
对于**缓存策略**，选择**创建策略**。对于新的缓存策略，请指定以下设置：    
**最小 TTL**  
设置为 5 秒或更短，以帮助防止提供过期内容。  
**查询字符串**  
对于**查询字符串**（在**缓存键设置**中），选择**包括指定的查询字符串**。对于**允许**，添加以下值，方法是键入这些值，然后选择**添加项目**：  
   + 将 `m` 添加为您希望 CloudFront 用作缓存基础的查询字符串参数。MediaPackage 响应始终包含标签 `?m=###`，以捕获端点的修改时间。如果内容已使用此标签的不同值进行缓存，CloudFront 会请求新的清单文件，而不提供此缓存版本。
   + 如果在 MediaPackage 中使用时移查看功能，请在清单文件请求（`start`、`end` 和 `*.m3u8`）的缓存行为中将 `*.mpd` 和 `index.ism/*` 指定为额外的查询字符串参数。通过这种方式，可根据清单文件请求中要求的时段提供该内容。有关时移查看功能和格式化内容开始和结束请求参数的更多信息，请参阅《AWS Elemental MediaPackage 用户指南》**中的[时移查看](https://docs.amazonaws.cn/mediapackage/latest/ug/time-shifted.html)。
   + 如果您在 MediaPackage 中使用清单筛选特征，请针对您要与清单请求（`aws.manifestfilter`、`*.m3u8` 和 `*.mpd`）的缓存行为结合使用的缓存策略，将 `index.ism/*` 指定为额外的查询字符串参数。这会将您的分配配置为将 `aws.manifestfilter` 查询字符串转发到您的 MediaPackage 源，需要此字符串才能使用清单筛选特征。有关更多信息，请参阅《AWS Elemental MediaPackage 用户指南》**中的[清单筛选](https://docs.amazonaws.cn/mediapackage/latest/ug/manifest-filtering.html)。
   + 如果您使用的是低延迟 HLS（LL-HLS），请指定 `_HLS_msn` 和 `_HLS_part` 作为缓存策略的附加查询字符串参数，用于清单请求的缓存行为（`*.m3u8`）。这会将您的分配配置为将 `_HLS_msn` 和 `_HLS_part` 查询字符串转发到 MediaPackage 源，这是 LL-HLS 阻止播放列表请求特征正常发挥作用所必需的。

1. 选择**创建**。

1. 创建缓存策略后，返回到缓存行为创建工作流。刷新缓存策略列表，然后选择您刚创建的策略。

1. 选择**创建行为**。

1. 如果端点不是 Microsoft Smooth Streaming 端点，请重复这些步骤以创建第二个缓存行为。

### 步骤 4：启用基于标头的 MediaPackage CDN 授权
<a name="live-streaming-with-mediapackage-enable-header-based-cdn-authorization"></a>

我们建议在 MediaPackage 端点和 CloudFront 分配之间启用基于标头的 MediaPackage CDN 授权。有关更多信息，请参阅**《AWS Elemental MediaPackage 用户指南》中的[在 MediaPackage 中启用 CDN 授权](https://docs.amazonaws.cn/mediapackage/latest/ug/cdn-auth-setup.html#cdn-aut-setup-endpoint)。

### 步骤 5：使用 CloudFront 为实时流频道提供服务
<a name="live-streaming-with-mediapackage-serve-channel"></a>

创建分配、添加源、创建缓存行为并启用基于标头的 CDN 授权之后，您可以使用 CloudFront 提供实时流通道。CloudFront 根据您为缓存行为配置的设置，将来自查看器的请求路由到正确的 MediaPackage 端点。

对于应用程序（例如媒体播放器）中的链接，请采用 CloudFront URL 的标准格式指定媒体文件的 URL。有关更多信息，请参阅 [在 CloudFront 中自定义文件的 URL 格式](LinkFormat.md)。

## 使用 AWS Elemental MediaPackage 提供视频点播内容
<a name="live-streaming-mediapackage-vod"></a>

如果您从 AWS Elemental MediaPackage 源发起视频点播（VOD，Video-on-Demand）内容，则可以创建 CloudFront 分配并配置优化的缓存行为，以便向查看器提供 VOD 内容。以下过程假设您已经使用[打包配置](https://docs.amazonaws.cn/mediapackage/latest/ug/pkg-cfig-create.html)[创建打包组](https://docs.amazonaws.cn/mediapackage/latest/ug/pkg-group-create.html)，并使用 MediaPackage [摄取了资产](https://docs.amazonaws.cn/mediapackage/latest/ug/asset-create.html)。

要手动为 MediaPackage 创建 CloudFront 分配，请执行以下步骤：

**Topics**

### 步骤 1：创建和配置 CloudFront 分配
<a name="live-streaming-mediapackage-vod-create-dist"></a>

完成以下过程，以便为您使用 MediaPackage 创建的打包组设置 CloudFront 分配。<a name="live-streaming-with-mediapackage-create-dist-procedure"></a>

**为您的 VOD 内容创建分配**

1. 登录 Amazon Web Services 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home)。

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

1. 选择用于分配的设置，包括以下内容：  
**源域**  
您的 MediaPackage 打包组的源。在文本字段中键入源 URL 值。源必须是 HTTPS URL。  
例如，对于像 `https://3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com/out/v1/abc123/def456/ghi789/index.m3u8` 这样的 HLS 端点，源域是 `3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com`。  
有关更多信息，请参阅 [源域](DownloadDistValuesOrigin.md#DownloadDistValuesDomainName)。  
**源路径**  
提供内容的路径。  
有关源路径如何工作的更多信息，请参阅[源路径](DownloadDistValuesOrigin.md#DownloadDistValuesOriginPath)。
**重要**  
需要通配符路径 `*` 才能路由到 CloudFront 分配中的某处。为防止与显式路径不匹配的请求路由到真实源，请为该通配符路径创建“虚拟”源。  
**Example ：创建“虚拟”源**  

   在以下示例中，打包配置 `def456` 和 `321xyz` 路由到“真实”源，但对任何其他视频内容的请求会路由到没有正确子域的 `mediapackage-vod.us-west-2.amazonaws.com`，这会导致 HTTP `404` 错误。

   对于具有两种打包配置的打包组，其中单个资产的 MediaPackage 内容 URL：

   ```
   https://3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com/out/v1/abc123/def456/ghi789/index.m3u8
   https://3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com/out/v1/abc123/321xyz/654uvw/index.m3u8
   ```

   CloudFront 源 A：

   ```
   Domain: 3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com
   Path: None
   ```

   CloudFront 源 B：

   ```
   Domain: mediapackage-vod.us-west-2.amazonaws.com
   Path: None
   ```

   CloudFront 缓存行为：

   ```
   1. Path: /out/v1/*/def456/* forward to Origin A
   2. Path: /out/v1/*/321xyz/* forward to Origin A
   3. Path: * forward to Origin B
   ```

   对于其他分配设置，可以基于其他技术要求或您企业的需求设置特定值。有关分配的所有选项的列表以及有关设置这些选项的信息，请参阅[所有分配设置参考](distribution-web-values-specify.md)。

   完成选择其他分配设置后，请选择**创建分配**。

1. 选择刚刚创建的分配，然后选择**行为**。

1. 选择默认缓存行为，然后选择**编辑**。为您选择作为源的打包配置指定正确的缓存行为设置。稍后，您将添加一个或多个其他源，并为其编辑缓存行为设置。

1. 转到 [CloudFront 分配页面](https://console.amazonaws.cn/cloudfront/v4/home#/distributions)。

1. 等到分配的**上次修改时间**列的值从**正在部署**变为某个日期和时间后，即表示 CloudFront 已创建您的分配。

### 步骤 2：为 MediaPackage 打包组的域添加源
<a name="live-streaming-mediapackage-vod-add-endpoints"></a>

重复此处的步骤，将您的每个 MediaPackage 打包组添加到您的分配，请记住需要创建一个“虚拟”源。<a name="live-streaming-mediapackage-vod-add-packaging-groups-procedure"></a>

**添加其他打包组作为源**

1. 在 CloudFront 控制台上，选择您为通道创建的分配。

1. 选择**源**，然后选择**创建源**。

1. 对于**源域**，键入 MediaPackage 打包组的 URL。

1. 对于其他设置，可以基于其他技术要求或您企业的需求设置值。有关更多信息，请参阅 [源设置](DownloadDistValuesOrigin.md)。

1. 选择**创建源**。

### 步骤 3：配置所有打包配置的缓存行为
<a name="live-streaming-mediapackage-vod-create-cache-behavior"></a>

对于每个打包配置，您必须配置缓存行为，以添加可正确路由请求的路径模式。您指定的路径模式取决于您提供的视频格式。以下过程包括用于 Apple HLS、CMAF、DASH 和 Microsoft Smooth Streaming 格式的路径模式信息。

通常，您会为每个打包配置设置多个缓存行为：
+ 父清单文件，这是您文件的索引。
+ 分段，它们是视频内容的文件。一种格式可能会对内容使用多个扩展名，具体取决于您的配置。每个扩展名都需要缓存行为。<a name="live-streaming-mediapackage-vod-create-cache-behavior-procedure"></a>

**为打包配置创建缓存行为**

1. 在 CloudFront 控制台上，选择您为通道创建的分配。

1. 选择**行为**，然后选择**创建行为**。

1. 对于**路径模式**，使用特定的 MediaPackage VOD 打包配置作为路径前缀。这是 MediaPackage VOD 路径中的第二个 GUID。  
**路径模式**  
对于像 `https://3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com/out/v1/abc123/def456/ghi789/index.m3u8` 这样的 HLS 内容，创建以下缓存行为：  
   + 对于父清单和子清单，请使用 `/out/v1/*/def456/*.m3u8`。
   + 对于内容分段，请使用 `/out/v1/*/def456/*.ts` 并重复所有所需的分段扩展。
对于像 `https://3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com/out/v1/abc123/def456/ghi789/index.m3u8` 这样的 CMAF 内容，创建以下缓存行为：  
   + 对于父清单和子清单，请使用 `/out/v1/*/def456/*.m3u8`。
   + 对于内容分段，请使用 `/out/v1/*/def456/*.mp4` 并重复所有所需的分段扩展。
对于像 `https://3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com/out/v1/abc123/def456/ghi789/index.mpd` 这样的 DASH 内容，创建以下缓存行为：  
   + 对于父清单，请使用 `/out/v1/*/def456/*.mpd`。
   + 对于内容段，请使用 `/out/v1/*/def456/*.mp4`。
对于像 `https://3ae97e9482b0d011.egress.mediapackage-vod.us-west-2.amazonaws.com/out/v1/abc123/def456/ghi789/index.ism/Manifest` 这样的 Microsoft Smooth Streaming 端点，仅提供清单文件，因此仅创建一个缓存行为：`out/v1/*/def456/*/index.ism/*`。

1. 对于每个缓存行为，指定以下设置的值：  
**查看器协议策略**  
选择**将 HTTP 重定向到 HTTPS**。  
**缓存策略和源请求策略**  
对于**缓存策略**，选择**创建策略**。对于新的缓存策略，请指定以下设置：    
**最小 TTL**  
设置为 5 秒或更短，以帮助防止提供过期内容。  
**查询字符串**  
对于**查询字符串**（在**缓存键设置**中），选择**包括指定的查询字符串**。对于**允许**，添加以下值，方法是键入这些值，然后选择**添加项目**：  
   + 如果您在 MediaPackage 中使用清单筛选特征，请针对您要与清单请求（`aws.manifestfilter`、`*.m3u8` 和 `*.mpd`）的缓存行为结合使用的缓存策略，将 `index.ism/*` 指定为额外的查询字符串参数。这会将您的分配配置为将 `aws.manifestfilter` 查询字符串转发到您的 MediaPackage 源，需要此字符串才能使用清单筛选特征。有关更多信息，请参阅《AWS Elemental MediaPackage 用户指南》**中的[清单筛选](https://docs.amazonaws.cn/mediapackage/latest/ug/manifest-filtering.html)。

1. 选择**创建**。

1. 创建缓存策略后，返回到缓存行为创建工作流。刷新缓存策略列表，然后选择您刚创建的策略。

1. 选择**创建行为**。

1. 如果端点不是 Microsoft Smooth Streaming 端点，请重复这些步骤以创建第二个缓存行为。

### 步骤 4：启用基于标头的 MediaPackage CDN 授权
<a name="live-streaming-mediapackage-vod-enable-header-based-cdn-authorization"></a>

我们建议在 MediaPackage VOD 内容与 CloudFront 分配之间，启用基于标头的 MediaPackage CDN 授权。有关更多信息，请参阅**《AWS Elemental MediaPackage 用户指南》中的[在 MediaPackage 中启用 CDN 授权](https://docs.amazonaws.cn/mediapackage/latest/ug/cdn-auth-setup.html#cdn-aut-setup-endpoint)。

### 步骤 5：使用 CloudFront 为 VOD 内容提供服务
<a name="live-streaming-mediapackage-vod-serve-content"></a>

创建分配、添加源、创建缓存行为并启用基于标头的 CDN 授权之后，您可以使用 CloudFront 提供 VOD 内容。CloudFront 根据您为缓存行为配置的设置，将来自查看器的请求路由到正确的 MediaPackage VOD 内容。

对于应用程序（例如媒体播放器）中的链接，请采用 CloudFront URL 的标准格式指定媒体文件的 URL。有关更多信息，请参阅 [在 CloudFront 中自定义文件的 URL 格式](LinkFormat.md)。

# 媒体质量感知弹性
<a name="media-quality-score"></a>

**注意**  
此功能在中国区域不可用。

媒体质量感知弹性（MQAR，Media Quality-Aware Resiliency）是 [Amazon CloudFront](https://www.amazonaws.cn/cloudfront/) 与 [Amazon Media Services](https://www.amazonaws.cn/media-services/) 之间的一项集成功能。MQAR 提供基于媒体质量置信度分数（MQCS，Media Quality Confidence Score）的自动跨区域源选择。MQCS 由 AWS Elemental MediaLive 根据影响观众感知的媒体质量体验的参数合成。您可以使用多种选项（在 CloudFront 源组失效转移标准中指定），将 CloudFront 和 Amazon Media Services 配置为高弹性地分发实时事件流。

当您为分配启用 MQAR 功能时，即授权 CloudFront 自动选择被认为具有最高质量得分的源。

质量得分代表在您的源端感知到的媒体流媒体质量问题，例如黑框、卡滞或丢帧或者重复帧。例如，如果您的 AWS Elemental MediaPackage v2 源部署在两个不同的 Amazon Web Services 区域中，其中一个源报告的媒体质量得分高于另一个源，则 CloudFront 将自动切换到报告了较高得分的源。

为此，CloudFront 执行以下操作：

1. CloudFront 将 `GET` 请求转发到主 MediaPackage 源，同时还会向辅助 MediaPackage 源发起 `HEAD` 请求。CloudFront 接受每个源的响应标头中的媒体质量得分。

1. 接下来，CloudFront 跟踪每个源的分数，并在收到新请求时，使用此信息来确定分数较高的源。

您来源的媒体质量得分会实时改变。CloudFront 使用 MQCS 更改来确定这种情况，并在源之间切换，以确保观众看到更高质量的媒体内容。有关更多信息，请参阅《AWS Elemental MediaPackage V2 User Guide**》中的 [Leveraging media quality scores with MediaPackage](https://docs.amazonaws.cn/mediapackage/latest/userguide/mqcs.html)。

MQAR 帮助 CloudFront 尽早确定是否存在可能影响客户的问题。例如，网络连接、视频处理、音频损失或丢失、编码器速度问题等，均可能影响观众的媒体质量得分。

MQAR 提供无缝的源切换，这样您就可以在 Amazon 上，部署高弹性的跨区域端到端媒体分发工作流，为观众提供高质量的内容。

**注意**  
目前，此功能仅支持 MediaPackage v2 源。

要为分配启用此功能，请完成以下步骤：

1. 如果您还没有 MediaPackage v2 源，请创建该源并在端点配置中启用此功能。对于跨区域部署，请使用相同的设置在不同的 Amazon Web Services 区域中创建辅助频道。有关更多信息，请参阅《AWS Elemental MediaPackage V2 User Guide》**中的以下主题：
   + [创建频道和端点](https://docs.amazonaws.cn/mediapackage/latest/userguide/getting-started.html)
   + [启用媒体质量得分](https://docs.amazonaws.cn/mediapackage/latest/userguide/mqcs.html)

1. 要为 CloudFront 使用您的 MediaPackage v2 源，请创建或更新 CloudFront 分配。请参阅[创建分配](distribution-web-creating-console.md)和[更新分配](HowToUpdateDistribution.md)。

1. 创建源组，然后选择您的两个源作为主源和辅助源。在源组中，启用**媒体质量得分**选项。有关更多信息，请参阅 [创建源组](high_availability_origin_failover.md#concept_origin_groups.creating)。

1. 在分配的缓存行为中，选择您创建的[源组](DownloadDistValuesCacheBehavior.md#DownloadDistValuesTargetOriginId)。我们建议缓存行为应与频道路径模式相匹配。

如果 CloudFront 确定两个 MediaPackage v2 源的得分相同，该服务会将请求转发到源组中列出的主源。如果最初选择的源回复了错误代码，而该代码与您在源组中指定的失效转移标准相匹配，则 CloudFront 会重试将请求发送到源组中的备用源，无论其媒体质量得分如何。

**备注**  
对于所用源组启用了媒体质量得分的缓存行为，CloudFront 跟踪每个缓存行为的质量得分。如果为多个频道使用相同源组且源组发送媒体质量得分，则为每个频道的路径模式创建单独的缓存行为，以避免混淆其分数。有关源组配额的更多信息，请参阅[分配的一般配额](cloudfront-limits.md#limits-web-distributions)。
目前，当您在面向源的触发器（源请求和源响应）中使用 [Lambda@Edge](lambda-at-the-edge.md) 函数，并且触发器与您分配的缓存行为相关联，则 MQAR 不可用。有关更多信息，请参阅 [缓存行为设置](DownloadDistValuesCacheBehavior.md)。
如果您启用了 MQAR 功能和来源访问控制（OAC），请将 `mediapackagev2:GetHeadObject` 操作添加到 IAM 策略中。MQAR 需要此权限，才能向 MediaPackage v2 源发送 `HEAD` 请求。有关 OAC 的更多信息，请参阅[限制对 AWS Elemental MediaPackage v2 源的访问](private-content-restricting-access-to-mediapackage.md)。

## MQAR 日志字段
<a name="media-quality-score-log-fields"></a>

CloudFront 在实时访问日志中提供以下字段，以反映质量得分和选定的源。您可以在 CloudFront 实时访问日志中启用这些字段：
+ `r-host`
+ `sr-reason`
+ `x-edge-mqcs`

有关更多信息，请参阅[字段](real-time-logs.md#real-time-logs-fields) 65-67。