亚马逊AWS官方博客
在实时视频流方案中使用 Amazon S3
介绍
亚马逊简单存储服务(Amazon S3)是一种对象存储服务,提供实时视频工作流的源服务所需的可扩展性、数据可用性、安全性、性能和一致性。这篇文章概述了使用 AWS Elemental Live 和 AWS Elemental MediaLive 与 Amazon S3 生成 HLS 输出组时的配置和弹性最佳实践。亚马逊 S3 现在可以代替 AWS Elemental MediaStore 用于基本的低成本直播视频制作。如果需要其它功能来准备、保护和分发视频内容的实时流媒体工作流,请参阅 AWS Elemental MediaPackage。
实时源服务架构
冗余实时流架构提供两个具有相同输出的媒体处理管道。在本例中,MediaLive 标准频道使用冗余 HLS 清单功能向两个单独的 Amazon S3 存储桶位置生成 HLS 输出。另外,对于 MediaLive 单通道类,只有一个输出目的地,中断将影响观看体验。
对于这两种架构,任何更新清单和片段的失败都会导致实时流变为“过期”,播放器会从源端收到 200 的 HTTP 代码响应,但通常会播放最后几段视频/音频,然后停止。本文概述了检测和失效此类过期变体清单的技术。强制向下游 Amazon CloudFront 内容交付网络(CDN)和视频播放器发送 404 HTTP 错误代码会触发 HLS 规范中描述的冗余故障切换。
当选择 Amazon S3 作为源存储时,为了确保下游 CDN 和播放器处理如前一图所示的冗余清单,需要考虑以下准则。
性能
用于机顶盒(OTT)流的自适应比特率(ABR)媒体通常基于包含视频和音频媒体的一系列顺序命名的文件段。优化 Amazon S3 性能的最佳实践概述了 Amazon S3如何自动扩展到高请求率,以实现每个分区前缀每秒至少 3500 个 PUT/COPY/POST/DELETE 或 5500 个 GET/HEAD 请求。
对于 ABR 工作流,使用斜杠(/)作为每个直播频道格式和相关视频质量变量的分隔符即可提供此前缀。MediaLive 输出路径的语法在提供此前缀的文档中概述。
当对播放列表和媒体片段大小对象的 PUT 和 GET 请求的延迟为 p99.9 时,Amazon S3 的性能在功能上与 AWS Elemental MediaStore 相同。
一致性
Amazon S3 为所有 AWS 区域中 Amazon S3 存储桶中对象的 PUT 和 DELETE 请求提供了强大的读写一致性。此行为既适用于新对象的写入,也适用于覆盖现有对象的 PUT 请求和 DELETE 请求。有关更多信息,请参阅 Amazon S3 数据一致性模型。
在成功写入新对象或覆盖现有对象之后,任何后续的读取请求都会立即接收该对象的最新版本。Amazon S3 还为列表操作提供了强大的一致性,因此在写入后,您可以立即执行桶中对象的列表,并反映任何更改。如果来自发布清单或段的编码器的写入失败,则必须配置重试以确保与可用段的连续性。
弹性
冗余实时编码通道的输出可以是具有不同前缀的单个 Amazon S3 存储桶,也可以是两个单独的 Amazon S3 存储。启用冗余清单功能后,每个通道的主播放列表同时引用其自己的子清单和其他通道的子清单。如果通道出现问题,则该通道的子清单将出现问题。然后,下游播放器可以返回主清单以查找其他通道的子清单。
安全
Amazon S3 允许客户使用加密功能和访问管理工具存储和保护数据,防止未经授权的访问。Amazon S3 坚持合规性程序,如 PCI-DSS、HIPAA/HITECH、FedRAMP、欧盟数据保护指令和 FISMA,以帮助您满足法规要求。AWS 还支持多种审计功能,以监控对 Amazon S3 资源的访问请求。
通过实时编码器的加密和使用 AWS 边缘安全媒体交付解决方案的访问令牌化,为媒体交付提供内容安全。然而,完整的数字版权管理(DRM)需要使用其他服务,如 AWS Elemental MediaPackage。
过期清单失效
当编码器未能将更新上传到媒体播放列表时,通常最好让该对象在被认为过时的时候返回 404。过时的播放列表仅包含在实时边缘之后的片段,因此可能需要将播放切换到不同的可变播放列表。通过返回 404,客户端播放设备能够做出切换决定,以尝试继续播放而不是停留在过期的播放列表上。
一旦部署,此参考 SAM(无服务器应用程序)的实施将监控上传到指定 Amazon S3 存储桶的任何播放列表文件,并在检测到过时播放列表时删除:https://github.com/aws-samples/amazon-cloudfront-s3-hls-invalidator。
只需要检查没有结束列表的可变播放列表,即 HLS 标记#EXT-X-endlist。主多变量播放列表必须保留在 Amazon S3 存储桶中,因为这通常只在启动流时从实时编码器发布,然后不会更新。
在实时编码器中,建议在段名称中添加时间戳,以防止在通道重新启动时段相互覆盖,并确保 CloudFront 具有不同的缓存密钥。对于 MediaLive 的使用,请参阅使用变量数据标识符设计 SegmentModifier。
定价
与大多数 AWS 服务一样,Amazon S3 或 AWS Lambda 没有最低费用。您只为使用部分付费,而实时流媒体应用程序需要考虑的成本组成部分是存储、请求、数据传输和 Lambda 执行时间。您可以在这里阅读更多关于亚马逊 S3 定价的信息,也可以在这里了解 AWS Lambda。
总结
有一个参考架构可用于使用 Amazon S3 在 AWS 上设置实时流,本文概述了一些优化过期清单失效恢复能力的最佳实践。有关更多背景信息,请参阅 AWS re:Invent 2022–Deep dive on Amazon S3。
本篇译者
Original URL:https://thinkwithwp.com/ko/blogs/media/live-video-streaming-using-amazon-s3/