Amazon CloudFront
开发人员指南 (API 版本 2016-09-29)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 CloudFront 和 AWS Media Services 传输实时流视频

要将 AWS Media Services 与 CloudFront 一起使用以向全球观众传输实时内容,请遵循本部分中包含的指导。

AWS Elemental MediaLive 为实时视频流实时编码。如果具有较大的实时视频源(例如,来自像 Elemental Live 这样的接地编码器的视频),您可以使用 MediaLive 将其压缩成较小的版本(“编码”),然后分发到查看器。——

有两个主要选项可用于准备和提供实时流式处理内容:

  • 将您的内容转换为所需的格式,然后提供此内容:您可以使用 AWS Elemental MediaPackage 将一种格式的视频内容转换为多种格式,然后针对不同的设备类型将内容打包。通过使用 MediaPackage,您可以为查看者实现许多视频功能,例如重新开始、暂停、后退等。MediaPackage 还可以添加数字权限管理 (DRM) 以防止未经授权复制您的内容。有关使用 CloudFront 提供通过 MediaPackage 设置格式的内容的分步说明,请参阅本主题中的提供使用 AWS Elemental MediaPackage 格式化的实时视频

  • 使用扩展源存储和提供您的内容:如果您的编码器已采用查看者使用的所有设备所需的格式输出内容,则可使用高度可扩展源(如 AWS Elemental MediaStore 容器)提供内容。有关使用 CloudFront 提供存储在 MediaStore 容器中的内容的分步说明,请参阅本主题中的将 AWS Elemental MediaStore 作为源提供视频

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

提示

要了解有关使用 AWS 云服务实施实时视频工作流的最佳实践的更多信息,请参阅实时流式处理视频

您还可以了解 AWS 解决方案,该方案可自动部署服务以构建高度可用的实时观看体验。要查看自动部署此解决方案的步骤,请参阅实时流式自动化部署

将 AWS Elemental MediaStore 作为源提供视频

如果将视频存储在 AWS Elemental MediaStore 容器中,您可以创建 CloudFront 分配以提供内容。

首先,为 CloudFront 授予 MediaStore 容器的访问权限。然后,创建一个 CloudFront 分配并将其配置为使用 MediaStore。

  1. 按照允许 Amazon CloudFront 访问您的 MediaStore 容器上的过程进行操作,然后返回到这些步骤以创建分配。

  2. 使用以下设置创建分配:

    源域名

    分配到您的 MediaStore 容器的数据终端节点。从下拉列表中,选择用于您的实时视频的 MediaStore 容器。MediaStore 源的格式为 Container-OriginEndpointURL。例如,mymediastore.data.mediastore.us-east-1.amazonaws.com。有关更多信息,请参阅源域名

    源路径

    存储您的对象的 MediaStore 容器中的文件夹结构。有关更多信息,请参阅 源路径

    源自定义标头

    如果您希望 CloudFront 在将请求转发到源时包含自定义标头,请添加标头名称和值。

    查看器协议政策

    选择 Redirect HTTP to HTTPS (将 HTTP 重定向到 HTTPS)。有关更多信息,请参阅 查看器协议策略

    对象缓存

    如果您使用的转码器无法对所有对象设置缓存控制,请选择 Customize (自定义)。如果您的转码器可对所有对象设置缓存控制,请选择 Origin Cache Headers (原始缓存标头)

    最小 TTL、最大 TTL 和默认 TTL

    设置为适合您的缓存需求和片段持续时间。

    错误缓存最小 TTL

    设置为 5 秒或更短,以帮助防止提供过期内容。

    对于其他设置,您可以基于其他技术要求或您企业的需求设置特定值。有关 Web 分配的所有选项的列表以及有关设置这些选项的信息,请参阅您创建或更新分配时指定的值

  3. 创建分配并对其进行预置后,请编辑缓存行为,为源设置跨源资源共享 (CORS):

    1. 选择分配,然后选择 Distribution Settings (分配设置)。

    2. 选择 Behaviors (行为),选择源,然后选择 Edit (编辑)。

    3. Cache Based on Selected Request Headers (基于选择的请求标头进行缓存) 下,选择 Whitelist (白名单),然后在 Whitelist Headers (白名单标头) 下,选择 Origin (源)。

    要了解 CORS 的更多信息,请参阅根据请求标头缓存内容中的将 CloudFront 配置为遵守跨源资源共享 (CORS) 设置

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

提供使用 AWS Elemental MediaPackage 格式化的实时视频

如果已使用 AWS Elemental MediaPackage 设置实时流格式以进行查看,您可以创建一个 CloudFront 分配,并配置缓存行为以提供实时流。本主题假定您已使用 MediaPackage 为实时视频创建了通道添加了终端节点

要使用 CloudFront 流式传输视频,请为通道创建 Web 分配,然后添加每个 MediaPackage 终端节点以作为分配的源。对于每个源,您必须配置缓存行为以正确路由视频内容。

在 MediaPackage 中保存通道时,您可以选择同时在 CloudFront 中自动创建分配。有关更多信息,请参阅 AWS Elemental MediaPackage 用户指南 中的通过 AWS Elemental MediaPackage 创建分配

要在 CloudFront 中为 MediaPackage 创建 CloudFront 分配,请执行以下步骤:

步骤 1:为实时视频创建和配置 CloudFront 分配

完成以下步骤,以便为使用 MediaPackage 创建的实时视频通道设置 CloudFront 分配。

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

  1. 登录 AWS 管理控制台,通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/

  2. 选择 Create Distribution

  3. 选择传输方法页面上,在 Web 部分中选择Get Started

  4. 选择用于分配的设置,包括以下内容:

    源域名

    您 MediaPackage 实时视频通道和终端节点所在的源。从下拉列表中,选择用于您的实时视频的 MediaPackage 通道。MediaPackage 源的格式为 ChannelID-OriginEndpointID-OriginEndpointURL。您可将一个通道映射到多个源终端节点。

    如果您已使用另一个 AWS 账户创建通道,则在此字段键入源 URL 值。源必须是 HTTPS URL。

    有关更多信息,请参阅您创建或更新分配时指定的值主题中的 源域名

    源路径

    存储您的对象的 MediaPackage 的文件夹结构。当您从下拉列表中选择一个通道时,将为您填写此路径。

    请注意,如果您选择在源域名中使用来自其他 AWS 账户的通道,则不会填写源路径字段。您必须登录到其他账户并获取正确的源路径,然后才能手动输入此路径。

    有关源路径如何工作的更多信息,请参阅源路径主题中的您创建或更新分配时指定的值

    对于其他分配设置,可以基于其他技术要求或您企业的需求设置特定值。有关 Web 分配的所有选项的列表以及设置这些选项的信息,请参阅您创建或更新分配时指定的值主题。

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

  6. 等到分配的“状态”列从正在进行变为已部署,这表明 CloudFront 已创建分配。

步骤 2:将其他终端节点作为分配的源进行添加

重复此处的步骤以添加每个终端节点。

将其他终端节点作为源进行添加

  1. 在 CloudFront 控制台上,选择为您的通道创建的分配,然后选择分配设置

  2. 选项卡上,选择Create Origin

  3. 对于 Origin Domain Name (源域名),请在下拉列表中,为您的通道选择一个 MediaPackage 终端节点。将自动填写源路径字段。

  4. 对于其他设置,可以基于其他技术要求或您企业的需求设置值。有关更多信息,请参阅您创建或更新分配时指定的值主题中的 源设置

  5. 选择 Create

步骤 3:配置所有终端节点的缓存行为

对于每个终端节点,您必须配置缓存行为,以添加可正确路由请求的路径模式。您指定的路径模式取决于您提供的视频格式。本主题中的步骤包含用于 HLS、CMAF、DASH 和 Microsoft 平滑格式的路径模式信息。

您通常为每个终端节点设置两个缓存行为:

  • 父清单文件,这是您文件的索引

  • 分段,是视频内容的文件

为终端节点创建缓存行为

  1. 在 CloudFront 控制台上,选择为您的通道创建的分配,然后选择分配设置

  2. 行为选项卡上,选择Create Behavior

  3. 缓存行为设置部分中,对于路径模式,按照以下路径模式指导信息,为该源的终端节点类型键入第一个路径模式。例如,如果是 DASH 终端节点,则为 Path Pattern (路径模式) 键入 *.mpd

    路径模式

    对于 HLS 终端节点,创建以下两个缓存行为:

    • 路径模式为 *.m3u8 的缓存行为(用于父和子清单文件)

    • 路径模式为 *.ts 的缓存行为(用于分段)

    对于 CMAF 终端节点,创建以下两个缓存行为:

    • 路径模式为 *.m3u8 的缓存行为(用于父和子清单文件)

    • 路径模式为 *.mp4 的缓存行为(用于分段)

    对于 DASH 终端节点,创建以下两个缓存行为:

    • 路径模式为 *.mpd 的缓存行为(用于父清单文件)

    • 路径模式为 *.mp4 的缓存行为(用于分段)

    对于 Microsoft 平滑流终端节点,仅提供清单文件,因此仅创建一个缓存行为:

    • 路径模式为 index.ism/* 的缓存行为

    注意

    对于除 Microsoft 平滑流终端节点之外的所有终端节点格式,必须重复这些步骤,才能添加两个缓存行为。

  4. 为每个缓存行为指定以下设置的值:

    查看器协议策略

    选择 Redirect HTTP to HTTPS (将 HTTP 重定向到 HTTPS)

    基于选择的请求标头进行缓存

    选择 None (improves caching) (无 (改善缓存))

    有关改善缓存的更多信息,请参阅增加由 CloudFront 边缘缓存提供服务的请求的比例(缓存命中率)

    查询字符串转发和缓存

    选择 Forward all, cache based on whitelist (全部转发,基于白名单的缓存)

    查询字符串白名单

    将字母 m 指定为您希望 CloudFront 用于缓存基础的查询字符串参数。AWS Elemental MediaPackage 响应始终包含标签 ?m=###,以捕获终端节点的修改时间。如果内容已使用此标签的不同值进行缓存,CloudFront 会请求新的清单文件,而不提供此缓存版本。

    如果在 MediaPackage 中使用时移查看功能,请在清单文件请求(*.m3u8*.mpdindex.ism/*)的缓存行为中将 startend 指定为额外的查询字符串参数。通过这种方式,可根据清单文件请求中要求的时段提供该内容。有关时移查看功能和格式化内容开始和结束请求参数的更多信息,请参阅 AWS Elemental MediaPackage 用户指南 中的时移查看

    对象缓存

    MediaPackage 设置默认 Cache-Control 标头以确保正确的播放行为。如果要使用这些值,请选择“Use Origin Cache Headers”(使用源缓存标头)。不过,您也可以增加视频分段的缓存次数。有关自定义对象在 CloudFront 缓存中保留的时间的更多信息,请参阅您创建或更新分配时指定的值主题中的对象缓存

    错误缓存最小 TTL

    设置为 5 秒或更短,以帮助防止提供过期内容。

  5. 选择 Create

  6. 如果终端节点不是 Microsoft 平滑终端节点,请选择Create Behavior,然后重复这些步骤以创建第二个缓存行为。

步骤 4:使用 CloudFront 提供实时流通道

创建分配、添加源并创建缓存行为之后,您可以使用 CloudFront 提供实时流通道。查看器的内容请求将根据您为缓存行为配置的设置路由到正确的 MediaPackage 终端节点。

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