使用 CloudFront 和 Amazon Media Services 提供实时流视频 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 CloudFront 和 Amazon Media Services 提供实时流视频

要将 Amazon Media Services 与 CloudFront 配合用于向全球观众传输实时内容,请遵循本部分包含的指导。

使用 AWS Elemental MediaLive 实时对视频流进行编码。要对大型视频流进行编码,MediaLive 将其压缩为可分配给查看器的较小版本(编码)。

压缩实时视频流后,您可以使用以下两个主要选项之一来准备和提供内容:

  • 将内容转换为所需的格式,然后提供内容:如果您需要多种格式的内容,请使用 AWS Elemental MediaPackage 针对不同设备类型打包内容。当您打包内容时,您还可以实施额外的功能并添加数字版权管理 (DRM),以防止未经授权使用您的内容。有关使用 CloudFront 提供 MediaPackage 格式化的内容的分步说明,请参阅提供使用 AWS Elemental MediaPackage 格式化的实时视频

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

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

提示

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

将 AWS Elemental MediaStore 作为源提供视频

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

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

从 AWS Elemental 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 秒或更短,以帮助防止提供过期内容。

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

  3. 在 CloudFront 预置分配后,请编辑缓存行为,以便为源设置跨源资源共享 (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 为实时视频创建了通道添加了终端节点

注意

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

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

步骤 1:创建和配置 CloudFront 分配

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

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

  1. 登录 Amazon Web Services Management Console,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v3/home

  2. 选择 Create Distribution

  3. Select a delivery method for your content 页面上的 Web 部分中,选择 Get Started

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

    源域名

    您的 MediaPackage 实时视频通道和终端节点所在的源。选择文本字段,然后从下拉列表中为您的实时视频选择 MediaPackage 通道。您可将一个通道映射到多个源终端节点。

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

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

    源路径

    从中提供内容的 MediaPackage 终端节点的路径。选择源域名时,CloudFront 填充源路径。

    如果您将其他Amazon账户中的通道用于 Origin Domain Name (源域名),则系统不会为您填写 Origin Path (源路径) 字段。您必须从其他账户获取正确的源路径,以便您可以手动输入它。

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

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

    完成选择其他分配设置后,请选择 Create Distribution (创建分配)

  5. 选择刚刚创建的分配,然后选择 Behaviors (行为) 选项卡。

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

  7. 转到 CloudFront Distributions (CloudFront 分配) 页面

  8. 等到分配的状态列从进行中变为已部署后,即表示 CloudFront 已创建您的分配。

步骤 2:添加其他终端节点作为源

重复此处的步骤,将您的每个 MediaPackage 通道终端节点添加到您的分配。

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

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

  2. 选择 Origins and Origin Groups (源和源组) 选项卡,然后选择 Create Origin (创建源)

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

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

  5. 选择创建

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

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

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

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

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

为终端节点创建缓存行为

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

  2. 选择 Behaviors (行为) 选项卡,然后选择 Create Behavior (创建行为)

  3. Cache Behavior Settings (缓存行为设置) 部分中,使用以下指南中为每个终端节点类型指示的第一个模式填充 Path Pattern (路径模式)。例如,对于 DASH 终端节点,为 Path Pattern (路径模式) 键入 *.mpd

    路径模式

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

    • 对于父清单和子清单,请使用 *.m3u8

    • 对于内容段,请使用 *.ts

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

    • 对于父清单和子清单,请使用 *.m3u8

    • 对于内容段,请使用 *.mp4

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

    • 对于父清单,请使用 *.mpd

    • 对于内容段,请使用 *.mp4

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

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

    查看器协议策略

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

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

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

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

    对象缓存

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

    最小 TTL

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

    查询字符串转发和缓存

    选择全部转发,基于白名单进行缓存

    查询字符串白名单

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

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

    如果在 MediaPackage 中使用清单筛选功能,请针对清单请求(aws.manifestfilter*.m3u8*.mpd)在缓存行为中将 index.ism/* 指定为额外的查询字符串参数。这会将您的分配配置为将 aws.manifestfilter 查询字符串转发到您的 MediaPackage 源,需要此字符串才能使用清单筛选功能。有关更多信息,请参阅 AWS Elemental MediaPackage 用户指南中的清单筛选

  5. 选择创建

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

步骤 4:使用 CloudFront 为实时流频道提供服务

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

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