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

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

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

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

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

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

提示

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

使用 AWS Elemental MediaStore 作为源来提供视频

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

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

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

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

    源域

    分配到您的 MediaStore 容器的数据端点。从下拉列表中,选择用于您的实时视频的 MediaStore 容器。

    源路径

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

    添加自定义标头

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

    查看器协议策略

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

    缓存策略和源请求策略

    对于缓存策略,选择创建策略,然后创建一个适合您的缓存需求和分段持续时间的缓存策略。在创建策略后,刷新缓存策略列表,然后选择您刚创建的策略。

    对于源请求策略,从下拉列表中选择 CORS-CustomOrigin

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

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

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

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

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

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

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

为您的实时视频通道创建分配
  1. 登录 Amazon Web Services Management Console,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v4/home

  2. 选择创建分配

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

    源域

    您的 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

    有关更多信息,请参阅源域

    源路径

    从中提供内容的 MediaPackage 端点的路径。

    未为您填写源路径字段。必须手动输入正确的源路径。

    有关源路径如何工作的更多信息,请参阅源路径

    重要

    需要通配符路径 * 才能路由到 CloudFront 分配中的某处。为防止与显式路径不匹配的请求路由到真实源,请为该通配符路径创建“虚拟”源。

    例 :创建“虚拟”源

    在以下示例中,端点 abc123def456 路由到“真实”源,但对任何其他端点的视频内容的请求会路由到没有正确子域的 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

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

    完成选择其他分配设置后,请选择创建分配

  4. 选择刚刚创建的分配,然后选择行为

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

  6. 转到 CloudFront 分配页面

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

步骤 2:为 MediaPackage 端点的域添加源

重复此处的步骤,将您的每个 MediaPackage 通道端点添加到您的分配,请记住需要创建一个“虚拟”源。

将其它端点作为源进行添加
  1. 在 CloudFront 控制台上,选择您为通道创建的分配。

  2. 选择,然后选择创建源

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

  4. 对于其他设置,可以基于其他技术要求或您企业的需求设置值。有关更多信息,请参阅源设置

  5. 选择创建源

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

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

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

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

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

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

  2. 选择行为,然后选择创建行为

  3. 对于路径模式,使用特定的 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/*

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

    查看器协议策略

    选择将 HTTP 重定向到 HTTPS

    缓存策略和源请求策略

    对于缓存策略,选择创建策略。对于新的缓存策略,请指定以下设置:

    最小 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 用户指南》中的清单筛选

    • 如果您使用的是低延迟 HLS(LL-HLS),请指定 _HLS_msn_HLS_part 作为缓存策略的附加查询字符串参数,用于清单请求的缓存行为(*.m3u8)。这会将您的分配配置为将 _HLS_msn_HLS_part 查询字符串转发到 MediaPackage 源,这是 LL-HLS 阻止播放列表请求特征正常发挥作用所必需的。

  5. 选择创建

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

  7. 选择创建行为

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

步骤 4:启用基于标头的 MediaPackage CDN 授权

我们建议在 MediaPackage 端点和 CloudFront 分配之间启用基于标头的 MediaPackage CDN 授权。有关更多信息,请参阅《AWS Elemental MediaPackage 用户指南》中的在 MediaPackage 中启用 CDN 授权

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

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

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