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> |
Browser-Kompatibilität
Loading…