Rangeリクエストを介してサーバーからファイル(mp4、mp3は関係ありません)をロードする<video>
and要素があります。<audio>
ただし、要素はサーバーから最後の範囲のみを要求しているようで、それ以降はバイト 0 から最後まで直接ストリーミングしようとするため、プレーヤーが「ダウンロード ループ」に陥り、ブラウザーがすべてを一時停止します。ダウンロードが完了するまで他の操作を行います。
この問題の解決策を知っている人はいますか? たとえば、ストリーム リクエストの実際の末尾をcontent length
orにする必要がありaccept-ranges
ますか?
Chrome からの完全なリクエスト リストを次に示します。下部にはview?watch=v__AAAAAA673pxX
、基本的にelement
.
簡単に言うと、リクエストを使用すると、html5 要素がダウンロード ループに陥り、http-range
他のすべてのリクエストが「保留中」のままになります。
アップデート
問題はサーバー側で解決されました。
元のストリーム関数は文字通りすべてのバイトを出力しますが、実際のバッファーのサイズのみを出力するようにコードを変更しました。これelements
により、残りのデータに対して新しい要求が行われます。
ここでの重要な注意点は、ファイルのサイズ、各リクエストの開始位置と終了位置に一致するcontent-length
とaccept-ranges
を返すことです。content-ranges
HTTP RANGE
今後の参考のために:
function stream(){
$i = $this->start;
set_time_limit(0);
while(!feof($this->stream) && $i <= $this->end) {
$bytesToRead = $this->buffer;
if(($i+$bytesToRead) > $this->end) {
$bytesToRead = $this->end - $i + 1;
}
$data = fread($this->stream, $bytesToRead);
echo $data;
flush();
$i += $bytesToRead;
}
}
新しいストリーム機能:
function stream()
{
//added a time limit for safe-guarding
set_time_limit(3);
echo fread($this->stream, $this->offset);
flush();
}