MediaSourceHandle

可用性有限

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

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

MediaSourceHandle 介面是 Media Source Extensions API 的一部分,它是 MediaSource 的一個代理。它可以從專用工作執行緒(dedicated worker)傳輸回主執行緒,並透過 HTMLMediaElementsrcObject 屬性附加到媒體元素上。MediaSource 物件因為是事件目標(event targets),所以不可傳輸,因此需要 MediaSourceHandle

可以透過 MediaSource.handle 屬性訪問它。

在專用工作執行緒中建立的每個 MediaSource 物件都有其自己獨立的 MediaSourceHandleMediaSource.handle getter 始終返回與關聯的專用工作執行緒 MediaSource 例項特定的 MediaSourceHandle 例項。如果該控制代碼已透過 postMessage() 傳輸到主執行緒,則該控制代碼在工作執行緒中的例項在技術上已分離,無法再次傳輸。

MediaSourceHandle 是一個 可傳輸物件

例項屬性

無。

例項方法

無。

示例

可以在專用工作執行緒內部訪問 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 事件處理器接收控制代碼,透過其 HTMLMediaElement.srcObject 屬性將其附加到 <video> 元素,然後 play 影片。

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

注意: MediaSourceHandle 無法成功傳輸到共享工作執行緒(shared worker)或服務工作執行緒(service worker)中,或透過它們傳輸。

規範

規範
Media Source Extensions™
# mediasourcehandle

瀏覽器相容性

另見