gpt4 book ai didi

php - 进行实时、可扩展的音频处理的最佳策略?

转载 作者:行者123 更新时间:2023-12-02 22:57:49 25 4
gpt4 key购买 nike

我正在构建一个 Web 应用程序,允许用户上传音频文件,尤其是音乐。大多数时候,我预计每首歌曲的持续时间通常约为几分钟,文件大小约为 3-10MB。但是,我想接受最大约 100MB 的音频上传,可能允许超过一个小时的音频。我目前正在使用 FFmpeg、SoX 和 LAME 的组合将 7 种可能的格式转换为 mp3 并执行音频修改,包括均衡、修剪和淡化。然后将文件存储并链接到数据库中。

我目前的策略是在后端使用 PHP 在一个 HTTP 文件上传请求中处理整个过程,其中我执行以下功能:

  • 验证
  • 将音频转码为多个版本(通过 PHP 使用 shell)
  • 将原始版本和转码版本存储在临时目录中
  • 将所有音频文件上传到 Amazon S3 以进行永久存储
  • 将每个文件的 ID 提交到数据库,将它们链接到用户

  • 这与我已经设置的图像处理系统非常相似。然而,虽然图像可以在几秒钟内完成整个过程,但音频可能需要更长的时间。处理和存储音频最多需要 5-10 分钟。

    我的问题是:
  • 对于音频处理,最好将转码 fork 到另一个后台进程,将其状态写入数据库,并每隔几秒 ping 一次以更新网页,而不是在一个 HTTP 请求中完成所有操作?
  • 为了在 future 进行扩展,是否建议在单个服务器实例上进行所有处理,让前端 Web 实例自由复制/被销毁?
  • 如果是,这是否需要跨域文件直接上传到该服务器? (有人知道 youtube 或大型网站是如何做到的吗?)

  • 谢谢!

    最佳答案

    如果我正确理解你的系统,你最好的方法可能更像是这样:

  • 在您的 Web 前端,存储音频并创建一个“任务”,指示需要处理音频。
  • 运行一个拉取任务并进行处理的后台任务。在任务结束时,可以通知用户(如果需要)并且可以更新数据库状态等。

  • 您的任务应该这样编写,以便如果它们在中途失败,它们可以从一开始就重新执行而不会造成问题。您可以在此架构中运行多个后台任务和 Web 前端。

    编写任务的一个好方法是使用像 AMQP 这样的消息传递系统。 .有便宜的服务,如 rabbitmq这将为您做到这一点。当然,您也可以在任何数据库之上构建自己的数据库,但这可能需要轮询。

    最后,您可能会发现使用像 zencoder 这样的服务会更快、更高效。进行转码,因为它们可以并行化工作并且可能处理更多输入格式,但它可能与您的处理不兼容。

    关于php - 进行实时、可扩展的音频处理的最佳策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18413075/

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