--- title: SourceBuffer.abort() slug: Web/API/SourceBuffer/abort tags: - API - Audio - Experimental - MSE - Media Source Extensions - Method - Reference - SourceBuffer - Video - abort translation_of: Web/API/SourceBuffer/abort ---
{{domxref("SourceBuffer")}} インターフェイスの abort()
メソッドは、現在のセグメントを打ち切り、セグメントパーサーをリセットします。
sourceBuffer.abort();
なし。
{{jsxref('undefined')}}。
例外 | 説明 |
---|---|
InvalidStateError |
親メディアソースの {{domxref("MediaSource.readyState")}} プロパティが open と等しくないか、この SourceBuffer が {{domxref("MediaSource")}} から取り除かれています。 |
abort()
の仕様の説明はやや混乱します。 例えば、パーサーの状態のリセット(reset parser state)のステップ1を検討してください。 MSE API は完全に非同期ですが、この手順は同期(ブロッキング)操作を示唆しているように見えますが、これは意味がありません。
つまり、現在の実装は、ソースバッファで発生している現在の追加(またはその他)操作を停止し、すぐに操作を再開したい特定の状況で役立ちます。 例えば、次のコードを検討してください。
sourceBuffer.addEventListener('updateend', function (_) { ... }); sourceBuffer.appendBuffer(buf);
appendBuffer
の呼び出し後、updateend
イベントが発生する前(つまり、バッファは追加されているが、操作はまだ完了していない)に、ユーザーが新しいポイントを探して動画を「スクラブ」するとします。 この場合、ソースバッファで abort()
を手動で呼び出して現在のバッファのデコードを停止し、動画の現在の新しい位置に関連する新しく要求されたセグメントを取得して追加します。
Nick Desaulnier の bufferWhenNeeded デモで同様の動作を確認できます。 48行目では、イベントリスナーが再生中の動画に追加され、seek()
という関数が seeking
イベントが発生したときに実行されます。 行92〜101では、seek() 関数が定義されています。 ここで、{{domxref("MediaSource.readyState")}} が open
に設定されている場合、abort()
が呼び出されることに注意してください。 つまり、新しいソースバッファを受信する準備ができていることを意味します。 この時点で、現在のセグメントを打ち切り、新しいシーク位置のセグメントを取得するだけの価値があります(checkBuffer()
および getCurrentSegment()
を参照)。
仕様 | 状態 | コメント |
---|---|---|
{{SpecName('Media Source Extensions', '#idl-def-sourcebuffer-abort()', 'abort()')}} | {{Spec2('Media Source Extensions')}} | 初期定義 |
{{Compat("api.SourceBuffer.abort")}}