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 MediaSourceHandle
s 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):
// 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:
worker.addEventListener("message", (msg) => {
let mediaSourceHandle = msg.data.arg;
video.srcObject = mediaSourceHandle;
video.play();
});
Hinweis:>MediaSourceHandle
s können nicht erfolgreich in oder über einen Shared Worker oder Service Worker übertragen werden.
Spezifikationen
Specification |
---|
Media Source Extensions™ # mediasourcehandle |