使用 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 分配,请执行以下步骤:
步骤
完成以下步骤,以便为您使用 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 已创建您的分配。
重复此处的步骤,将您的每个 MediaPackage 通道端点添加到您的分配,请记住需要创建一个“虚拟”源。
将其它端点作为源进行添加
-
在 CloudFront 控制台上,选择您为通道创建的分配。
-
选择源,然后选择创建源。
-
对于源域,请在下拉列表中,为您的通道选择一个 MediaPackage 端点。
-
对于其他设置,可以基于其他技术要求或您企业的需求设置值。有关更多信息,请参阅 源设置。
-
选择创建源。
对于每个端点,您必须配置缓存行为,以添加可正确路由请求的路径模式。您指定的路径模式取决于您提供的视频格式。以下过程包括用于 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 端点,请重复这些步骤以创建第二个缓存行为。
我们建议在 MediaPackage 端点和 CloudFront 分配之间启用基于标头的 MediaPackage CDN 授权。有关更多信息,请参阅《AWS Elemental MediaPackage 用户指南》中的在 MediaPackage 中启用 CDN 授权。
创建分配、添加源、创建缓存行为并启用基于标头的 CDN 授权之后,您可以使用 CloudFront 提供实时流通道。CloudFront 根据您为缓存行为配置的设置,将来自查看器的请求路由到正确的 MediaPackage 端点。
对于应用程序(例如媒体播放器)中的链接,请采用 CloudFront URL 的标准格式指定媒体文件的 URL。有关更多信息,请参阅 在 CloudFront 中自定义文件的 URL 格式。
使用 AWS Elemental MediaPackage 提供视频点播内容
如果您从 AWS Elemental MediaPackage 源发起视频点播(VOD,Video-on-Demand)内容,则可以创建 CloudFront 分配并配置优化的缓存行为,以便向查看器提供 VOD 内容。以下过程假设您已经使用打包配置创建打包组,并使用 MediaPackage 摄取了资产。
要手动为 MediaPackage 创建 CloudFront 分配,请执行以下步骤:
步骤
完成以下过程,以便为您使用 MediaPackage 创建的打包组设置 CloudFront 分配。
为您的 VOD 内容创建分配
登录 Amazon Web Services Management Console,并通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/v4/home
。 -
选择创建分配。
-
选择用于分配的设置,包括以下内容:
- 源域
-
您的 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
。有关更多信息,请参阅 源域。
- 源路径
-
提供内容的路径。
有关源路径如何工作的更多信息,请参阅源路径。
重要
需要通配符路径
*
才能路由到 CloudFront 分配中的某处。为防止与显式路径不匹配的请求路由到真实源,请为该通配符路径创建“虚拟”源。例 :创建“虚拟”源
在以下示例中,打包配置
def456
和321xyz
路由到“真实”源,但对任何其他视频内容的请求会路由到没有正确子域的mediapackage-vod.us-west-2.amazonaws.com
,这会导致 HTTP404
错误。对于具有两种打包配置的打包组,其中单个资产的 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
对于其他分配设置,可以基于其他技术要求或您企业的需求设置特定值。有关分配的所有选项的列表以及有关设置这些选项的信息,请参阅分配设置参考。
完成选择其他分配设置后,请选择创建分配。
-
选择刚刚创建的分配,然后选择行为。
-
选择默认缓存行为,然后选择编辑。为您选择作为源的打包配置指定正确的缓存行为设置。稍后,您将添加一个或多个其他源,并为其编辑缓存行为设置。
-
转到 CloudFront 分配页面
。 -
等到分配的上次修改时间列的值从正在部署变为某个日期和时间后,即表示 CloudFront 已创建您的分配。
重复此处的步骤,将您的每个 MediaPackage 打包组添加到您的分配,请记住需要创建一个“虚拟”源。
添加其他打包组作为源
-
在 CloudFront 控制台上,选择您为通道创建的分配。
-
选择源,然后选择创建源。
-
对于源域,键入 MediaPackage 打包组的 URL。
-
对于其他设置,可以基于其他技术要求或您企业的需求设置值。有关更多信息,请参阅 源设置。
-
选择创建源。
对于每个打包配置,您必须配置缓存行为,以添加可正确路由请求的路径模式。您指定的路径模式取决于您提供的视频格式。以下过程包括用于 Apple HLS、CMAF、DASH 和 Microsoft Smooth Streaming 格式的路径模式信息。
通常,您会为每个打包配置设置多个缓存行为:
-
父清单文件,这是您文件的索引。
-
分段,它们是视频内容的文件。一种格式可能会对内容使用多个扩展名,具体取决于您的配置。每个扩展名都需要缓存行为。
为打包配置创建缓存行为
-
在 CloudFront 控制台上,选择您为通道创建的分配。
-
选择行为,然后选择创建行为。
-
对于路径模式,使用特定的 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/*
。 -
-
对于每个缓存行为,指定以下设置的值:
- 查看器协议策略
-
选择将 HTTP 重定向到 HTTPS。
- 缓存策略和源请求策略
-
对于缓存策略,选择创建策略。对于新的缓存策略,请指定以下设置:
- 最小 TTL
-
设置为 5 秒或更短,以帮助防止提供过期内容。
- 查询字符串
-
对于查询字符串(在缓存键设置中),选择包括指定的查询字符串。对于允许,添加以下值,方法是键入这些值,然后选择添加项目:
-
如果您在 MediaPackage 中使用清单筛选特征,请针对您要与清单请求(
aws.manifestfilter
、*.m3u8
和*.mpd
)的缓存行为结合使用的缓存策略,将index.ism/*
指定为额外的查询字符串参数。这会将您的分配配置为将aws.manifestfilter
查询字符串转发到您的 MediaPackage 源,需要此字符串才能使用清单筛选特征。有关更多信息,请参阅《AWS Elemental MediaPackage 用户指南》中的清单筛选。
-
-
选择创建。
-
创建缓存策略后,返回到缓存行为创建工作流。刷新缓存策略列表,然后选择您刚创建的策略。
-
选择创建行为。
-
如果端点不是 Microsoft Smooth Streaming 端点,请重复这些步骤以创建第二个缓存行为。
我们建议在 MediaPackage VOD 内容与 CloudFront 分配之间,启用基于标头的 MediaPackage CDN 授权。有关更多信息,请参阅《AWS Elemental MediaPackage 用户指南》中的在 MediaPackage 中启用 CDN 授权。
创建分配、添加源、创建缓存行为并启用基于标头的 CDN 授权之后,您可以使用 CloudFront 提供 VOD 内容。CloudFront 根据您为缓存行为配置的设置,将来自查看器的请求路由到正确的 MediaPackage VOD 内容。
对于应用程序(例如媒体播放器)中的链接,请采用 CloudFront URL 的标准格式指定媒体文件的 URL。有关更多信息,请参阅 在 CloudFront 中自定义文件的 URL 格式。