MediaSourceHandle

Hinweis: Dieses Feature ist verfügbar in Dedicated Web Workers.

Das MediaSourceHandle Interface der Media Source Extensions API ist ein Proxy für eine MediaSource, die von einem dedizierten Worker zurück in den Haupt-Thread übertragen und über die Eigenschaft HTMLMediaElement.srcObject an ein Medien-Element angehängt werden kann. MediaSource-Objekte sind nicht übertragbar, da sie Ereignisziele sind, daher die Notwendigkeit für MediaSourceHandles.

Es kann über die MediaSource.handle Eigenschaft aufgerufen werden.

Jedes MediaSource-Objekt, das innerhalb eines dedizierten Workers erstellt wird, hat seine eigene eindeutige MediaSourceHandle. Der MediaSource.handle Getter wird immer die MediaSourceHandle Instanz zurückgeben, die spezifisch für die zugehörige dedizierte Worker MediaSource Instanz ist. Wenn der Handle bereits mit postMessage() an den Haupt-Thread übertragen wurde, ist die Handle-Instanz im Worker technisch getrennt und kann nicht erneut übertragen werden.

MediaSourceHandle ist ein übertragbares Objekt.

Instanz-Eigenschaften

Keine.

Instanz-Methoden

Keine.

Beispiele

Die handle Eigenschaft kann innerhalb eines dedizierten Workers aufgerufen werden. Das resultierende MediaSourceHandle-Objekt wird dann über einen postMessage() Aufruf an den Thread, der den Worker erstellt hat (in diesem Fall der Haupt-Thread), übertragen:

js
// Inside dedicated worker
let mediaSource = new MediaSource();
let handle = mediaSource.handle;
// Transfer the handle to the context that created the worker
postMessage({ arg: handle }, [handle]);

mediaSource.addEventListener("sourceopen", () => {
  // Await sourceopen on MediaSource before creating SourceBuffers
  // and populating them with fetched media — MediaSource won't
  // accept creation of SourceBuffers until it is attached to the
  // HTMLMediaElement and its readyState is "open"
});

Im Haupt-Thread empfangen wir den Handle über einen message Ereignishandler, hängen ihn mittels seiner HTMLMediaElement.srcObject Eigenschaft an ein <video> an und play das Video:

js
worker.addEventListener("message", (msg) => {
  let mediaSourceHandle = msg.data.arg;
  video.srcObject = mediaSourceHandle;
  video.play();
});

Note: MediaSourceHandles können nicht erfolgreich in oder über einen Shared Worker oder Service Worker übertragen werden.

Spezifikationen

Specification
Media Source Extensions™
# mediasourcehandle

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch