MediaSourceHandle

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 MediaSourceHandle-Interface der Media Source Extensions API dient als Proxy für ein MediaSource, das von einem dedizierten Worker zurück in den Haupt-Thread übertragen werden kann und über seine HTMLMediaElement.srcObject-Eigenschaft an ein Medien-Element angehängt wird. MediaSource-Objekte sind nicht übertragbar, da sie Ereignisziele sind, daher sind MediaSourceHandles erforderlich.

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

Jedes MediaSource-Objekt, das innerhalb eines dedizierten Workers erstellt wird, hat sein eigenes MediaSourceHandle. Der MediaSource.handle-Getter gibt immer die MediaSourceHandle-Instanz zurück, die speziell mit der zugehörigen dedizierten Worker-MediaSource-Instanz verbunden ist. Wenn der Handle bereits mit postMessage() an den Haupt-Thread übertragen wurde, ist die Handle-Instanz im Worker technisch abgetrennt 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, und das resultierende MediaSourceHandle-Objekt wird dann über einen postMessage()-Aufruf an den Thread übertragen, der den Worker erstellt hat (in diesem Fall der Haupt-Thread):

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, verknüpfen ihn über seine HTMLMediaElement.srcObject-Eigenschaft mit einem <video> und play das Video:

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

Hinweis:>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

Siehe auch