RTCRtpSender: transform 屬性

基準線 2025
新推出

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

RTCRtpSender 物件的 transform 屬性用於將一個執行在 worker 執行緒中的 transform stream ( TransformStream ) 插入到傳送管道中。這允許在編碼器輸出編碼後的影片和音訊幀之後、傳送之前,對它們應用流轉換。

要新增的轉換使用 RTCRtpScriptTransform 及其關聯的 Worker 來定義。如果 transform 是在建立 RTCRtpSender 後立即同步設定的,它將接收到傳送者編碼器生成的第一個完整幀。

一個 RTCRtpScriptTransform,或者在傳送者沒有關聯的轉換流時為 null

示例

此示例展示瞭如何透過 WebRTC 將使用者攝像頭的影片流傳輸出去,並新增一個 WebRTC 編碼轉換來修改出站流。請注意,這是 guides 主題 使用 WebRTC 編碼轉換 中更大型示例的一部分。

程式碼假定存在一個名為 peerConnectionRTCPeerConnection 物件,並且該物件已連線到遠端對等端。它首先使用 getUserMedia() 從媒體裝置獲取影片 MediaStream,然後使用 MediaStream.getTracks() 方法獲取流中的第一個 MediaStreamTrack

使用 addTrack() 將該軌道新增到對等連線。這將返回一個新的 RTCRtpSender 物件,用於傳送該軌道。

js
const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = mediaStream.getTracks();
const videoSender = peerConnection.addTrack(track, mediaStream);

上面的程式碼設定了連線並開始傳送軌道。為了將轉換流新增到管道中,我們需要構建一個 RTCRtpScriptTransform 並將其分配給傳送者的 transform 屬性。由於轉換是在建立 RTCRtpSender 後立即構造的,因此它將在傳送者編碼器生成的第一個幀被髮送之前接收到該幀。

js
const worker = new Worker("worker.js");
videoSender.transform = new RTCRtpScriptTransform(worker, {
  name: "senderTransform",
});

請注意,您可以隨時新增轉換。但是,在呼叫 addTrack() 後立即新增轉換,轉換將獲得傳送的第一個編碼幀。

規範

規範
WebRTC Encoded Transform
# dom-rtcrtpsender-transform

瀏覽器相容性

另見