gpt4 book ai didi

node.js - AWS 上的媒体转换

转载 作者:行者123 更新时间:2023-12-04 23:09:49 25 4
gpt4 key购买 nike

我有一个用 nodeJS (/api/uploadS3) 编写的 API,它是一个 PUT 请求并接受一个视频文件和一个 URL(在这种情况下是 AWS s3 URL)。一旦被调用,它的任务就是在 s3 URL 上上传文件。
现在,用户正在以不同的格式将文件上传到这个 Node API(由于不同的浏览器以不同的格式录制视频),我想将所有这些视频转换为 mp4,然后将它们存储在 s3 中。
我想知道这样做的最佳方法是什么?
到目前为止,我有 2 个解决方案
1. 在 Node 服务器上使用 ffmpeg 进行转换 -
问题在于 ffmpeg 一次只能执行一个操作。而且由于我只有一台服务器,我将不得不为多个请求实现一个队列,这可能会导致队列末尾的用户等待更长的时间。除此之外,我担心在任何正在进行的视频转换过程中,如果我的 Node 的流量处理能力会受到影响。
有人可以帮助我了解在进行视频转换时其他请求到达我的服务器的影响吗?它将如何影响 RAM、CPU 使用率和处理其他请求的速度?
2. 使用 AWS lambda 函数 -
为了避免我的 Node 服务器上的负载,我正在考虑使用 AWS lambda 服务器,我的 Node API 将以用户提供的格式将文件上传到 S3。一次,done s3 将触发一个 lambda 函数,然后该函数可以获取该 s3 文件并使用 ffmpeg 或 AWS MediaConvert 将其转换为 .mp4,一旦完成,它将 mp4 文件上传到新的 s3 路径。现在我不希望输出路径是任何 s3 路径,而是 Node API 首先接收到的路径。
此外,我希望用户等待所有这些发生,因为我必须根据此上传的成功或错误启用其他 UI 功能。
这里的查询是,是否可以只使用像/api/uploadS3 这样的单个 API 来执行此操作,它 --> 上传到 s3 --> 触发 lambda --> 转换文件 --> 上传 mp4 版本 --> 返回成功或错误。
目前,如果我上传到 s3,请求就会结束。那么有没有办法将 API 响应推迟到并且除非所有操作都已完成?
此外,lambda 函数将如何访问传递给 Node API 的输出 s3 存储桶的路径?
欢迎任何其他更好的方法。
PS - Node API 接收到的 s3 路径对于每个用户都是不同的。

最佳答案

谢谢你的帖子。当新文件到达(即从 AWS MediaConvert 交付)时,输出 S3 存储桶会生成文件事件。
此文件事件可以触发第二个 Lambda 函数,该函数可以使用任何支持的传输协议(protocol)将文件移动到其他位置,必要时重试;将状态记录到 AWS CloudWatch 和/或 AWS SNS;然后根据他们移动的成功/完成发送最终的 API 响应。
AWS 有一个 Step Functions 功能,可以跨连续的 lambda 函数维护状态,用于自动化简单的工作流程。这应该适用于您想要完成的工作。见 https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html
请注意,任何一个 lambda 函数的最大运行时间为 15 分钟,因此任何一项转码或文件复制操作都必须在 15 分钟内完成。另一种方法是在 EC2 上运行。
我希望这可以帮助你!

关于node.js - AWS 上的媒体转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72728577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com