MediaStreamTrackProcessor

可用性有限

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

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

警告: 瀏覽器在將此介面暴露給全域性上下文方面存在差異(例如,有些瀏覽器僅在 window 中暴露,而另一些瀏覽器僅在專用 worker 中暴露),這導致它們不相容。在比較支援度時請牢記這一點。

MediaStreamTrackProcessor 介面(屬於 Insertable Streams for MediaStreamTrack API)會消耗 MediaStreamTrack 物件的影片源,並生成一個 VideoFrame 物件流。

建構函式

MediaStreamTrackProcessor()

建立一個新的 MediaStreamTrackProcessor 物件。

window.MediaStreamTrackProcessor() 實驗性的 非標準

主執行緒上建立一個新的 MediaStreamTrackProcessor 物件,它可以處理影片和音訊。

例項屬性

MediaStreamTrackProcessor.readable

返回一個 ReadableStream

示例

以下示例來自文章 Unbundling MediaStreamTrackProcessor and VideoTrackGenerator。它將一個攝像頭的 MediaStreamTrack 傳輸到一個 worker 中進行處理。該 worker 建立一個管道,對影片幀應用棕褐色濾鏡並映象它們。該管道最終導向一個 VideoTrackGenerator,其 MediaStreamTrack 被傳輸回並播放。媒體現在透過轉換器即時地從 主執行緒流出。

js
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = stream.getVideoTracks();
const worker = new Worker("worker.js");
worker.postMessage({ track }, [track]);
const { data } = await new Promise((r) => {
  worker.onmessage = r;
});
video.srcObject = new MediaStream([data.track]);

worker.js

js
onmessage = async ({ data: { track } }) => {
  const vtg = new VideoTrackGenerator();
  self.postMessage({ track: vtg.track }, [vtg.track]);
  const { readable } = new MediaStreamTrackProcessor({ track });
  await readable
    .pipeThrough(new TransformStream({ transform }))
    .pipeTo(vtg.writable);
};

規範

規範
使用流進行 MediaStreamTrack 可插入媒體處理
# mediastreamtrackprocessor

瀏覽器相容性

另見