php - 如何使用 PHP 和 ffmpeg 在后台转换视频

标签 php windows video ffmpeg

我允许用户上传视频,然后使用 ffmpeg 进行转换。视频需要很长时间才能转换,这通常会导致错误。我已经完成了我应该从哪里开始的研究,但没有运气。

基本上我想要做的是允许用户上传视频,然后显示一条消息,说视频正在处理中,你会在可用时收到通知。与此同时,我希望视频在幕后进行转换,并允许用户离开页面甚至关闭浏览器。我正在使用 Windows 服务器。

我怎样才能做到这一点?

最佳答案

以下是如何使用调度系统(例如 Cron)创建自己的队列的基本步骤:

  • 创建数据库表queue包含 (id, created_at, file_path, id_user, result, error) . file_path包含要处理的上传视频的位置,结果是null处理前,然后 true/false之后取决于成功,如果失败 error包含任何消息。如果合适的话,用户表的主键也可以保存在这里。
  • 每分钟,运行一个 Cron 程序来检查队列中是否有任何未处理的项目。
  • 如果有项目在等待,请遍历其中一些并运行您的视频转换代码。您可能希望限制这一点,以便一次处理不超过五个项目,并且任何更多排队的项目都必须等待新的 cron 运行。
  • 如果旧副本已经在运行,则在您的 cron 脚本开始时,您需要提前退出。您可以使用 ps aux | grep (scriptname) 的输出如果您在类似 *nix 的操作系统中运行,请在此处提供帮助。

  • 在您的 Web 应用程序中,您需要稍微修改工作流程 - 而不是期望立即处理视频,您需要:
  • 通过创建新的数据库行请求视频转换
  • 重定向到说明视频创建正在进行的页面
  • 使用 Web 重定向、AJAX 或 Web 套接字定期重新检查转换状态。

  • 这种方法对于无法安装自己的队列处理器的共享主机非常有用。但是,如果您在 VPS 或云系统上,您可能希望查看 Gearman 或 one of many other queueing systems .它们比上面的要复杂一些,但具有更多用于管理工作队列的功能。

    关于php - 如何使用 PHP 和 ffmpeg 在后台转换视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31480969/

    相关文章:

    php - PHP 中的自动 CSS 版本控制?

    c++ - 使 PlaySound 成为非阻塞的

    windows - 如何检测 C# win8 Metro 中 BasicPage 上的按键

    java - 在退出 java 之前运行外部程序有时会失败

    video - FFMPEG:使用drawtext以及自动换行和填充创建视频

    PHP gettext 不工作,如何调试?

    php - 哪个 php\mysql 查询更合适

    php - MYSQL select 最近记录的每条 from

    python - 在 python 中中断 omxplayer 播放

    video - 如何使用 ffmpeg 获取 mp4 容器的任何流的持续时间?