2011-06-25 35 views
0

私はffmpegを実行するPHPスクリプトを用意しています。このスクリプトを4回実行して4つのプロセスを起動できます。私はリアルタイムで進歩を見たいと思います。各出力にどのプロセスがどのように対応しているかをどのようにして特定するのですか?複数のexec()プロセスをリアルタイムで進捗させる

$h = fopen('php://stdin', 'r'); $str = fgets($h); 

私は、どの出力が標準出力にあるのか知っていますが、どうやってそれを分けるのですか?どのように出力を継続的にポーリングするのですか?プロセスが開始されると、その出力にどのようにして継続的にアクセスしますか?私はあなたがajaxが必要だが、どのようなPHPメソッドを使用して、その情報にアクセスし、他のプロセスから分離することができます知っている。 テキストファイルへの出力の指示と内容の取得を提案している人もいますが、これが唯一の方法ですか?なぜ各プロセスのテキストファイルを増やし続けるのですか?コマンドの後に2>&1 | php script.phpを使用して出力をリダイレクトする方法もあります。これは、ファイルが1回実行されてからプロセスの開始時にのみ出力されます。

私はしばらくこの問題に苦しんでおり、近づいているので、専門家の助けがあれば分かるはずです。

を参照してください編集

$process = exec("/usr/local/bin/ffmpeg -i /home/g/Desktop/cave.wmv -deinterlace -acodec libfaac -ab 96k -ar 44100 -vcodec libx264 -s 480x320 -f flv /home/g/Desktop/file.flv") 
+0

私はあなたの質問を理解するのに苦労しています..あなたはそれを少し明確だろうか?あなたは 'ffmpeg -o -'でPHPをフィードしますか?プロセスの特定とはどういう意味ですか?スクリプトにコマンドラインパラメータ($ argv)を渡して、一意の識別子を持つようにすることができます。 –

+0

申し訳ありませんが私の編集yiを参照してください。問題は私がコマンドを実行していることです。私は$ argvを使って変数を渡す方法を知っています。このコマンドを実行すると、ファイルを別の形式に変換するプロセスが開始されます。コマンドラインにそのコマンドを入力すると、変換の進行状況を示す出力が得られます。$ h = fopen( 'php:// stdin'、 'r')でこの出力にアクセスできます。 $ str = fgets($ h);しかし、問題は、#1私は連続的に出力を得る方法を知らない#2私はこのプロセスの複数回の実行がある場合、どのように私はそれぞれの出力を得ることができますか? – Scarface

+0

私は、一意のパラメータといくつかの情報を最初に2>&1 | PHPテスト123.php。その情報は私のために2回しか来ません。開始時にファイルにヒットし、処理が完了すると、さらに処理が開始されます。なぜ私は考えていない。進行中のバーを作成できるように、私は途中で情報を得たいと思っています。私は$ h = fopen( 'php:// stdin'、 'r')を使用しています。 while(($ str = fgets($ h))!== false) { – Scarface

答えて

0

これは少し複雑です。私が知る限り、execは完了するまでPHPスレッドをブロックします。私はだと思います。 ffmpegはファイルの進捗状況をファイルに書き込むことができます。進行状況を取得するには、そのファイルを解析する必要があります。それをAjaxで呼びたいと思うでしょう。

は、あなたはffmpegのは、それが進歩だ報告してもらうことができますどのように把握する必要があり、残りは簡単です:P

+0

ええ、それは問題です!私はそれをファイルにすることができますが、アップロードするたびにテキストファイルを作成することをお勧めしますか?私はちょうど進歩を得てデータベースや何かに入れているような、より良い方法があると思った。私は壁の上に頭を打つことを考え始めています。それはテキストファイルを邪魔します。私はちょうど天才がより良い方法を持っていると思った。 – Scarface

+0

私はこれを過度に考えていると思います... – Scarface

0

のみ4のプロセスが同時に実行されなければならない場合、私は本当に4テキストを作成しない理由を見ませんffmpegの出力をそれらに変換することができます。その後、それはPHPでこれらのテキストファイルを読むことの単なる質問です。

このHTTPを動作可能にする場合は、start_process.phpとprocess_status.phpという2つのスクリプトを作成できます。最初のファイルはIDを入力とし、ffmpegプロセスを開始し、進行状況を継続的に読み取り、MySQLデータベースに報告します。 process_status.phpは入力と同じIDをとり、ステータスをMySQLからユーザに報告します。そのファイルをAjaxまでフックしてライブアップデートを入手することができます。

あなたはおそらく、4つのプロセスのための配列を作成する必要があり、おそらく自動的に、同じIDの二重のエントリをチェックするIDを作成し、start_process.phpなど

+0

どうやって進行状況を読み続けますか?それが私の主な問題です。私は本当に4人以上の人がビデオをアップロードするかもしれないので、テキストファイルを使用したくありません。 – Scarface

+0

各プロセスに一意のIDがある場合は、プロセスごとに1つのテキストファイルを格納するフォルダを作成して出力してみましょう。その結果、1つのPHPプロセスが実行され、各ffmpegプロセスをログファイルを読み取って監視します。 – Hubro

0

から返すとソリューションを研磨する必要があります。 proc_openでプロセスを開始し、返されたリソースを配列内でスラップします。次に、配列をポーリングして、各プロセスリソースの出力を調べることができます。

http://us2.php.net/manual/en/function.proc-open.php

関連する問題