我是ffmpeg和beanstalk的新手,我需要一点帮助。我想使用beanstalk对文件进行排队,以便ffmpeg进行转换。我已经下载,安装并启动beanstald(也安装libevent,因为它建议),我已经下载了beanstald的PHP客户端;
http://sourceforge.net/projects/beanstalk/现在下载客户端后,把它放在我的服务器上,我什么也没做,但使用客户端的例子,我得到这个错误;
致命错误: Maximum execution time of 30 seconds exceeded in/Users/wasimkhamlichi/Sites/viviation/beanstalk/src/beanstalk .class.php on line 1138
这是来自示例的代码;
$beanstalk = BeanStalk::open(array(
'servers' => array( '127.0.0.1:11300' ),
'select' => 'random peek'
));
// As in the protocol doc.
$beanstalk->use_tube('foo');
// As in the protocol doc.
$beanstalk->put(0, 0, 120, 'say hello world'); // Add a job to the queue with highest priority,
// no delay, 120 seconds TTR, with the contents
// 'say hello world'.
// NOTE: the put() method here supports a final optional
// argument, a tube name. If supplied, the server will
// first switch to that tube, write the job, then switch
// back to the old tube again.
// As in the protocol doc.
$job = $beanstalk->reserve(); // Assuming there was nothing in the queue before
// we started, this will give us our 'hello world'
// job back.
// This is a BeanQueueJob object.
echo $job->get(); // Output: 'say hello world'
Beanstalk::delete($job); // Delete the job.
非常简单的快速脚本只是说你好,但它超时了。有人能帮忙吗?
Beanstalk只是传递消息。你把一个东西放到队列的一个地方,然后把它从另一个地方取出来。
您可以将文件名放入名为'ffmpeg-convert'的管道中。从命令行运行的PHP脚本保留队列中的下一项,并执行所需操作,将完成的文件放在适当的位置。
如果您需要更多信息(例如,将完成的文件放在哪里,质量设置或新的输出文件名),您可以对信息进行编码-将信息数组转换为Json字符串(使用json_encode($array)
)是一个不错的选择。您将编码的字符串放入Beanstalk中,然后cli脚本对字符串进行解码,并执行相应的工作。
将worker作为基于命令行的脚本运行通常可以避免任何超时问题。不像网页请求,没有默认超时,也有更多关于内存使用的纬度