MediaSource:handle 属性

注意:此功能在Web Workers中可用。

MediaSource 接口的handle 只读属性返回一个MediaSourceHandle 对象,它是 MediaSource 的代理,可以从专用工作线程传输回主线程,并通过其HTMLMediaElement.srcObject 属性附加到媒体元素。

注意:handle 仅在专用工作线程内的MediaSource 实例上可见。

在专用工作线程内部创建的每个 MediaSource 对象都有其自己的唯一 MediaSourceHandlehandle getter 将始终返回与关联的专用工作线程 MediaSource 实例相关的 MediaSourceHandle 实例。如果句柄已使用postMessage() 传输到主线程,则工作线程中的句柄实例在技术上已分离,无法再次传输。

MediaSourceHandle 对象实例。

示例

可以在专用工作线程内部访问 handle 属性,然后将生成的MediaSourceHandle 对象通过postMessage() 调用传输到创建工作线程的线程(在本例中为主线程)。

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 事件处理程序接收句柄,通过其HTMLMediaElement.srcObject 属性将其附加到<video>,并play 视频。

js
worker.addEventListener("message", (msg) => {
  let mediaSourceHandle = msg.data.arg;
  video.srcObject = mediaSourceHandle;
  video.play();
});

注意:MediaSourceHandle 无法成功传输到共享工作线程或服务工作线程中或通过它们传输。

规范

规范
媒体源扩展™
# dom-mediasource-handle

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅