MediaSource: handle-Eigenschaft

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

Die read-only Eigenschaft handle des MediaSource-Interfaces gibt ein MediaSourceHandle-Objekt zurück, einen Proxy für die MediaSource, der von einem dedizierten Worker an den Hauptthread übertragen und über die HTMLMediaElement.srcObject-Eigenschaft an ein Medien-Element angehängt werden kann.

Note: handle ist nur bei MediaSource-Instanzen innerhalb von dedizierten Workern sichtbar.

Jedes MediaSource-Objekt, das innerhalb eines dedizierten Workers erstellt wird, hat sein eigenes, einzigartiges MediaSourceHandle. Der handle-Getter gibt immer die MediaSourceHandle-Instanz zurück, die spezifisch für die zugehörige MediaSource-Instanz im dedizierten Worker ist. Wenn das Handle bereits mit postMessage() an den Hauptthread übertragen wurde, ist die Handle-Instanz im Worker technisch entkoppelt und kann nicht erneut übertragen werden.

Wert

Eine MediaSourceHandle-Objektinstanz.

Beispiele

Die handle-Eigenschaft kann innerhalb eines dedizierten Workers zugegriffen werden, und das resultierende MediaSourceHandle-Objekt wird dann über einen postMessage()-Aufruf an den Thread, der den Worker erstellt hat (in diesem Fall der Hauptthread), ü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 Hauptthread empfangen wir das Handle über einen message-Event-Handler, hängen es an ein <video> über dessen HTMLMediaElement.srcObject-Eigenschaft und play das Video:

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

Note: MediaSourceHandle 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

BCD tables only load in the browser

Siehe auch