MediaSource: handle-Eigenschaft

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Hinweis: Diese Funktion ist nur in Dedicated Web Workers verfügbar.

Die schreibgeschützte handle-Eigenschaft des MediaSource-Interfaces gibt ein MediaSourceHandle-Objekt zurück, einen Proxy für das MediaSource, das von einem Dedicated Worker zurück zum Haupt-Thread übertragen und über seine HTMLMediaElement.srcObject-Eigenschaft an ein Medien-Element angehängt werden kann.

Hinweis:>handle ist nur bei MediaSource-Instanzen innerhalb von Dedicated Workern sichtbar.

Jedes MediaSource-Objekt, das innerhalb eines Dedicated Workers erstellt wird, hat sein eigenes, eindeutiges MediaSourceHandle. Der handle-Getter gibt immer die MediaSourceHandle-Instanz zurück, die spezifisch für die zugehörige Dedicated Worker MediaSource-Instanz ist. Wenn das Handle bereits unter Verwendung von postMessage() an den Haupt-Thread übertragen wurde, ist die Handle-Instanz im Worker technisch abgetrennt und kann nicht erneut übertragen werden.

Wert

Eine MediaSourceHandle-Objektinstanz.

Beispiele

Die handle-Eigenschaft kann innerhalb eines Dedicated Workers abgerufen 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 das Handle über einen message-Ereignishandler, hängen es über seine HTMLMediaElement.srcObject-Eigenschaft an ein <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™
# dom-mediasource-handle

Browser-Kompatibilität

Siehe auch