SourceBuffer.abort()

Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。

SourceBuffer インターフェイスの abort() メソッドは、現在のセグメントを打ち切り、セグメントパーサーをリセットします。

構文

sourceBuffer.abort();

パラメーター

なし。

戻り値

例外

例外 説明
InvalidStateError 親メディアソースの MediaSource.readyState プロパティが open と等しくないか、この SourceBufferMediaSource から取り除かれています。

abort() の仕様の説明はやや混乱します。 例えば、パーサーの状態のリセット(reset parser state)のステップ 1 を検討してください。 MSE API は完全に非同期ですが、この手順は同期(ブロッキング)操作を示唆しているように見えますが、これは意味がありません。

つまり、現在の実装は、ソースバッファで発生している現在の追加(またはその他)操作を停止し、すぐに操作を再開したい特定の状況で役立ちます。 例えば、次のコードを検討してください。

js
sourceBuffer.addEventListener('updateend', function (_) {
  ...
});

sourceBuffer.appendBuffer(buf);

appendBuffer の呼び出し後、updateend イベントが発生する前(つまり、バッファは追加されているが、操作はまだ完了していない)に、ユーザーが新しいポイントを探して動画を「スクラブ」するとします。 この場合、ソースバッファで abort() を手動で呼び出して現在のバッファのデコードを停止し、動画の現在の新しい位置に関連する新しく要求されたセグメントを取得して追加します。

Nick Desaulnier の bufferWhenNeeded デモで同様の動作を確認できます。 48 行目では、イベントリスナーが再生中の動画に追加されseek() という関数が seeking イベントが発生したときに実行されます。 行 92〜101 では、seek() 関数が定義されています。 ここで、MediaSource.readyStateopen に設定されている場合、abort() が呼び出されることに注意してください。 つまり、新しいソースバッファを受信する準備ができていることを意味します。 この時点で、現在のセグメントを打ち切り、新しいシーク位置のセグメントを取得するだけの価値があります(checkBuffer() および getCurrentSegment() を参照)。

仕様

Specification
Media Source Extensions™
# dom-sourcebuffer-abort

ブラウザーの互換性

BCD tables only load in the browser

関連情報