停止したイベントを使用することは正しいですが、残念ながら、常に期待どおりに機能するとは限りません。
Media Source Extensionを使用すると、バッファを完全に制御でき、ストールを手動で検出できます。ただし、それを使用したソリューションは、ここでは IMO の範囲外です。
timeupdate
イベントを使用して回避することもできます。
setTimeout()
タイムアウト値を設定して実行する
- イベント内で、
timeupdate
このタイマーをクリアして新しい
- タイマーがリセットされていない場合は、時間の進行がないことを意味し、一時停止または終了していない場合は、停止していると見なされます
例 (未テスト):
...
var timerID = null, isStalling = false;
vid.addEventListener("timeupdate", function() {
clearTimeout(timerID);
isStalling = false;
// remove stalling indicator if any ...
timerID = setTimeout(reportStalling, 2000); // 2 sec timeout
});
// integrate with stalled event in some way -
vid.addEventListener("stalled", function() {isStalling = true})
function reportStalling() {
if ((!vid.paused && !vid.ended) || isStalling) { ... possible stalling ... }
}
...
他の可能性を排除するために追加のチェックを行う必要があるかもしれませんが、これはstalling
イベントの使用に加えて、一般的なアイデアを提供するためのものです。
buffered
別のアプローチとして、オブジェクトを使用してロードされたバッファ セグメントを監視することもできます (使用例については、こちらの回答を参照してください)。
これらを使用して、進行状況があるかどうかを確認currentTime
し、範囲と比較して、時間が範囲の終わりにあるかどうか、および/または範囲がまったく変化しているかどうかを確認できます。
いずれにせよ、これが何らかの情報を提供することを願っています。