使用 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 容器提供内容
-
按照允许 Amazon CloudFront 访问您的 AWS Elemental MediaStore 容器中的过程进行操作,然后返回到这些步骤以创建分配。
-
使用以下设置创建分配:
-
源域 – 分配到您的 MediaStore 容器的数据端点。从下拉列表中,选择用于您的实时视频的 MediaStore 容器。
-
源路径 – 存储您的对象的 MediaStore 容器中的文件夹结构。有关更多信息,请参阅 源路径。
-
添加自定义标头 – 如果您希望 CloudFront 在将请求转发到源时添加自定义标头,请添加标头名称和值。
-
查看器协议策略 - 选择将 HTTP 重定向到 HTTPS。有关更多信息,请参阅 查看器协议策略。
-
缓存策略和源请求策略
-
对于缓存策略,选择创建策略,然后创建一个适合您的缓存需求和分段持续时间的缓存策略。在创建策略后,刷新缓存策略列表,然后选择您刚创建的策略。
-
对于源请求策略,从下拉列表中选择 CORS-CustomOrigin。
-
对于其他设置,您可以基于其他技术要求或您企业的需求设置特定值。有关分配的所有选项的列表以及有关设置这些选项的信息,请参阅分配设置参考。
-
-
对于您的应用程序中的链接(例如,媒体播放器),请以您通过 CloudFront 分配其他对象所用的相同格式指定媒体文件的名称。
提供使用 AWS Elemental MediaPackage 格式化的实时视频
如果您已使用 AWS Elemental MediaPackage 设置实时流格式,您可以创建一个 CloudFront 分配,并配置缓存行为以提供实时流。以下过程假定您已使用 MediaPackage 为实时视频创建了通道并添加了端点。
要手动为 MediaPackage 创建 CloudFront 分配,请执行以下步骤:
步骤
步骤 1:创建和配置 CloudFront 分配
完成以下步骤,以便为您使用 MediaPackage 创建的实时视频通道设置 CloudFront 分配。
为您的实时视频通道创建分配
登录 Amazon Web Services Management Console,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v4/home
。 -
选择创建分配。
-
选择用于分配的设置,包括以下内容:
- 源域
-
您的 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 分配中的某处。为防止与显式路径不匹配的请求路由到真实源,请为该通配符路径创建“虚拟”源。例 :创建“虚拟”源
在以下示例中,端点
abc123
和def456
路由到“真实”源,但对任何其他端点的视频内容的请求会路由到没有正确子域的mediapackage.us-west-2.amazonaws.com
,这会导致 HTTP404
错误。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
对于其他分配设置,可以基于其他技术要求或您企业的需求设置特定值。有关分配的所有选项的列表以及有关设置这些选项的信息,请参阅分配设置参考。
完成选择其他分配设置后,请选择创建分配。
-
选择刚刚创建的分配,然后选择行为。
-
选择默认缓存行为,然后选择编辑。为您选择作为源的通道指定正确的缓存行为设置。稍后,您将添加一个或多个其他源,并为其编辑缓存行为设置。
-
转到 CloudFront 分配页面
。 -
等到分配的上次修改时间列的值从正在部署变为某个日期和时间后,即表示 CloudFront 已创建您的分配。
步骤 2:为 MediaPackage 端点的域添加源
重复此处的步骤,将您的每个 MediaPackage 通道端点添加到您的分配,请记住需要创建一个“虚拟”源。
将其它端点作为源进行添加
-
在 CloudFront 控制台上,选择您为通道创建的分配。
-
选择源,然后选择创建源。
-
对于源域,请在下拉列表中,为您的通道选择一个 MediaPackage 端点。
-
对于其他设置,可以基于其他技术要求或您企业的需求设置值。有关更多信息,请参阅 源设置。
-
选择创建源。
步骤 3:配置所有端点的缓存行为
对于每个端点,您必须配置缓存行为,以添加可正确路由请求的路径模式。您指定的路径模式取决于您提供的视频格式。以下过程包括用于 Apple HLS、CMAF、DASH 和 Microsoft Smooth Streaming 格式的路径模式信息。
您通常为每个端点设置两个缓存行为:
-
父清单文件,这是您文件的索引。
-
分段,它们是视频内容的文件。
为端点创建缓存行为
-
在 CloudFront 控制台上,选择您为通道创建的分配。
-
选择行为,然后选择创建行为。
-
对于路径模式,使用特定的 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/*
。 -
-
对于每个缓存行为,指定以下设置的值:
- 查看器协议策略
-
选择将 HTTP 重定向到 HTTPS。
- 缓存策略和源请求策略
-
对于缓存策略,选择创建策略。对于新的缓存策略,请指定以下设置:
- 最小 TTL
-
设置为 5 秒或更短,以帮助防止提供过期内容。
- 查询字符串
-
对于查询字符串(在缓存键设置中),选择包括指定的查询字符串。对于允许,添加以下值,方法是键入这些值,然后选择添加项目:
-
将
m
添加为您希望 CloudFront 用作缓存基础的查询字符串参数。MediaPackage 响应始终包含标签?m=###
,以捕获端点的修改时间。如果内容已使用此标签的不同值进行缓存,CloudFront 会请求新的清单文件,而不提供此缓存版本。 -
如果在 MediaPackage 中使用时移查看功能,请在清单文件请求(
start
、end
和*.m3u8
)的缓存行为中将*.mpd
和index.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 阻止播放列表请求特征正常发挥作用所必需的。
-
-
选择创建。
-
创建缓存策略后,返回到缓存行为创建工作流。刷新缓存策略列表,然后选择您刚创建的策略。
-
选择创建行为。
-
如果端点不是 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 格式。