无服务器视频后端

在Jonas RydholmBirmé的博客文章中,他描述了AWS上完全没有服务器的视频后端的外观。

在设计我们的完全基于的仅OTT播出的概念验证时,我使用了AWS Elastic Transcoder在HLS中生成示例内容。 继续这种思路,我一直在思考AWS上完全没有服务器的视频后端的外观。 在这篇博客文章中,我将描述这种无服务器视频后端的设计。

在开始之前,让我们定义一下在这种情况下视频后端的含义。 视频后端可以是整个在线视频平台,包括视频管理,权利,元数据和权限管理,但是在这种情况下,我将其范围缩小到仅包括视频管理。 元数据,权利和权限管理在此设计之外的系统/组件中处理。 现在,整理出来,让我们看看该系统的不同部分。

内容提取

操作员需要能够向视频后端添加内容,为此,我们需要一个用户界面。 该用户界面是作为Javascript应用程序开发的,并由存储在S3存储桶中的静态HTML文档提供服务。 为了通过HTTP和Internet分发HTML,我使用了以该存储桶为源的AWS Cloudfront分发。 由于HTML内容是静态的,因此无需设置Web服务器或NodeJS应用程序。

当操作员想要上传视频文件时,Javascript应用程序将使用AWS S3 SDK处理将视频文件上传到S3存储桶,并创建由Lambda函数(接收服务)创建的AWS Elastic Transcoder转码作业。 使用AWS API网关将此Lambda函数作为HTTP REST资源终端节点公开。

AWS Elastic Transcoder转码作业是使用AWS开发工具包创建的,我在之前的文章中介绍了如何完成此工作,在这种情况下,我希望输出为HLS。 为了描述此Lambda函数的功能,我将向您展示该Lambda函数自动执行的手动过程。

我已经准备好了一个管道,我们将在其中放置代码转换器工作。 管道配置了使用哪个S3存储桶查找源视频文件以及使用哪个S3存储桶写入输出HLS。 输出关键字前缀是将放置所有HLS段和清单文件的目录的名称。 输入键是要进行转码的源视频文件的名称。

我创建了许多输出,并使用了系统预设HLS 2M,HLS 1M和HLS 600k。 指定每个视频段持续时间为8秒,输出键为每个段的前缀。

我将这些输出放置在HLS主播放列表中,并在这种情况下指定使用HLS版本3。 转码作业完成后,HLS文件将按照管道中的配置存储在S3存储桶(HLS存储)中。

内容分配

要访问此HLS Storage S3存储桶的内容,我将另一个Cloudfront发行版与CNAME maitv-vod.lab.eyevinn.technology一起使用。

要播放HLS,您只需指向HLS视频播放器即可播放,例如URL http://maitv-vod.lab.eyevinn.technology/stswe1/master.m3u8。 您可以在Safari中使用本机播放器进行尝试。

该URL与资产ID相关联,并通过Ingest Service Lambda函数存储在AWS简单数据库(例如DynamoDB)中。

内容访问

由于我们已决定该视频后端不处理元数据和内容发现,因此我们假定在这种情况下,客户端应用程序已经具有要播放的内容的资产ID。 而且我们在视频后端中也没有权限控制,因此客户端应用程序唯一需要的就是现在的资产ID。 为了能够获取指向HLS的URL,使用了另一个Lambda函数(视频资产服务),并且与Ingest Service相似,此Lambda函数使用API​​网关作为REST资源公开。 此Lambda函数在数据库中执行查找,并将HLS URL返回给客户端。 然后可以将此HLS URL传递到客户端应用程序中的视频播放器。

总而言之,在本文中,我描述了如何构建视频后端,该后端在不使用AWS上单个服务器实例的情况下管理Content Ingest,Content Access和Content Distribution。 使用这种无服务器的方法意味着您只需支付使用的存储空间和消耗的处理能力。 当系统空闲时,您基本上无需支付任何费用。 作为读者,我现在由您自己来计算这种方法在财务上是否对您来说更有利。 希望您喜欢阅读!

JonasBirmé是 Eyevinn Technoloy 的解决方案架构师 瑞典的一家独立咨询公司,专门从事视频和流技术。