MediaSource: handle 屬性
注意:此功能僅在 專用 Web Worker 中可用。
MediaSource 介面的只讀屬性 handle 返回一個 MediaSourceHandle 物件。它是一個 MediaSource 的代理,可以從專用 worker 傳輸回主執行緒,並透過 HTMLMediaElement.srcObject 屬性附加到媒體元素上。
注意: handle 屬性僅在專用 worker 內部的 MediaSource 例項上可見。
在專用 worker 中建立的每個 MediaSource 物件都有自己獨立的 MediaSourceHandle。handle 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 |
瀏覽器相容性
載入中…