SourceBuffer

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Hinweis: Diese Funktion ist in Dedicated Web Workers verfügbar.

Die SourceBuffer-Schnittstelle repräsentiert ein Medienstück, das einem HTMLMediaElement über ein MediaSource-Objekt übergeben und abgespielt werden kann. Dieses kann aus einem oder mehreren Mediensegmenten bestehen.

EventTarget SourceBuffer

Instanz-Eigenschaften

SourceBuffer.appendWindowEnd

Steuert den Zeitstempel für das Ende des Anhängefensters.

SourceBuffer.appendWindowStart

Steuert den Zeitstempel für den Beginn des Anhängefensters. Dies ist ein Zeitstempelbereich, der verwendet werden kann, um zu filtern, welche Mediendaten an den SourceBuffer angehängt werden. Codierte Medienframes mit Zeitstempeln innerhalb dieses Bereichs werden angehängt, während diejenigen außerhalb des Bereichs herausgefiltert werden.

SourceBuffer.audioTracks Schreibgeschützt

Eine Liste der Audiotracks, die derzeit im SourceBuffer enthalten sind.

SourceBuffer.buffered Schreibgeschützt

Gibt die Zeitbereiche zurück, die derzeit im SourceBuffer gepuffert sind.

SourceBuffer.mode

Steuert, wie die Reihenfolge von Mediensegmenten im SourceBuffer gehandhabt wird, ob sie in beliebiger Reihenfolge angehängt werden können oder ob sie in einer strikten Reihenfolge gehalten werden müssen.

SourceBuffer.textTracks Schreibgeschützt Experimentell

Eine Liste der Textspuren, die derzeit im SourceBuffer enthalten sind.

SourceBuffer.timestampOffset

Steuert den Offset, der auf Zeitstempel innerhalb von Mediensegmenten angewendet wird, die anschließend dem SourceBuffer angehängt werden.

SourceBuffer.updating Schreibgeschützt

Ein Boolean, der angibt, ob der SourceBuffer derzeit aktualisiert wird, d.h. ob ein SourceBuffer.appendBuffer() oder SourceBuffer.remove()-Vorgang derzeit läuft.

SourceBuffer.videoTracks Schreibgeschützt

Eine Liste der Videospuren, die derzeit im SourceBuffer enthalten sind.

Instanz-Methoden

Erbt Methoden von seiner Elternschnittstelle, EventTarget.

SourceBuffer.abort()

Bricht das aktuelle Segment ab und setzt den Segmentparser zurück.

SourceBuffer.appendBuffer()

Fügt Mediensegmentdaten aus einem ArrayBuffer, einem TypedArray oder einem DataView-Objekt dem SourceBuffer hinzu.

SourceBuffer.appendBufferAsync() Nicht standardisiert Experimentell

Startet den Vorgang des asynchronen Anfügens des spezifizierten Puffers an den SourceBuffer. Gibt ein Promise zurück, das erfüllt wird, sobald der Puffer angehängt wurde.

SourceBuffer.changeType()

Ändert den MIME-Typ, den zukünftige Aufrufe von appendBuffer() erwarten werden, dass die neuen Daten diesem entsprechen.

SourceBuffer.remove()

Entfernt Mediensegmente innerhalb eines bestimmten Zeitbereichs aus dem SourceBuffer.

SourceBuffer.removeAsync() Nicht standardisiert Experimentell

Startet den Vorgang des asynchronen Entfernens von Mediensegmenten im angegebenen Bereich aus dem SourceBuffer. Gibt ein Promise zurück, das erfüllt wird, sobald alle passenden Segmente entfernt wurden.

Ereignisse

abort

Wird jedes Mal ausgelöst, wenn SourceBuffer.appendBuffer() durch einen Aufruf von SourceBuffer.abort() beendet wird. SourceBuffer.updating wechselt von true zu false.

error

Wird jedes Mal ausgelöst, wenn ein Fehler während SourceBuffer.appendBuffer() auftritt. SourceBuffer.updating wechselt von true zu false.

update

Wird jedes Mal ausgelöst, wenn SourceBuffer.appendBuffer() oder SourceBuffer.remove() abgeschlossen ist. SourceBuffer.updating wechselt von true zu false. Dieses Ereignis wird vor updateend ausgelöst.

updateend

Wird ausgelöst, nachdem SourceBuffer.appendBuffer() oder SourceBuffer.remove() endet. Dieses Ereignis wird nach update ausgelöst.

updatestart

Wird jedes Mal ausgelöst, wenn der Wert von SourceBuffer.updating von false zu true wechselt.

Beispiele

Laden eines Videos stückweise

Das folgenden Beispiel lädt ein Video so schnell wie möglich stückweise und spielt es ab, sobald es möglich ist.

Den vollständigen Code finden Sie unter https://github.com/mdn/dom-examples/tree/main/sourcebuffer und Sie können die Demo live unter https://mdn.github.io/dom-examples/sourcebuffer/ ausprobieren.

js
const video = document.querySelector("video");

const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';

function loadVideo() {
  if (MediaSource.isTypeSupported(mimeCodec)) {
    const mediaSource = new MediaSource();
    console.log(mediaSource.readyState); // closed
    video.src = URL.createObjectURL(mediaSource);
    mediaSource.addEventListener("sourceopen", sourceOpen);
  } else {
    console.error("Unsupported MIME type or codec: ", mimeCodec);
  }
}

async function sourceOpen() {
  console.log(this.readyState); // open
  const mediaSource = this;
  const sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);
  const response = await fetch(assetURL);
  const buffer = await response.arrayBuffer();
  sourceBuffer.addEventListener("updateend", () => {
    mediaSource.endOfStream();
    video.play();
    console.log(mediaSource.readyState); // ended
  });
  sourceBuffer.appendBuffer(buffer);
}

const load = document.querySelector("#load");
load.addEventListener("click", loadVideo);

Spezifikationen

Specification
Media Source Extensions™
# sourcebuffer

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
SourceBuffer
abort
Available in workers
Experimental
abort event
Available in workers
Experimental
appendBuffer
Available in workers
Experimental
appendBufferAsync
ExperimentalNon-standard
appendWindowEnd
Available in workers
Experimental
appendWindowStart
Available in workers
Experimental
audioTracks
Available in workers
Experimental
buffered
Available in workers
Experimental
changeType
Available in workers
Experimental
error event
Available in workers
Experimental
mode
Available in workers
Experimental
remove
Available in workers
Experimental
removeAsync
ExperimentalNon-standard
textTracks
Experimental
timestampOffset
Available in workers
Experimental
update event
Available in workers
Experimental
updateend event
Available in workers
Experimental
updatestart event
Available in workers
Experimental
updating
Available in workers
Experimental
videoTracks
Available in workers
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
Experimental. Expect behavior to change in the future.
Non-standard. Check cross-browser support before using.
See implementation notes.
User must explicitly enable this feature.
Requires a vendor prefix or different name for use.
Has more compatibility info.

Siehe auch