43

Chrome で奇妙な問題が発生しています。

要素をロードするたびに<video>、chrome は 2 つの HTTP リクエストを開始します。

最初のものは永遠に保留されたままになります(これは「メタデータ」、「部分的なコンテンツ」のリクエストだと思いますが、ポイントは保留されたままであるということです)

同じファイルへの2番目のものは問題なく、ロードが終了した後に続行して閉じます。

ここでの問題は、ブラウザのページを閉じるまで最初のリクエストが保留中のままになることです。そのため、ある時点で複数のビデオをロードすると、利用可能なすべてのリクエストがこれらの保留中のリクエストによって占められているため、Chrome が壊れてダウンロードを停止します。

ここで縮小テスト ケースを作成しました: http://jsbin.com/ixifiq/3


問題の再現を確認したところ、Video.jsMediaElements.jsの両方のフロントページで発生しています。ページをロードするときにネットワーク タブを開くと、保留中の最初のリクエストが表示されます。次に、ビデオの再生を押すと、2 番目のリクエストが機能していることがわかりますが、最初のリクエストは永久に保留されたままになります。

このバグの修正を知っている人はいますか?

4

7 に答える 7

21

(このバグは Chrome 38.0.2125.111、OS X 10.10 にまだ存在します)

?time-suffixこれは Chrome のバグである可能性があり、ダミーのトリックなしで解決でき、Chrome がソケットをより速く解放するのを助けるだけです:

20 以上のビデオ (スライドごとに 1 つ、スライド フォーカスで自動再生) を含む RevealJs HTML プレゼンテーションで同じバグが発生しました。副作用として、このリリースされていないソケットの問題は、同じ HTML DOM 内の最初の保留/ブロックされたビデオの直後に続く他の ajax-lazy-loaded メディアにも影響を与えました。

Walter の回答 (バグ レポートを参照) に従って、次の手順に従って問題を修正しました。

1- ビデオpreload属性をnone次のように設定します。

<video preload="none">
    <source src="video.webM" type="video/webM">
</video>

2 -canplaythroughイベント ハンドラーを使用して、ビデオがロードされて準備ができたら、ビデオを再生および/または一時停止します。これは、Chrome がそのビデオの読み込みに使用されたソケットを解放するのに役立ちます。

function loadVideos(){
    $("video").each(function(index){
            $(this).get(0).load();
            $(this).get(0).addEventListener("canplaythrough", function(){
                this.play();
                this.pause();
            });
    });
}
于 2014-11-05T15:34:45.757 に答える
14

どうやらそれはChromeのバグです。そして、ATMについては何もする必要はありません。

少し前に Chromium プロジェクトでこの問題を報告し、割り当てられました。そのため、近い将来に修正されることを願っています。

バグレポート: https://code.google.com/p/chromium/issues/detail?id=234779

于 2013-05-23T13:36:11.700 に答える
9

今すぐ機能するかどうかはわかりませんが、「video.mp4?t=2123」のように、動画の URL にパラメーターを追加することでこの問題を解決したことを覚えています。もちろん、ビデオをロードするたびに、パラメーターは異なるはずです。私は使うだろう

var parameter = new Date().getMilliseconds(); 

それを取得して追加します。

これにより、少なくとも数か月前は、Chrome が応答を永遠に待たずに同じビデオを複数回再生できました。

それが役に立てば幸い。

于 2013-09-17T19:14:41.260 に答える
8

このバグはまだ存在します。シングル ページ アプリケーションで HTML5 ビデオ プレーヤーを使用しています。プレバッファリングで約 7 人のプレーヤーをロードした後、制限に達し、ビデオがロードされなくなりました。画像に関係する別の回答を見つけましたが、この回答がこの問題を解決することに驚きました。

if(window.stop !== undefined) {
    window.stop();
} else if(document.execCommand !== undefined) {
    document.execCommand("Stop", false);
}

参照: Javascript: 画像リクエストのキャンセル/停止

于 2015-04-19T21:05:56.000 に答える