RTCRtpScriptTransformer: writable 屬性

基準線 2025
新推出

自 2025 年 10 月起,此功能已在最新的裝置和瀏覽器版本中可用。此功能可能不適用於較舊的裝置或瀏覽器。

RTCRtpScriptTransformer 介面的只讀屬性 writable 返回一個 WritableStream 例項,該例項可用作對應 RTCRtpScriptTransformer.readable 上入隊的已編碼媒體幀的接收器。

當對應的 RTCRtpScriptTransform 被插入到 WebRTC 傳送方和接收方管道時,已編碼媒體幀(RTCEncodedVideoFrameRTCEncodedAudioFrame)可能會入隊到 RTCRtpScriptTransformer.readable。WebRTC 已編碼轉換可以從 readable 讀取幀,根據需要進行修改,然後透過將其傳送到此 writable 來將其傳送回 WebRTC 管道。執行此操作的常用方法是透過 TransformStream 管道傳輸幀。

一個 WritableStream

示例

以下示例顯示瞭如何將 RTCRtpScriptTransformer.readable 透過 TransformStream 管道傳輸到 RTCRtpScriptTransformer.writable

js
addEventListener("rtctransform", (event) => {
  let transform;
  // Select a transform based on passed options
  if (event.transformer.options.name === "senderTransform")
    transform = createSenderTransform(); // A TransformStream
  else if (event.transformer.options.name === "receiverTransform")
    transform = createReceiverTransform(); // A TransformStream
  else return;

  // Pipe frames from the readable to writeable through TransformStream
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
});

該程式碼實現了 rtctransform 事件的處理程式,該事件在構造對應的 RTCRtpScriptTransform 時以及在入隊新幀進行處理時,在全域性 worker 物件上觸發。event.transformer 是具有 writablereadable 屬性的 RTCRtpScriptTransformer

使用 createSenderTransform()createReceiverTransform()(未顯示實現)建立了一個不同的 TransformStream 來處理傳出和傳入的幀。事件處理程式根據從 RTCRtpScriptTransform 建構函式 傳遞的選項來選擇要使用的正確轉換流,並將其分配給 transform

該程式碼在 readable 上呼叫 ReadableStream.pipeThrough() 將已編碼幀透過選定的 TransformStream 管道傳輸,然後呼叫 ReadableStream.pipeTo() 將其管道傳輸到 RTCRtpScriptTransformer.writable

規範

規範
WebRTC Encoded Transform
# dom-rtcrtpscripttransformer-writable

瀏覽器相容性