2

ヒルが URL を取得して iPhone や Roku アプリで使用するのを防ぐために、php スクリプトを使用してファイルを JWPlayer に提供しています。だから私は videoplay.php?id=myfile を呼び出します。出力は mp4 ビデオ ストリームです。通常、ファイルは 200 ~ 500M バイトです。

php スクリプトは正しく動作し、微調整を加えることで、最初のバージョンよりもはるかに優れたパフォーマンスを発揮します。しかし、それは資源の浪費です。1 つのファイルをストリーミングしているときに、ブラウザで別のウィンドウを開いて同じ Web サイトのページを開くことはできません...現在のページのソースを表示することさえできません。プレーヤーに直接 URL を指定してまったく同じビデオ ファイルを再生すると、リソースを大量に消費する問題は発生せず、ビデオの再生中にページのソースを表示したり、同じ Web サイトの 2 つのビデオを同じブラウザで同時に再生したりできます ( 2 つの異なるページで)。

これが私のコードです

// some code to query database and get the file url
//
$fh = fopen($filename, "rb") or die("Could not open movie\n");

while (!feof($fh) && connection_status() == 0)
{
  print(fread($fh, 1024*8));
  flush();
  ob_flush();
  usleep(10000);
}

fclose($fh);

リソースの使用を制限するために usleep を追加しましたが、うまくいきませんでしたが、動画の読み込みが速くなったようです。usleep をもっと長くすると (例: 1/10 秒)、ビデオの読み込みに時間がかかります。チャンク サイズを 1024*4 から 1024*16 の間で変化させると、8k バイトでビデオの読み込み時間が最速になるようです。16kbyte はさらに多くのリソースを使用し、25MBit 接続を使い果たしているようです。ビデオがローカル サーバーからまったくロードされません (ただし、クラウド サーバー上のリモート ビデオはロードされます)。チャンク サイズを 1kbyte に減らしても、リソースの問題は解決しませんでした。

私は何を間違っていますか?

4

1 に答える 1

3

の使用を逃していることが原因である可能性がありますsession_write_close()。関数呼び出しをストリーミングの開始に追加します。スクリプトが続行する前にお互いが終了するのを待っているため、セッションロックがスクリプトの理由である可能性があります。

于 2012-08-30T19:29:15.513 に答える