Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP在后台运行管道shell命令_Php_Ffmpeg_Video Streaming - Fatal编程技术网

使用PHP在后台运行管道shell命令

使用PHP在后台运行管道shell命令,php,ffmpeg,video-streaming,Php,Ffmpeg,Video Streaming,我正在尝试使用PHP在后台执行一个命令,这样web应用程序就可以继续加载,但到目前为止运气不佳 该命令用于流媒体直播应用程序,因此涉及以下内容: <stream pre-process> | ffmpeg <options> | <stream segmenter> 如果需要输出操作结果,请使用system或passthru方法,或使用popen或proc_open完全控制流程的输入和输出 通常,web服务器触发的PHP脚本用于生成页面并退出。它们不是执行视

我正在尝试使用PHP在后台执行一个命令,这样web应用程序就可以继续加载,但到目前为止运气不佳

该命令用于流媒体直播应用程序,因此涉及以下内容:

<stream pre-process> | ffmpeg <options> | <stream segmenter>

如果需要输出操作结果,请使用system或passthru方法,或使用popen或proc_open完全控制流程的输入和输出

通常,web服务器触发的PHP脚本用于生成页面并退出。它们不是执行视频编码等后台任务的最佳场所,您的web服务器将对程序的执行时间施加限制,并且很难从浏览器中获取状态信息(它看起来会挂起)

最好是使用Python(或PHP)等语言创建一个单独的守护进程,该进程将在您的计算机上运行。当您的web脚本需要对视频进行转码时,它们可以将必要的信息放入数据库或文件中,该数据库或文件可以由守护进程轮询。守护进程还可以使用状态信息更新数据库


一般来说,您的web服务页面应尽可能做到“无阻塞”,这意味着如果某件事情需要花费一两秒钟以上的时间,请在后台进行,并在您的网站上创建页面,以允许用户查看操作状态并对其进行操作。

谢谢Zack。我的目的不是阻止这个,我想我正在尝试在线实现“守护进程”功能,但可能不可能。但要澄清的是,我不想说出这次行动的结果;该命令字符串在磁盘上创建由HTML-5元素(PHP程序继续创建)访问的文件。我将看一看守护进程方法,但希望有更简单的方法来简化现场部署。
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();
}