--- 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")}}