RTCRtpScriptTransform

有限可用性

此功能不是基线,因为它在一些最常用的浏览器中无法正常工作。

RTCRtpScriptTransformWebRTC API 的一个接口,用于将 WebRTC 编码转换(在工作线程中运行的 TransformStream)插入 WebRTC 发送器和接收器管道中。

构造函数

RTCRtpScriptTransform()

创建一个新的 RTCRtpScriptTransform 对象实例。

实例属性

无。

实例方法

无。

描述

RTCRtpScriptTransform 实例使用 Worker 构造,转换流代码将在其中运行,以及(可选)的 options 对象和将传递给工作者的 可传输对象 数组。然后,它们通过将它们分别分配给 RTCRtpReceiver.transformRTCRtpSender.transform 来添加到传入和传出的 RTC 管道中。

构造此对象时,以及每当收到编码帧时,rtctransform 事件将在工作者全局对象上触发。事件的 transformer 属性是一个 RTCRtpScriptTransformer,是主线程 RTCRtpScriptTransform 的工作者端对应物。它具有 readable (ReadableStream) 和 writable (WritableStream) 属性,它们是从主线程 RTCRtpScriptTransform 共享的 - 在主线程中它们不是公开的。如果相应的 RTCRtpScriptTransformRTCRtpReceiver 一起使用,则 readable 将对来自封包器的传入编码音频或视频帧进行排队。如果它与 RTCRtpSender 一起使用,则 readable 包含来自编解码器的帧。

工作者线程 rtctransform 事件处理程序定义了一个 管道链。它将来自 event.transformer.readable 的编码帧通过 TransformStream(定义转换函数)传递到 event.transformer.writableevent.transformer 还有从 RTCRtpScriptTransform 构造函数传递的 options 对象(如果定义),它可用于确定事件的来源,从而确定要添加到链中的特定 TransformStream

示例

请注意,这些示例展示了 RTCRtpScriptTransform 的定义和使用方法。工作者线程转换代码在 使用 WebRTC 编码转换 中更完整的示例中介绍。

为传出帧添加转换

此示例展示了如何通过 WebRTC 流式传输用户的网络摄像头视频,并添加 WebRTC 编码转换来修改传出流。代码假设有一个名为 peerConnectionRTCPeerConnection 已经连接到远程对等体。

首先,我们获取一个 MediaStreamTrack,使用 getUserMedia() 从媒体设备获取视频 MediaStream,然后使用 MediaStream.getTracks() 方法获取流中的第一个 MediaStreamTrack

使用 addTrack() 将轨道添加到对等连接并发送。addTrack() 方法返回用于发送轨道的 RTCRtpSender

js
// Get Video stream and MediaTrack
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const [track] = stream.getTracks();
const videoSender = peerConnection.addTrack(track, stream);

然后,RTCRtpScriptTransform 被构造,它接受一个工作者脚本(定义转换)和一个可选对象(可用于向工作者传递任意消息 - 在这种情况下,我们使用了一个值为 “senderTransform” 的 name 属性来告诉工作者此转换将被添加到出站流中)。然后,我们通过将它分配给 RTCRtpSender.transform 属性,将转换添加到发送器中。

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

请注意,您可以在任何时候添加转换。但是,通过在调用 addTrack() 后立即添加它,转换将获取发送的第一个编码帧。

为传入帧添加转换

此示例展示了如何添加 WebRTC 编码转换来修改传入流。代码假设有一个名为 peerConnectionRTCPeerConnection 已经连接到远程对等体。

首先,我们添加一个 RTCPeerConnection track 事件 处理程序,以捕获流式传输新轨道时的事件。在处理程序中,我们构造一个 RTCRtpScriptTransform 并将其添加到 event.receiver.transformevent.receiverRTCRtpReceiver)。与前面的示例一样,构造函数接受一个具有 name 属性的对象:但在这里,我们使用 receiverTransform 作为值来告诉工作者帧是从封包器传入的。

js
peerConnection.ontrack = (event) => {
  const worker = new Worker("worker.js");
  event.receiver.transform = new RTCRtpScriptTransform(worker, {
    name: "receiverTransform",
  });
  received_video.srcObject = event.streams[0];
};

再次请注意,您可以在任何时候添加转换流。但是,通过在 track 事件处理程序中添加它,可以确保转换流将获取轨道第一个编码帧。

规范

规范
WebRTC 编码转换
# rtcrtpscripttransform

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅