我试图在后台使用PHP执行一个命令,所以Web应用程序可以继续加载,但目前为止没有运气。使用PHP在后台运行一个管道外壳命令
,该命令对直播流应用程序,因此涉及以下内容:
<stream pre-process> | ffmpeg <options> | <stream segmenter>
我能坚持以上的脚本,并在与&庆典背景罚款执行它,但这并不在PHP中工作。我也尝试过使用nohup,并且“nohup & echo $!”,但没有运气。
我也将所有stderr管道到/ dev/null,并且我可以在apache日志中验证在执行命令(但它正在执行)时没有生成输出。
下面的一些示例代码..我有这个代码后不会执行,直到这完成,这是很长的时间。
function streamVid ($mid, $width, $height, $br) {
$cdir = "./temp";
$zmstrm = "zmstreamer -m ".$mid." 2> /dev/null";
$seg = "segmenter - 3 ".$cdir."/sample_".$mid." ".$cdir."/stream_".$mid.".m3u8 ./ 2>/dev/null";
$ffparms = "-f mpegts -analyzeduration 0 -acodec copy -s ".$width."x".$height." -vcodec libx264 -b ".$br." -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate ".$br." -bufsize ".$br." -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 320:240 -g 30 -analyzeduration 0 -async 2 - 2> /dev/null";
$url = $zmstrm . " | ffmpeg -t 10 -analyzeduration 0 -i - ". $ffparms . " | " . $seg;
shell_exec("nohup ". $url." & echo $!");
ob_flush();
flush();
}
谢谢扎克。目的不是阻止这一点,我想我试图实现“守护进程”功能,但可能无法实现。但要澄清,我不想流出这个行动的结果;该命令字符串在磁盘上创建可通过HTML-5元素访问的文件(PHP程序将继续创建)。我会看看一个守护进程的方法,但希望更简单的方法来缓解现场部署。 – 2010-11-09 23:48:40