gpt4 book ai didi

php - 使用 FFMPEG/Laravel 在 shell_exec() 之后更新数据库

转载 作者:行者123 更新时间:2023-12-04 23:25:11 25 4
gpt4 key购买 nike

我想在 FFMPEG 过程完成后更新数据库记录(MySQL)。通常我会在 FFMPEG 命令之后调用一个函数,但我需要添加 > /dev/null 2>/dev/null &所以我不必等待 FFMPEG 进程完成,这意味着 REST 调用会挂起很长时间,这会导致前端的用户体验不佳。

我不知道从哪里开始。我的第一个想法是发出一个 REST 请求,但也许直接调用 Laravel 中的方法会更好。

我可以在 FFMPEG 命令之后进行 curl 调用吗?或者我可以调用 PHP 方法吗?或者,还有更好的方法?

PHP FFMPEG 方法

private function transcode($movie)
{
try {
$name = 'master.' . $movie->extension;
$this->path = storage_path('app/public/movies/') . $movie->id . '/';
$fps = $this->getFrameRate($name);
$width = $this->getVideoWidth($name);
$height = $this->getVideoHeight($name);

// ffmpeg commands
$c = $this->buildCommand($width, $height, $fps);

// ffmpeg - added '> /dev/null 2>/dev/null &' so it will not wait to finish
$ffmpeg = shell_exec('ffmpeg -i ' . $this->path . $name . ' -progress ' . $this->path . 'transcode.log' . $c . ' > /dev/null 2>/dev/null &');

return response()->json(['message' => 'transcode initiated'], 200);

}
catch(\Exception $e)
{
return response()->json(['error' => $e->getMessage()], 500);
}
}

这是 bash curl 帖子的想法
$curl = 'curl --data "param1=value1&param2=value2" http://hostname/transcode/complete';

$ffmpeg = shell_exec('ffmpeg -i ' . $this->path . $name . ' -progress ' . $this->path . 'transcode.log' . $c . '; $curl > /dev/null 2>/dev/null &');

我可能会走上错误的道路,但我正在努力向前迈进。

最佳答案

运行您的ffmpeg CLI 命令如下:

$ nohup $FFMPEG_COMMAND >> $LOG_FILE 2>&1 & echo $! > $PID_FILE

然后,检查存储在 $PID_FILE 中的 PID 是否实际运行:

FFMPEG_PID=`cat $PID_FILE 2>/dev/null`
if kill -0 $FFMPEG_PID 2>/dev/null ;then
# still running, do whatever you need to do
else
# stopped running, do what needs doing
fi

您还可以获得最后一个输出 FFmpeg 写的:

tail -1 $LOG_FILE

关于php - 使用 FFMPEG/Laravel 在 shell_exec() 之后更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763316/

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