AWS上的媒体转换



我有一个用nodeJS (/API/uploadS3)编写的API,这是一个PUT请求,并接受视频文件和URL(在这种情况下,AWS s3 URL)。调用后,它的任务是将文件上传到s3 URL。

现在,用户正在以不同的格式上传文件到这个节点API(由于不同的浏览器以不同的格式录制视频),我想将所有这些视频转换为mp4,然后将它们存储在s3中。

我想知道做这件事的最好方法是什么?

到目前为止我有两个解决方案

1。在节点服务器上使用ffmpeg转换-

这样做的问题是ffmpeg一次只能执行一个操作。由于我只有一台服务器,我将不得不为多个请求实现一个队列,这可能导致队列末尾的用户等待时间更长。除此之外,我担心在任何正在进行的视频转换过程中,我的节点的流量处理能力是否会受到影响。

有人可以帮助我了解什么将是其他请求来到我的服务器的效果,而视频转换正在进行中?它将如何影响RAM、CPU使用率和处理其他请求的速度?

2。使用AWS lambda函数-

为了避免节点服务器上的负载,我正在考虑使用AWS lambda服务器,我的节点API将以用户提供的格式将文件上传到S3。一旦完成,s3将触发lambda函数,该函数可以使用ffmpeg或AWS MediaConvert将s3文件转换为。mp4文件,完成后将mp4文件上传到新的s3路径。现在我不希望输出路径是任何s3路径,而是节点API首先接收到的路径。

此外,我希望用户在这一切发生时等待,因为我必须基于此上传的成功或错误启用其他UI功能。

这里的查询是,是否有可能使用单个API(如/API/uploadS3)来做到这一点——>上传至s3——>触发lambda——>转换文件——>上传mp4版本——>返回成功或错误。

目前,如果我上传到s3,请求就会结束。那么,是否有一种方法可以延迟API响应,直到所有操作都完成为止?

另外,lambda函数如何访问传递给节点API的输出s3桶的路径?

欢迎其他更好的方法。

PS -节点API接收到的s3路径对于每个用户是不同的。

谢谢你的帖子。输出S3桶在新文件到达时(即从AWS MediaConvert交付)生成File Events。

这个文件事件可以触发第二个Lambda函数,该函数可以使用任何支持的传输协议将文件移动到其他地方,如果需要,请重试;将状态记录到AWS CloudWatch和/或AWS SNS;然后根据它们移动的成功/完成发送一个最终的API响应。

AWS有一个阶跃函数特性,可以跨连续lambda函数维护状态,用于自动化简单工作流。这应该对你想要完成的工作有效。见https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html

注意,任何一个lambda函数的最大运行时间为15分钟,因此任何一个转码或文件复制操作必须在15分钟内完成。另一种选择是在EC2上运行。

我希望这对你有所帮助!

最新更新