Amazon CloudFront 媒体流式传输教程

为什么选择 Amazon CloudFront?

借助 Amazon CloudFront,客户可以通过在 HTTP 之上分层的各种协议将视频流式传输给全球范围内的观看者。

Amazon 内容分发网络(CDN)可与 AWS Elemental 媒体服务搭配使用,以实施两种不同类型的视频流。我们先来了解一下存储在 Amazon Simple Storage Service (Amazon S3) 中的点播视频内容流,然后再了解一下事件的直播流或全天候频道。

如需获得最佳实践,请参阅适用于媒体行业的 Amazon CloudFront 白皮书

构建无服务器视频工作流程

点播流

点播流的视频内容存储在 Amazon S3 中。观看者可以选择在任何所需时间进行观看,“点播”一词便由此而来。完整的点播流解决方案通常使用 Amazon S3 存储内容,使用 AWS Elemental MediaConvert 处理基于文件的视频,并使用 Amazon CloudFront 分发内容。

Amazon S3 是一款出色的适用于视频资产的存储产品。它可以无限扩展,拥有内置冗余,并采用按需付费模式。您可以通过多种方式将内容上传到 S3 中。当上传的数据量较少时,您可以先使用 AWS 管理控制台,随着数据量的增多,您可以改用自动化程度更高的系统。从控制台中使用 S3 的操作非常简单。创建 AWS 账户之后,您只需登录该账户,创建 S3 存储桶,然后上传您的内容即可。如果您想实施自动化系统,则可以在 AWS 命令行界面中使用您自己的脚本,或者在 Amazon S3 API 中使用您自己的代码。

上传完成后,您可能需要将自己的视频转换为某种电视机或互联设备所需的大小、分辨率或格式。AWS Elemental MediaConvert 将会为您处理好这一切。MediaConvert 从 S3 中获取视频,根据您的要求进行转码,然后将结果重新存储回 S3 中。转码操作将对视频文件进行处理,创建原始内容的压缩版本以减小其大小,更改其格式,或者提高与播放设备的兼容性。同样,您还可以通过 AWS 管理控制台、命令行或 MediaConvert API 管理此流程。

内容已安全存储并具有用户所需的格式后,接下来就可以通过 Amazon CloudFront 在全球范围内进行分发了。Amazon 内容分发网络将内容缓存在边缘,以实现低延迟、高吞吐量的视频分发。其可扩展性意味着您可以根据需要提供所需数量的视频。利用按使用量付费模式(详情请参阅 CloudFront 定价),您可以轻松应对意外的需求高峰。

此时,我们将进入正题,您有两种选择:在播放之前将整个视频文件传输给设备,或者将视频流式传输到设备。

第一种方法很容易实施,而且几乎每种移动设备和桌面设备都支持这种方法。您只需将内容放入 S3 存储桶,然后创建一个指向该存储桶的 CloudFront 分配即可。用户的视频播放器将使用 CloudFront URL(作为分配的一部分提供)请求视频文件。根据用户所在的位置,请求将被定向到最佳的边缘站点。CDN 将从其缓存中提供视频,如果视频尚未缓存,则从 S3 存储桶中获取。这种方法有几个缺点。它没有充分利用观看者的带宽。如果用户不想看完整个视频,他们永远不会观看的内容仍然会下载下来,您也需要为之付费。

第二种方法几乎始终是首选方法。一系列视频流式传输协议 [包括 Apple 的 HTTP Live Streaming(HLS)、Dynamic Adaptive Streaming over HTTP(DASH)、Microsoft 的 Smooth Streaming(MSS)以及 Adobe 的 HTTP Dynamic Streaming(HDS)] 会在用户观看过程中传输视频,并且通常会早于所需时间几秒钟获取即将观看的内容,从而改善了用户体验。回放速度变得更快,快速转发更高效,整体的用户体验也更流畅。通过这种方法,您只需为观看者所看内容付费,并充分利用了用户的带宽,而用户也可以更快地看到所需内容。

要实施第二种方法,您将需要执行更多操作。首先,您需要使用 MediaConvert 将您的视频文件转换为 HLS 格式(受到最广泛支持的流式传输协议)。这会将视频分成若干短片段,还会创建清单文件。然后,您需要在清单中指向 CloudFront 分配。最后,要播放直播流,您需要将清单 URL 嵌入用户播放您的直播流时所用的播放器。例如,要播放清单文件为 myStream/playlist.m3u8 且 CloudFront 分配为 d111111abcdef8.cloudfront.net 的直播流,您需要将以下 URL 嵌入播放器:http://d111111abcdef8.cloudfront.net/myStream/playlist.m3u8

基于 AWS 的视频点播”页面提供了在 AWS 云上实施点播视频工作流程时要考虑的最佳实践和指南,还介绍了一种 AWS 解决方案,该解决方案可自动预置构建可提取、存储、处理和传输视频内容的可扩展分布式架构所需的服务。

直播流

在直播流中,您的内容为直播活动或通过全天候直播频道分发。采用第一种方法的示例包括:广播公司和内容整合商流式传输体育赛事、颁奖典礼、主题演讲及其他观看者众多的直播活动。采用后一种方法的示例包括:电影公司、广播公司和付费电视服务运营商通过 Internet 直接(不通过第三方分发平台)打包并向观众分发直播的线性频道。

只需完成以下几个简单的步骤,您就可以通过 AWS 经济高效地向全球观众广播直播内容。

第一步:处理直播视频。处理视频时,您可以使用 AWS Elemental MediaLive,它会实时地对您的直播视频流进行编码,采用较大的直播视频源(例如,来自 AWS Elemental Live 等本地编码器),然后将其压缩为较小的版本以便将其分发给观看者。在第二步中,您可以根据自己的使用案例从两种方法中进行选择。您可以使用 AWS Elemental MediaPackage 等实时打包源将视频内容从单一格式转换为多种格式,并针对不同的设备类型安全打包。MediaPackage 使观看者可以轻松执行常见的视频功能(重新开始、暂停、倒回等),就像 DVR 上常见的视频功能一样。它还可以使用数字版权管理 (DRM) 保护您的内容。或者,如果编码器已将内容转换为所有最终观看者的目标设备所需的格式,您可以使用 AWS Elemental MediaStore 等高性能可扩展源。MediaPackage 和 MediaStore 将内容分发给 Amazon CloudFront,后者会将内容路由到观看直播事件的观众。

在您的解决方案启动并实施后,直播活动便能够以可扩展且经济高效的方式在全球范围内广播。无论观众有多少,CDN 都能够满足他们的需求,并且能够应对“突发访问”。

直播视频流”页面提供了在 AWS 云上选择直播视频流工作流程时要考虑的最佳实践和指南,还介绍了一个 AWS 解决方案,该解决方案可自动预置构建可提供出色的实时观看体验的高度可用且经济高效的架构所需的服务。