2011-06-18 9 views
4

私は、ユーザーがサイトにビデオをアップロードできるビデオストリーミングサイトの開発に取り組んでいます(uploadify jqueryプラグインを使用して複数のビデオを一度に)。複数のビデオのアップロード中にビデオエンコーディングのキューイングを処理する方法は?

今、私はビデオをFLVにエンコードしてオンラインでストリーミングするという問題に直面しています。

いつビデオエンコード処理を行う必要がありますか?アップロードが完了した直後に(つまり、成功ページをアップロードするようにユーザーをリダイレクトし、ffmpegのexecコマンドを使用してバックグラウンドでエンコードを開始しますか?)しかし、この方法を使用すると、エンコードが正常に終了したかどうかを確認できますか?ユーザーが破損したビデオをアップロードし、ffmpegでエンコードできない場合はどうなりますか?どのように私はこれをPHPで処理するのですか?

複数のユーザーが同時にビデオをアップロードできるので、どのようにビデオのエンコードをキューに入れますか? FFMpegには独自のエンコードキューがありますか?

私はまた、他の関連するSOスレッドのredisやAMQPのようなギアマンとメッセージ待ち行列オプションについても読んでいます。これらのソリューションは潜在的なものですか?

誰かが私の質問に答えることができたら本当に感謝します。

答えて

2

gearmanというソフトウェアを使用する必要があります。これはジョブサーバであり、PHPを使用して関数を呼び出すことができます。プロセスをバックグラウンドに移すことができ、自動的にキューイングを処理します。多くのプロセスを並列実行することもできます。

私はこれを使用しており、インストールと操作は非常に簡単です。あなたのユースケースについては

Wrap the ffmpeg process in a php file with exec. 
Save the uploaded file to db and give it an id. 
Call the encode function after a user uploads file. 
As soon as the encode function starts, 
update the db to reflect that the file was "picked". 
First run the ffmpeg info on the file to see if it is fine. 
Then encode the file and after it is done, update db flag to "done". 

プロセスが完了したら、あなたはエンコードが完了しているユーザーに対してなどをつぶやき、電子メールを送信するために別の関数を呼び出すことができます。

+0

回答ありがとうございますmridkash。しかし、あなたが言ったように "次にファイルをエンコードし、それが終わったらdbフラグを 'done'に更新してください。"、どうやってエンコードが完了したのか分かりますか? –

+0

php exec(ffmpeg)呼び出しが終了すると、2つの可能性があります。処理が完了したか、失敗しました。execコールの後、エンコードされたファイルが存在するかどうかを確認し、ffmpeg infoを実行してdbフラグを "done"に更新することもできます。 –

+0

あなたのコメントによると、 "php exec(ffmpeg)コールが終了したとき"です。 ffmpegの呼び出しがいつ終了したかはどのように判断するのですか?私はいつもファイルの定期的なチェックを行うことができますが、エンコーディングが終了する前でもそこに存在する可能性があります。 –

2

フォルダーに入力ファイルを追加してデータベースにエントリを追加したい場合があります。次に、データベースから保留中のビデオをFLV形式に変換する、常にまたは毎分実行されるスクリプトがあります。

これらをキューに入れるには、各ファイルに対してFFMpegを再実行するカスタムスクリプトを作成する必要があります。

1

FFMpegは単なるコマンドラインユーティリティです。キューはありません。非同期で作業を実行するには、独自のキューイングシステムを構築する必要があります。

PHPキューの場合、私はpheanstalk PHPクライアントを使用して、Beanstalkdサーバーを使い慣れていました。アップロードスクリプトは、エンコードのためにアイテムをキューに挿入し、ビデオがすぐに処理されるとの応答をユーザーに返します。あなたのワーカーはキューからアイテムを取り出し、それらのFFMpegを実行する必要があります。エンコードが正常に完了したかどうかを判断するには、FFMpegステータスコードを読んでください。

2

サーバー上でcronジョブを使用するか、beanstalkd(またはこの質問に対する他の回答で説明したギアマン)のようなものを使用できます。

関連する問題