php ffmpeg nohup,php – 在后台运行ffmpeg进程

Am I suppose to create a separate .php

file which then runs from the php cli

to execute one of these functions?

这可能是我这样做的方式:

> PHP网页在数据库中添加一条记录,表示“必须处理此文件”

>并向用户显示消息;像“你的文件将很快处理”之类的东西

>在CLI中,批处理新插入的文件

>首先,将记录标记为“处理”

>做ffmpeg的事情

>将文件标记为“已处理”

>并且,在网页上,您可以向用户显示他的文件所处的状态:

>如果尚未处理

>如果正在处理中

>或者如果已经处理了 – 您可以给他链接到新的视频文件.

以下是其他一些想法:

>您的申请变得更大的那天,您可以:

>一个“网络服务器”

>许多“处理服务器”;在你的应用程序中,它是需要大量CPU而不是服务网页的ffmpeg东西;因此,能够扩展该部分很好(这是另一个“锁定”文件,在DB中表示它们是“处理”:这样,你就不会有多个处理服务器试图处理同一个文件)

>您只使用来自Web服务器的PHP来生成Web页面,这是Web服务器的主要工作

>重/长处理不是Web服务器的工作!

>对于“处理”部分,您希望切换到除PHP以外的其他东西,它会更容易.

你的“处理脚本”必须每隔几分钟启动一次;如果您使用的是类似Linux的计算机,则可以使用cron.

在看到评论后编辑:更多信息

由于处理部分是从CLI完成的,而不是从Apache完成的,因此您不需要任何“后台”操作:您可以使用shell_exec,它将完成命令后将命令的全部输出返回到PHP脚本中工作.

对于观看网页说“处理”的用户来说,它看起来像是后台处理;并且,在某种程度上,它将是,因为处理将由另一个进程(甚至在另一台机器上)完成.

但是,对你来说,它会更简单:

>一个网页(没有“背景”)

>一个CLI脚本,也没有背景资料.

我想你的处理脚本看起来像这样:

// Fetch informations from DB about one file to process

// and mark it as "processing"

// Those would be fetched / determined from the data you just fetched from DB

$in_file = 'in-file.avi';

$out_file = 'out-file.avi';

// Launch the ffmpeg processing command (will probably require more options ^^ )

// The PHP script will wait until it's finished :

// No background work

// No need for any kind of polling

$output = shell_exec('ffmpeg ' . escapeshellarg($in_file) . ' ' . escapeshellarg($out_file));

// File has been processed

// Store the "output name" to DB

// Mark the record in DB as "processed"

真的比你最初想的容易,不是吗? 😉

只是不要担心后台的东西了:唯一重要的是处理脚本是从crontab定期启动的.

希望这可以帮助 :-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值