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

浏览器兼容性

另见