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 Stück Medien, das an ein HTMLMediaElement übergeben und über ein MediaSource-Objekt abgespielt werden soll. Dies kann aus einem oder mehreren Mediensegmenten bestehen.
Instanzeigenschaften
SourceBuffer.appendWindowEnd-
Steuert den Zeitstempel für das Ende des Anhängefensters.
SourceBuffer.appendWindowStart-
Steuert den Zeitstempel für den Anfang des Anhängefensters. Dies ist ein Zeitstempelbereich, der verwendet werden kann, um zu filtern, welche Mediendaten dem
SourceBufferhinzugefügt werden. Codierte Medienframes mit Zeitstempeln innerhalb dieses Bereichs werden hinzugefügt, während solche außerhalb des Bereichs ausgefiltert werden. SourceBuffer.audioTracksSchreibgeschützt-
Eine Liste der aktuell im
SourceBufferenthaltenen Audiospuren. SourceBuffer.bufferedSchreibgeschützt-
Gibt die Zeitbereiche zurück, die derzeit im
SourceBuffergespeichert sind. SourceBuffer.mode-
Steuert, wie die Reihenfolge der Mediensegmente im
SourceBuffergehandhabt wird, ob sie in beliebiger Reihenfolge hinzugefügt werden können oder in einer strikten Reihenfolge gehalten werden müssen. SourceBuffer.textTracksSchreibgeschützt Experimentell-
Eine Liste der aktuell im
SourceBufferenthaltenen Textspuren. SourceBuffer.timestampOffset-
Steuert den Offset, der 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 eineSourceBuffer.appendBuffer()- oderSourceBuffer.remove()-Operation derzeit im Gange ist. SourceBuffer.videoTracksSchreibgeschützt-
Eine Liste der aktuell im
SourceBufferenthaltenen Videospuren.
Instanzmethoden
Erbt Methoden von seiner Elternschnittstelle, EventTarget.
SourceBuffer.abort()-
Bricht das aktuelle Segment ab und setzt den Segmentparser zurück.
SourceBuffer.appendBuffer()-
Hängt Mediendatensegmente von einem
ArrayBuffer, einemTypedArrayoder einemDataView-Objekt an denSourceBufferan. SourceBuffer.appendBufferAsync()Nicht standardisiert Experimentell-
Startet den Prozess des asynchronen Anhängens des angegebenen Puffers an den
SourceBuffer. Gibt einPromisezurück, das erfüllt wird, sobald der Puffer angehängt 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
SourceBuffer.appendBuffer()durch einen Aufruf vonSourceBuffer.abort()beendet wird.SourceBuffer.updatingändert sich vontrueauffalse. error-
Wird ausgelöst, wenn ein Fehler während
SourceBuffer.appendBuffer()auftritt.SourceBuffer.updatingändert sich vontrueauffalse. update-
Wird ausgelöst, wenn
SourceBuffer.appendBuffer()oderSourceBuffer.remove()abgeschlossen ist.SourceBuffer.updatingändert sich vontrueauffalse. Dieses Ereignis wird vorupdateendausgelöst. updateend-
Wird nach dem Ende von
SourceBuffer.appendBuffer()oderSourceBuffer.remove()ausgelöst. Dieses Ereignis wird nachupdateausgelöst. updatestart-
Wird ausgelöst, wenn sich der Wert von
SourceBuffer.updatingvonfalseauftrueändert.
Beispiele
>Ein Video stückweise laden
Das folgende Beispiel lädt ein Video stückweise so schnell wie möglich 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 einsehen 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…