PHPを使用してFFMPEGトランスコードコマンドを起動しています。これは、Ubuntu 10.04 Server上で動作する典型的なLAMPセットアップですが、設定に関して特別なものはありません。不正なプロセスIDを返すPHP Exec
PHP Execコマンドを実行すると、不正なプロセスIDが返されます。適切なPIDを返す代わりに、代わりに2つのPIDを返します。すなわち、FFMPEGのプロセスIDは3557ですが、PHPのExecは3559を返します。
私はいつもこれを毎月生成しています。問題は、正しいプロセスIDが本当に必要なので、後で私が選択すればプロセスを停止できることです。
FFMPEGのコマンドの機能と問題なく起動するので、私はそれが問題の原因であるとは思わない:
$cmd = "ffmpeg -r 4 -f mjpeg -an -i 'http://" . $internalhost . ":" . $stream_port . "'
-vcodec libx264 -vpre fastfirstpass -vpre baseline -b 24k -bt 32k -threads 0
http://localhost:8090/" . $localport . ".ffm";
$ffmpg = new Process($cmd);
私が知っている...「それはかなり醜いですが、それが動作し、私はドン変数が重要であるとは思わない。
私は次のようであるPHPマニュアルWebサイトからクラスを使用していたコードを起動するには:
class Process
{
private $pid;
private $command;
public function __construct($cl=false){
if ($cl != false){
$this->command = $cl;
$this->runCom();
}
}
private function runCom(){
$command = 'nohup '.$this->command.' > /dev/null 2> /dev/null & echo $!';
exec($command ,$op);
$this->pid = (int)$op[0];
}
public function setPid($pid){
$this->pid = $pid;
}
public function getPid(){
return $this->pid;
}
public function status(){
$command = 'ps -p '.$this->pid;
exec($command,$op);
if (!isset($op[1]))return false;
else return true;
}
public function start(){
if ($this->command != '')$this->runCom();
else return true;
}
public function stop(){
$command = 'kill '.$this->pid;
exec($command);
if ($this->status() == false)return true;
else return false;
}
}
何が起こっていると思うことは、何らかの理由でFFMPEGが、代わりに別の2つのプロセスをキックオフされていることですメインプロセスのPIDを返すと、最後のプロセスのPIDが返されます。
間違っているかもしれませんが、まだ私の頭を傷つけています。
インラインコードマークアップを使用するように編集http://stackoverflow.com/editing-help#code –