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.
Das SourceBuffer-Interface repräsentiert ein Medienstück, das über ein HTMLMediaElement und ein MediaSource-Objekt weitergegeben und abgespielt werden soll. Dieses kann aus einem oder mehreren Mediensegmenten bestehen.
Instanzeigenschaften
SourceBuffer.appendWindowEnd-
Steuert den Zeitstempel für das Ende des Append-Fensters.
SourceBuffer.appendWindowStart-
Steuert den Zeitstempel für den Beginn des Append-Fensters. Dies ist ein Zeitstempelbereich, der verwendet werden kann, um zu filtern, welche Mediendaten in den
SourceBuffereingefügt werden. Codierte Medienframes mit Zeitstempeln innerhalb dieses Bereichs werden hinzugefügt, während diejenigen außerhalb des Bereichs herausgefiltert werden. SourceBuffer.audioTracksSchreibgeschützt-
Eine Liste der aktuell im
SourceBufferenthaltenen Audiotracks. SourceBuffer.bufferedSchreibgeschützt-
Gibt die aktuell im
SourceBuffergepufferten Zeitbereiche zurück. SourceBuffer.mode-
Steuert, wie die Reihenfolge der Mediensegmente im
SourceBuffergehandhabt wird, in Bezug darauf, ob sie in beliebiger Reihenfolge hinzugefügt werden können oder in strikter Abfolge bleiben müssen. SourceBuffer.textTracksSchreibgeschützt Experimentell-
Eine Liste der aktuell im
SourceBufferenthaltenen Texttracks. SourceBuffer.timestampOffset-
Steuert die Verschiebung, die auf Zeitstempel innerhalb von Mediensegmenten angewendet wird, die anschließend dem
SourceBufferhinzugefügt werden. SourceBuffer.updatingSchreibgeschützt-
Ein boolescher Wert, der angibt, ob der
SourceBufferderzeit aktualisiert wird — d.h. ob eineappendBuffer()- oderremove()-Operation derzeit im Gange ist. SourceBuffer.videoTracksSchreibgeschützt-
Eine Liste der aktuell im
SourceBufferenthaltenen Videotracks.
Instanzmethoden
Erbt Methoden von seiner Elternschnittstelle, EventTarget.
SourceBuffer.abort()-
Bricht das aktuelle Segment ab und setzt den Segment-Parser zurück.
SourceBuffer.appendBuffer()-
Fügt Media-Segmentdaten von einem
ArrayBuffer, einemTypedArrayoder einemDataView-Objekt in denSourceBufferein. SourceBuffer.appendBufferAsync()Nicht standardisiert Experimentell-
Startet den Prozess des asynchronen Hinzufügens des angegebenen Buffers zum
SourceBuffer. Gibt einPromisezurück, das erfüllt wird, sobald der Buffer hinzugefügt wurde. SourceBuffer.changeType()-
Ändert den MIME-Typ, den zukünftige Aufrufe von
appendBuffer()erwarten, dass die neuen Daten entsprechen. SourceBuffer.remove()-
Entfernt Mediensegmente innerhalb eines bestimmten Zeitbereichs aus dem
SourceBuffer. SourceBuffer.removeAsync()Nicht standardisiert Experimentell-
Startet den Prozess des asynchronen Entfernens von Mediensegmenten im angegebenen Bereich aus dem
SourceBuffer. Gibt einPromisezurück, das erfüllt wird, sobald alle passenden Segmente entfernt wurden.
Ereignisse
abort-
Wird ausgelöst, wenn das Buffer-Hinzufügen abgebrochen wird, weil die
SourceBuffer.abort()- oderMediaSource.removeSourceBuffer()-Methode aufgerufen wird, während derSourceBuffer.appendBuffer()-Algorithmus noch läuft.SourceBuffer.updatingwechselt vontruezufalse. error-
Wird ausgelöst, wenn ein Fehler während der Verarbeitung einer
appendBuffer()-Operation auftritt.SourceBuffer.updatingwechselt vontruezufalse. update-
Wird immer dann ausgelöst, wenn
SourceBuffer.appendBuffer()oderSourceBuffer.remove()abgeschlossen ist.SourceBuffer.updatingwechselt vontruezufalse. updateend-
Wird nach dem (nicht unbedingt erfolgreichen) Abschluss einer
appendBuffer()oderremove()-Operation ausgelöst. Dieses Ereignis wird nach den Ereignissenupdate,erroroderabortausgelöst. updatestart-
Wird ausgelöst, wenn eine
appendBuffer()oderremove()-Operation beginnt.updatingwechselt vonfalsezutrue.
Beispiele
>Laden eines Videos in Teilen
Das folgende Beispiel lädt ein Video so schnell wie möglich in Teilen und spielt es ab, sobald es möglich ist.
Sie können den vollständigen Code unter https://github.com/mdn/dom-examples/tree/main/sourcebuffer sehen und die Demo live unter https://mdn.github.io/dom-examples/sourcebuffer/ ausprobieren.
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 sourceBuffer = this.addSourceBuffer(mimeCodec);
const response = await fetch(assetURL);
const buffer = await response.arrayBuffer();
sourceBuffer.addEventListener("updateend", () => {
this.endOfStream();
video.play();
console.log(this.readyState); // ended
});
sourceBuffer.appendBuffer(buffer);
}
const load = document.querySelector("#load");
load.addEventListener("click", loadVideo);
Spezifikationen
| Specification |
|---|
| Media Source Extensions™> # sourcebuffer> |
Browser-Kompatibilität
Loading…