亚马逊AWS官方博客

简单的无服务器视频点播 (VOD) 工作流

此博文讨论了设置简单的无服务器视频点播 (VOD) 工作流的基本步骤,从而让您可以使用需要的最低配置进行视频流试验。(如果您有更高级的 VOD 使用案例,请参阅此博文以及 AWS Answers 提供的 CloudFormation 模板。) 如要设置无服务器的视频转码工作流,您首先需要创建一个 Amazon S3 存储桶,然后将它关联到某个 Lambda 触发器,从而在有新文件传入时使用 Amazon Elemental MediaConvert 提交转码作业。转码作业会指定 HLS 和 DASH 等视频封装参数以及转码输出的预计比特率。此信息都将存储在另一个 Amazon S3 存储桶中。最后,视频将由 Amazon CloudFront 安全分发,并且限制为仅允许使用源访问身份 (OAI) 访问 Amazon S3 存储桶。

在此部署模板中,我们对设置流程进行了简化,从而让您只需指定少数几个项目,包括输入观察文件夹、保存转码后文件的目标文件夹以及您的封装需求。在提供初步的信息后,模板会使用典型的比特率为您设置整个工作流,您不需要采取任何其他操作!


启动 CloudFormation 模板

以此模板为起点,还可以方便地构建自定义工作流。

1) 选择参数

单击“Next”,然后选择“Parameters”页面上的选项。在部署模板时,您需要指定下列参数:

  • StackName — 输入部署堆栈的名称。所创建的所有资源都将以此名称为前缀。
  • BucketName — 输入存储桶名称中使用的存储桶前缀,其格式如下:{bucket-name}-AWSAccountId-AWSRegion。

例如,如果您指定存储桶的名称为“test”并将其从 AWS 账户 ID “123456789012”部署到 us-east-1 区域,则该存储桶的完整名称将为:test-123456789012-us-east-1。确保存储桶名称的唯一性,可方便您在同一或不同的 AWS 区域部署多个堆栈。

  • EmailAddress — 输入完成视频转码作业后向其发送通知的电子邮件地址。部署之后,您需要单击发送到该电子邮件地址的链接以确认您订阅了通知。
  • InputPrefix — 输入S3 事件通知 Lambda 触发器的观察文件夹。
  • OutputPrefix — 输入保存转码后文件的输出文件夹。
  • PackageType — 选择您需要使用的视频封装方案:HLS、DASH 或 HLS 与 DASH。根据您所选的选项,使用如下分辨率和比特率创建自定义作业预设置,然后用于视频转码。
封装类型 分辨率(宽 x 高) 比特率 (Mbps)
HLS 与 DASH 480 x 270 0.4
HLS 与 DASH 640 x 360 0.6
HLS 与 DASH 640 x 360 1.2
HLS 与 DASH 960 x 540 3.5
HLS 与 DASH 1280 x 720 5
HLS 与 DASH 1920 x 1080 8.5

2) 完成设置

单击 Next,然后再次单击 Next。在提示您确认您在使用自定义名称创建 IAM 资源时,请单击 Yes。然后单击页面底部的 Create Change Set。最后单击 Execute 以启动 CloudFormation 堆栈。完成启动可能需要几分钟。在此期间,检查您的电子邮件并单击链接以确认您订阅了新的 SNS 主题。

堆栈将会创建下列项目:

  • 一个 Amazon S3 存储桶,使用服务器侧加密 (SSE) 以及相关跨源资源共享 (CORS) 和源访问身份 (OAI) 设置来确保通过 CloudFront 私密访问内容。
  • 一个将在有视频上传到指定的输入/观察文件夹时触发的 Lambda 函数,该输入/观察文件夹由您之前指定的 InputPrefix 参数定义。此 Lambda 函数构成一个具体的 MediaConvert 转码作业,将根据您选择的 PackageType 选项来封装视频输出。
  • 以 Amazon S3 存储桶为源建立并通过 OAI 访问的 Amazon CloudFront 分配。

3) 创建输入和输出文件夹

选中新的 CloudFormation 堆栈,记住“Outputs”选项卡页面底部新的 BucketName。在 AWS 管理控制台打开 S3 控制台,然后选择您刚刚创建的新存储桶。在存储桶中,使用您之前指定的 inputPrefix 名称创建一个文件夹。如果您不更改默认的 inputPrefix,则您的 S3 存储桶中的文件夹将命名为 input。您也可以重复上述步骤创建输出文件夹。如果您不更改之前 OutputPrefix 参数规定的输出文件夹的名称,则该文件夹将命名为 output

4) 上传视频

现在将您计划转码的视频上传到输入文件夹中。注意:视频的名称必须仅包含字母和数字。文件名不允许有空格,因为这将导致 AWS Elemental MediaConvert 开始转码时出现错误。转码将在您上传文件后立即开始。转码完成时,或者出现处理错误时,您将收到电子邮件通知

5) 构建访问视频的最终 URL

如要访问转码后的视频,您需要使用由输出文件以及各输出类型的终端节点 URL 组成的 URL。在 AWS Elemental MediaConvert 完成视频转码后,它会将其资产保存到 S3 存储桶中由您的 OutputPrefix 参数命名的文件夹。如要构建最终的 URL,您需要将输出文件名称与您启动的 CloudFormation 模板的“Outputs”选项卡中的 CloudFront URL串联起来。您需要有一个适用于 HLS 输出的 URL,以及另一个适用于 DASH 输出的 URL。下面的步骤和屏幕截图可以帮助您定位和复制文件名和 URL。

  • 从您的 S3 存储桶复制输出文件名。如要找到该文件名,则您创建的“Outputs”文件夹中选择 HLS 或 DASH 文件夹。然后选择文件并复制文件名。例如,在下面的输出中,您需要复制 testvid.m3u8:

  • 前往您刚刚创建的 CloudFormation 堆栈,找到 DASHEndpoint 和 HLSEndpoint URL。HLSEndpoint 和 DASHEndpointSelect URL 在“Outputs”选项卡的页面底部显示,如下面的屏幕截图所示:

  • 如要创建可用于访问视频的最终 URL,只需将输出文件名附加到 HLSEndpoint 和 DASHEndpoint URL 即可。

在此例中,我们将一个名为 testvid.MOV 的文件上传到了输入文件夹:input/testvid.MOV。因此我们将用于访问 HLS 和 DASH 视频的 CloudFront URL 分别为:

  • HLS — https://dxxxxxxx.cloudfront.net/output/hls/testvid.m3u8,资产位于 /output/hls/testvid/ 中
  • DASH — https://dxxxxxxx .cloudfront.net/output/dash/testvid.mpd,资产位于 /output/dash/testvid/ 中

6) 使用播放器进行测试

您可以尝试使用 JWPlayer 流测试工具来播放视频:https://developer.jwplayer.com/tools/stream-tester/

打开 JWPlayer 流媒体测试工具,将您创建的一个 URL 复制并粘贴到工具中。

7) 使用钟爱的在线视频播放器

最后,这时您已经确认可使用 CloudFront 正确进行视频流处理,您可以在自己钟爱的播放器中使用新的 URL 终端节点,开始点播视频的流失处理。