ManagedMediaSource
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 ManagedMediaSource Interface der Media Source Extensions API ist ein MediaSource, das aktiv seinen Speicherinhalt verwaltet. Im Gegensatz zu einer regulären MediaSource kann der Benutzeragent Inhalte aus seinen ManagedSourceBuffer Objekten jederzeit entfernen, etwa aufgrund von Speicher- oder Hardwarebeschränkungen. Dies macht es geeignet für energieeffiziente Streaming-Szenarien, bei denen der Benutzeragent mehr Kontrolle über gepufferte Mediendaten benötigt.
Wenn addSourceBuffer() auf einer ManagedMediaSource aufgerufen wird, werden ManagedSourceBuffer Objekte (anstelle von SourceBuffer Objekten) erstellt, die bufferedchange Ereignisse auslösen, um die Anwendung zu benachrichtigen, wenn gepufferte Bereiche vom Benutzeragenten geändert werden.
Hinweis:
Unter Safari wird ManagedMediaSource nur aktiviert, wenn die Fernwiedergabe im Media-Element ausdrücklich deaktiviert wird (durch Setzen von HTMLMediaElement.disableRemotePlayback auf true) oder wenn eine AirPlay-Quellenalternative bereitgestellt wird (zum Beispiel ein HLS <source> Element). Ohne eines dieser beiden wird das sourceopen Ereignis nicht ausgelöst.
Konstruktor
ManagedMediaSource()-
Erstellt und gibt eine neue
ManagedMediaSourceObjektinstanz ohne zugehörige Quellenpuffer zurück.
Instanz-Eigenschaften
Erbt auch Eigenschaften von seiner übergeordneten Schnittstelle, MediaSource.
ManagedMediaSource.streamingSchreibgeschützt-
Ein Boolean, der anzeigt, ob das
ManagedMediaSourceObjekt derzeit streamt. Wenntrue, sollte die Anwendung aktiv Mediendaten abrufen und anhängen. Wennfalse, kann die Anwendung das Abrufen neuer Daten stoppen.
Instanz-Methoden
Erbt Methoden von seiner übergeordneten Schnittstelle, MediaSource.
Ereignisse
Erbt auch Ereignisse von seiner übergeordneten Schnittstelle, MediaSource.
startstreaming-
Wird ausgelöst, wenn sich die
streamingEigenschaft derManagedMediaSourcevonfalseauftrueändert, was bedeutet, dass die Mediaquelle das Streaming gestartet hat. endstreaming-
Wird ausgelöst, wenn sich die
streamingEigenschaft derManagedMediaSourcevontrueauffalseändert, was bedeutet, dass die Mediaquelle das Streaming gestoppt hat.
Beispiele
>Einrichten einer verwalteten Medienquelle
Das folgende Beispiel richtet eine ManagedMediaSource ein, verbindet sie mit einem <video> Element und lauscht auf die startstreaming und endstreaming Ereignisse, um zu steuern, wann Mediendaten abgerufen werden. bufferedchange Ereignisse werden unter dem Video protokolliert.
const videoUrl =
"https://mdn.github.io/shared-assets/videos/flower-fragmented.mp4";
const mediaType = 'video/mp4; codecs="avc1.64001F, mp4a.40.2"';
const video = document.querySelector("video");
if (!window.ManagedMediaSource?.isTypeSupported(mediaType)) {
console.log("ManagedMediaSource is not supported in this browser.");
} else {
const source = new ManagedMediaSource();
video.disableRemotePlayback = true;
video.src = URL.createObjectURL(source);
source.addEventListener("sourceopen", () => {
const sourceBuffer = source.addSourceBuffer(mediaType);
sourceBuffer.addEventListener("bufferedchange", (event) => {
for (let i = 0; i < event.addedRanges.length; i++) {
console.log(
`Buffered: ${event.addedRanges.start(i).toFixed(2)}s – ${event.addedRanges.end(i).toFixed(2)}s`,
);
}
});
source.addEventListener("startstreaming", async () => {
console.log("startstreaming — fetching media data…");
const response = await fetch(videoUrl);
const data = await response.arrayBuffer();
sourceBuffer.appendBuffer(data);
});
source.addEventListener("endstreaming", () => {
console.log("endstreaming — enough data buffered");
});
});
}
Spezifikationen
| Specification |
|---|
| Media Source Extensions™> # dom-managedmediasource> |