--- title: SourceBuffer slug: Web/API/SourceBuffer tags: - API - Audio - Experimental - Interface - MSE - Media Source Extensions - Reference - SourceBuffer - Video translation_of: Web/API/SourceBuffer ---
{{APIRef("Media Source Extensions")}}
SourceBuffer
インターフェイスは、{{domxref("MediaSource")}} オブジェクトを介して {{domxref("HTMLMediaElement")}} に渡されて再生されるメディアのチャンク(大きな塊)を表します。 これは、1つまたは複数のメディアセグメントで構成できます。
{{InheritanceDiagram}}
SourceBuffer
に追加されるメディアデータをフィルタリングするために使用できるタイムスタンプの範囲です。 この範囲内のタイムスタンプを持つコード化されたメディアフレームは追加されますが、範囲外のものは除外されます。SourceBuffer
内に現在含まれている音声トラックのリスト。SourceBuffer
に現在バッファされている時間範囲を返します。SourceBuffer
内のメディアセグメントの順序を、任意の順序で追加できるか、または厳密な順序で保持する必要があるかを制御します。SourceBuffer
内に現在含まれているテキストトラックのリスト。SourceBuffer
に追加されるメディアセグメント内のタイムスタンプに適用されるオフセットを制御します。SourceBuffer
に追加されるメディアの初期化セグメント(initialization segment)で、種類、ラベル、言語情報が利用できない場合に使用するデフォルト値を指定します。SourceBuffer
が現在更新されているかどうか、つまり {{domxref("SourceBuffer.appendBuffer()")}}、{{domxref("SourceBuffer.appendStream()")}}、または {{domxref("SourceBuffer.remove()")}} の操作が現在進行中かどうかを示すブール値。SourceBuffer
内に現在含まれている動画トラックのリスト。true
から false
に変更されます。true
から false
に変更されます。true
から false
に変更されます。 このイベントは、onupdateend
の前に発生します。onupdate
の後に発生します。false
から true
に遷移するたびに発生します。親インターフェイスである {{domxref("EventTarget")}} からメソッドを継承します。
SourceBuffer
に追加します。SourceBuffer
に非同期的に追加するプロセスを開始します。 バッファが追加されると満たされる {{jsxref("Promise")}} を返します。ReadableStream
オブジェクトからのメディアセグメントデータを SourceBuffer
に追加します。SourceBuffer
から特定の時間範囲内のメディアセグメントを削除します。SourceBuffer
から非同期的に削除するプロセスを開始します。 一致するすべてのセグメントが削除されると満たされる {{jsxref("Promise")}} を返します。次の簡単な例では、動画をチャンクごとに可能な限り高速でロードし、できるだけ早く再生します。 この例は Nick Desaulniers によって作成され、ここでライブで見ることができます(さらに調査するためにソースをダウンロードすることもできます)。
var video = document.querySelector('video'); var assetURL = 'frag_bunny.mp4'; // Blink はコーデックに関して特定する必要がある // ./mp4info frag_bunny.mp4 | grep Codec var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'; if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) { var mediaSource = new MediaSource(); //console.log(mediaSource.readyState); // closed video.src = URL.createObjectURL(mediaSource); mediaSource.addEventListener('sourceopen', sourceOpen); } else { console.error('サポートされていない MIME タイプまたはコーデック: ', mimeCodec); } function sourceOpen (_) { //console.log(this.readyState); // open var mediaSource = this; var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec); fetchAB(assetURL, function (buf) { sourceBuffer.addEventListener('updateend', function (_) { mediaSource.endOfStream(); video.play(); //console.log(mediaSource.readyState); // ended }); sourceBuffer.appendBuffer(buf); }); } function fetchAB (url, cb) { console.log(url); var xhr = new XMLHttpRequest; xhr.open('get', url); xhr.responseType = 'arraybuffer'; xhr.onload = function () { cb(xhr.response); }; xhr.send(); }
仕様 | 状態 | コメント |
---|---|---|
{{SpecName('Media Source Extensions', '#sourcebuffer', 'SourceBuffer')}} | {{Spec2('Media Source Extensions')}} | 初期定義 |
{{Compat("api.SourceBuffer")}}