我正在寻找适合我的应用程序的最佳方法。
我有视频上传功能。 前端将发送带有附加视频文件的上传/视频
请求,然后我的后端将处理此请求,将减小大小并视频质量(使用 Fluent-ffmpeg
),然后根据视频的第一帧创建缩略图,然后将视频及其缩略图上传到AWS S3存储桶,最后将压缩后的视频和缩略图返回到前端。
我遇到的问题是,所有用于压缩、创建缩略图和上传的(后端)任务都非常耗时,有时(取决于视频大小和持续时间)我的 nginx
服务器将返回 504 Gateway Time-out,这是正常的。问题是:
如何处理这种情况。我是否应该使用网络套接字通知前端处理视频的进度,或者我不需要等到所有这些操作完成。 我的目标是具有功能,我可以上传视频并显示视频处理的一些进度条,并且用户可以“播放”应用程序,而不需要等待视频成功处理
最佳答案
这似乎是一个架构问题。这是我更喜欢的解决方案之一。
使用队列并将进度存储在某些键值数据库中。您可能对队列不熟悉,所以我建议您查看一些与队列相关的教程。当您使用亚马逊时,您可能会对 sqs 感兴趣。在 Rails 中你可以检查 sidekiq。 Laravel 有 Laravel Horizon。
虽然每个队列都是进度设计应用程序,所以它可以报告它。比如 50% 60% 等等。
也在队列中处理缩略图等。
如果您想扩展,只需增加队列数量即可。我认为其他人也是这样处理的。
关于node.js - Nodejs上传并处理视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67268491/