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 in ein HTMLMediaElement
über ein MediaSource
-Objekt eingefügt und abgespielt werden soll. Es kann aus einem oder mehreren Mediensegmenten bestehen.
Instanz-Eigenschaften
SourceBuffer.appendWindowEnd
-
Kontrolliert den Zeitstempel für das Ende des Append-Fensters.
SourceBuffer.appendWindowStart
-
Kontrolliert den Zeitstempel für den Beginn des Append-Fensters. Dies ist ein Zeitstempelbereich, der verwendet werden kann, um zu filtern, welche Mediendaten dem
SourceBuffer
hinzugefügt werden. Kodierte Medienframes mit Zeitstempeln innerhalb dieses Bereichs werden hinzugefügt, während solche außerhalb des Bereichs herausgefiltert werden. SourceBuffer.audioTracks
Schreibgeschützt-
Eine Liste der Audiospuren, die derzeit im
SourceBuffer
enthalten sind. SourceBuffer.buffered
Schreibgeschützt-
Gibt die Zeitbereiche zurück, die derzeit im
SourceBuffer
gepuffert sind. SourceBuffer.mode
-
Kontrolliert, wie die Reihenfolge der Mediensegmente im
SourceBuffer
gehandhabt wird, ob sie in beliebiger Reihenfolge hinzugefügt werden können oder in einer strikten Reihenfolge behalten werden müssen. SourceBuffer.textTracks
Schreibgeschützt Experimentell-
Eine Liste der Textspuren, die derzeit im
SourceBuffer
enthalten sind. SourceBuffer.timestampOffset
-
Kontrolliert den Versatz, der auf Zeitstempel innerhalb von Mediensegmenten angewendet wird, die anschließend dem
SourceBuffer
hinzugefügt werden. SourceBuffer.updating
Schreibgeschützt-
Ein Boolescher Wert, der anzeigt, ob der
SourceBuffer
derzeit aktualisiert wird, d.h. ob eineSourceBuffer.appendBuffer()
- oderSourceBuffer.remove()
-Operation derzeit im Gange ist. SourceBuffer.videoTracks
Schreibgeschützt-
Eine Liste der Videospuren, die derzeit im
SourceBuffer
enthalten sind.
Instanz-Methoden
ERBT Methoden von seinem Eltern-Interface, EventTarget
.
SourceBuffer.abort()
-
Bricht das aktuelle Segment ab und setzt den Segment-Parser zurück.
SourceBuffer.appendBuffer()
-
Fügt Mediendaten aus einem
ArrayBuffer
, einemTypedArray
oder einemDataView
-Objekt demSourceBuffer
hinzu. SourceBuffer.appendBufferAsync()
Nicht standardisiert Experimentell-
Startet den Prozess des asynchronen Hinzufügens des angegebenen Puffers zum
SourceBuffer
. Gibt einPromise
zurück, das erfüllt wird, sobald der Puffer hinzugefügt wurde. SourceBuffer.changeType()
-
Ändert den MIME-Typ, den zukünftige Aufrufe von
appendBuffer()
erwarten, in Übereinstimmung mit den neuen Daten. 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 einPromise
zurück, das erfüllt wird, sobald alle passenden Segmente entfernt wurden.
Ereignisse
abort
-
Wird ausgelöst, wann immer
SourceBuffer.appendBuffer()
durch einen Aufruf vonSourceBuffer.abort()
beendet wird.SourceBuffer.updating
ändert sich vontrue
zufalse
. error
-
Wird ausgelöst, wann immer ein Fehler während
SourceBuffer.appendBuffer()
auftritt.SourceBuffer.updating
ändert sich vontrue
zufalse
. update
-
Wird ausgelöst, wann immer
SourceBuffer.appendBuffer()
oderSourceBuffer.remove()
abgeschlossen ist.SourceBuffer.updating
ändert sich vontrue
zufalse
. Dieses Ereignis wird vorupdateend
ausgelöst. updateend
-
Wird nach dem Ende von
SourceBuffer.appendBuffer()
oderSourceBuffer.remove()
ausgelöst. Dieses Ereignis wird nachupdate
ausgelöst. updatestart
-
Wird ausgelöst, wann immer sich der Wert von
SourceBuffer.updating
vonfalse
zutrue
ändert.
Beispiele
Laden eines Videos Stück für Stück
Das folgende Beispiel lädt ein Video Stück für Stück so schnell wie möglich und spielt es ab, sobald es kann.
Den vollständigen Code finden Sie unter https://github.com/mdn/dom-examples/tree/main/sourcebuffer und das Live-Demo können Sie 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 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 |