Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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