我正在构建一个 Web 应用程序,允许用户上传音频文件,尤其是音乐。大多数时候,我预计每首歌曲的持续时间通常约为几分钟,文件大小约为 3-10MB。但是,我想接受最大约 100MB 的音频上传,可能允许超过一个小时的音频。我目前正在使用 FFmpeg、SoX 和 LAME 的组合将 7 种可能的格式转换为 mp3 并执行音频修改,包括均衡、修剪和淡化。然后将文件存储并链接到数据库中。
我目前的策略是在后端使用 PHP 在一个 HTTP 文件上传请求中处理整个过程,其中我执行以下功能:
- 验证
- 将音频转码为多个版本(通过 PHP 使用 shell)
- 将原始版本和转码版本存储在临时目录中
- 将所有音频文件上传到 Amazon S3 以进行永久存储
- 将每个文件的 ID 提交到数据库,将它们链接到用户
这与我已经设置的图像处理系统非常相似。然而,虽然图像可以在几秒钟内完成整个过程,但音频可能需要更长的时间。处理和存储音频最多需要 5-10 分钟。
我的问题是:
对于音频处理,最好将转码分叉到另一个后台进程,将其状态写入数据库,并每隔几秒 ping 一次以更新网页,而不是在一个 HTTP 请求中完成所有操作?
为了在未来进行扩展,是否建议在单个服务器实例上进行所有处理,让前端 Web 实例自由复制/被销毁?
- 如果是,这是否需要跨域文件直接上传到该服务器?(有人知道这是 youtube 还是大型网站的做法?)
谢谢!