MediaSourceHandle
注意:此功能可在 Web Workers 中使用。
MediaSourceHandle
是 Media Source Extensions API 的一个接口,它是 MediaSource
的代理,可以从专用工作线程传输回主线程,并通过其 HTMLMediaElement.srcObject
属性附加到媒体元素。MediaSource
对象不可传输,因为它们是事件目标,因此需要 MediaSourceHandle
。
可以通过 MediaSource.handle
属性访问它。
在专用工作线程中创建的每个 MediaSource
对象都有其自己的独立 MediaSourceHandle
。MediaSource.handle
getter 将始终返回与关联的专用工作线程 MediaSource
实例相关的 MediaSourceHandle
实例。如果句柄已使用 postMessage()
传输到主线程,则工作线程中的句柄实例在技术上已分离,无法再次传输。
实例属性
无。
实例方法
无。
示例
可以在专用工作线程中访问 handle
属性,然后通过 postMessage()
调用将生成的 MediaSourceHandle
对象传输到创建工作线程的线程(在本例中为主线程)。
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"
});
在主线程中,我们通过 message
事件处理程序接收句柄,将其附加到 <video>
,通过其 HTMLMediaElement.srcObject
属性,并 play
视频。
js
worker.addEventListener("message", (msg) => {
let mediaSourceHandle = msg.data.arg;
video.srcObject = mediaSourceHandle;
video.play();
});
注意:MediaSourceHandle
无法成功传输到共享工作线程或服务工作线程中,或通过共享工作线程或服务工作线程传输。
规范
规范 |
---|
Media Source Extensions™ # mediasourcehandle |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。