MediaSourceHandle
Hinweis: Diese Funktion ist in Dedicated Web Workers verfügbar.
Das MediaSourceHandle
Interface der Media Source Extensions API ist ein Proxy für eine MediaSource
, die von einem dedizierten Worker zurück in den Haupt-Thread übertragen und über die Eigenschaft HTMLMediaElement.srcObject
an ein Medien-Element angehängt werden kann. MediaSource
-Objekte sind nicht übertragbar, da sie Ereignisziele sind, daher die Notwendigkeit für MediaSourceHandle
s.
Es kann über die MediaSource.handle
Eigenschaft aufgerufen werden.
Jedes MediaSource
-Objekt, das innerhalb eines dedizierten Workers erstellt wird, hat seine eigene eindeutige MediaSourceHandle
. Der MediaSource.handle
Getter wird immer die MediaSourceHandle
Instanz zurückgeben, die spezifisch für die zugehörige dedizierte Worker MediaSource
Instanz ist. Wenn der Handle bereits mit postMessage()
an den Haupt-Thread übertragen wurde, ist die Handle-Instanz im Worker technisch getrennt 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. Das resultierende MediaSourceHandle
-Objekt wird dann über einen postMessage()
Aufruf an den Thread, der den Worker erstellt hat (in diesem Fall der Haupt-Thread), übertragen:
// 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, hängen ihn mittels seiner HTMLMediaElement.srcObject
Eigenschaft an ein <video>
an und play
das Video:
worker.addEventListener("message", (msg) => {
let mediaSourceHandle = msg.data.arg;
video.srcObject = mediaSourceHandle;
video.play();
});
Note:
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
BCD tables only load in the browser