MediaSource: handle 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

注意:此功能僅在 專用 Web Worker 中可用。

MediaSource 介面的只讀屬性 handle 返回一個 MediaSourceHandle 物件。它是一個 MediaSource 的代理,可以從專用 worker 傳輸回主執行緒,並透過 HTMLMediaElement.srcObject 屬性附加到媒體元素上。

注意: handle 屬性僅在專用 worker 內部的 MediaSource 例項上可見。

在專用 worker 中建立的每個 MediaSource 物件都有自己獨立的 MediaSourceHandlehandle getter 始終返回與關聯的專用 worker MediaSource 例項特定的 MediaSourceHandle 例項。如果控制代碼已經使用 postMessage() 傳輸到主執行緒,那麼 worker 中的控制代碼例項實際上已分離,無法再次傳輸。

一個 MediaSourceHandle 物件例項。

示例

可以在專用 worker 內部訪問 handle 屬性,然後透過 postMessage() 呼叫將生成的 MediaSourceHandle 物件傳輸到建立 worker 的執行緒(在本例中為主執行緒)。

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 無法成功傳輸到共享工作執行緒或服務工作執行緒中,或透過它們進行傳輸。

規範

規範
Media Source Extensions™
# dom-mediasource-handle

瀏覽器相容性

另見