2

私はhtml5ビデオを使用して再生MediaSourceしています。SourceBuffer中断のないビデオ再生を継続するために、DASH フラグメントを順次フェッチしています。ただし、ネットワークの状態により、SourceBufferデータが不足してプレイを続行できない場合があります。そのデータが到着すると、プレイが再開されます。しかし、この期間の間、ビデオは停止しているように見えます。バッファリングに必要なデータとして一時停止されていることを、メディア要素に視覚的に示したいと思います。

ビデオで「待機中」イベントと「停止」イベントをバインドしようとしましたが、どのイベントも発生しません。

var vid = $('video')[0];
vid.addEventListener('stalled', function(e) { console.log('Media stalled...');})

メディアが停止しているかどうか、いつ再開するかを知る方法はありますか?

ありがとう。

4

2 に答える 2

5

停止したイベントを使用することは正しいですが、残念ながら、常に期待どおりに機能するとは限りません。

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し、範囲と比較して、時間が範囲の終わりにあるかどうか、および/または範囲がまったく変化しているかどうかを確認できます。

いずれにせよ、これが何らかの情報を提供することを願っています。

于 2015-04-22T16:23:04.843 に答える
0

ここに参照がありますhttp://www.w3schools.com/tags/ref_av_dom.asp

イベントを探していると思いますsuspend:ブラウザが意図的にメディアデータを取得していないときに発生します

于 2015-04-22T12:45:48.637 に答える