Nodejs上传和处理视频

问题描述

我正在为我的应用程序寻找最佳方法我有视频上传功能前端将发送带有附加视频文件upload/video请求,然后我的后端将处理此请求,将减小视频的大小和质量(使用 fluent-ffmpeg ),然后将根据视频的第一帧创建缩略图,然后将视频和他的缩略图上传到AWS S3存储桶,最后将压缩的视频和缩略图返回给前端。 我遇到的问题是,压缩创建缩略图上传的所有(后端)任务都非常耗时,有时(取决于视频大小和持续时间)我的Nginx服务器将返回504 Gateway Time-out,这是正常的。问题是:

如何处理这种情况。我应该使用网络套接通知前端处理视频的进展,还是我不需要等到所有这些操作完成。 我的目标是拥有功能,我可以上传视频并显示一些视频处理进度条,用户可以使用应用程序“播放”,而无需等待视频处理成功

解决方法

似乎这是一个架构问题。这是我更喜欢的解决方案之一。

  1. 使用队列并将进度存储在某个键值数据库中。您可能不熟悉队列,因此我建议您查看一些与队列相关的教程。当您使用亚马逊时,您可能会对 sqs 感兴趣。在 Rails 中,您可以检查 sidekiq。 Laravel 有 Laravel 地平线。

  2. 虽然每个队列都是进度设计应用程序,因此它可以报告它。比如 50% 60% 等等

  3. 也在队列中处理缩略图等。

如果你想扩展,你可以简单地增加队列的数量。我认为其他人也是这样处理的。