Я пытаюсь выполнить команду в фоновом режиме, используя PHP, чтобы веб-приложение могло продолжать загружаться, но пока безуспешно.
Команда предназначена для приложения потокового вещания, поэтому включает следующее:
<stream pre-process> | ffmpeg <options> | <stream segmenter>
Я могу вставить вышеприведенное в скрипт и выполнить его в фоновом режиме в bash с помощью &, но в 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();
}