RTCRtpScriptTransform
RTCRtpScriptTransform
是 WebRTC API 的一个接口,用于将 WebRTC 编码转换(在工作线程中运行的 TransformStream
)插入 WebRTC 发送器和接收器管道中。
构造函数
RTCRtpScriptTransform()
-
创建一个新的
RTCRtpScriptTransform
对象实例。
实例属性
无。
实例方法
无。
描述
RTCRtpScriptTransform
实例使用 Worker
构造,转换流代码将在其中运行,以及(可选)的 options
对象和将传递给工作者的 可传输对象 数组。然后,它们通过将它们分别分配给 RTCRtpReceiver.transform
和 RTCRtpSender.transform
来添加到传入和传出的 RTC 管道中。
构造此对象时,以及每当收到编码帧时,rtctransform
事件将在工作者全局对象上触发。事件的 transformer
属性是一个 RTCRtpScriptTransformer
,是主线程 RTCRtpScriptTransform
的工作者端对应物。它具有 readable
(ReadableStream
) 和 writable
(WritableStream
) 属性,它们是从主线程 RTCRtpScriptTransform
共享的 - 在主线程中它们不是公开的。如果相应的 RTCRtpScriptTransform
与 RTCRtpReceiver
一起使用,则 readable
将对来自封包器的传入编码音频或视频帧进行排队。如果它与 RTCRtpSender
一起使用,则 readable
包含来自编解码器的帧。
工作者线程 rtctransform
事件处理程序定义了一个 管道链。它将来自 event.transformer.readable
的编码帧通过 TransformStream
(定义转换函数)传递到 event.transformer.writable
。event.transformer
还有从 RTCRtpScriptTransform
构造函数传递的 options
对象(如果定义),它可用于确定事件的来源,从而确定要添加到链中的特定 TransformStream
。
示例
请注意,这些示例展示了 RTCRtpScriptTransform
的定义和使用方法。工作者线程转换代码在 使用 WebRTC 编码转换 中更完整的示例中介绍。
为传出帧添加转换
此示例展示了如何通过 WebRTC 流式传输用户的网络摄像头视频,并添加 WebRTC 编码转换来修改传出流。代码假设有一个名为 peerConnection
的 RTCPeerConnection
已经连接到远程对等体。
首先,我们获取一个 MediaStreamTrack
,使用 getUserMedia()
从媒体设备获取视频 MediaStream
,然后使用 MediaStream.getTracks()
方法获取流中的第一个 MediaStreamTrack
。
使用 addTrack()
将轨道添加到对等连接并发送。addTrack()
方法返回用于发送轨道的 RTCRtpSender
。
// 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
属性,将转换添加到发送器中。
// Create a worker containing a TransformStream
const worker = new Worker("worker.js");
videoSender.transform = new RTCRtpScriptTransform(worker, {
name: "senderTransform",
});
请注意,您可以在任何时候添加转换。但是,通过在调用 addTrack()
后立即添加它,转换将获取发送的第一个编码帧。
为传入帧添加转换
此示例展示了如何添加 WebRTC 编码转换来修改传入流。代码假设有一个名为 peerConnection
的 RTCPeerConnection
已经连接到远程对等体。
首先,我们添加一个 RTCPeerConnection
track
事件 处理程序,以捕获流式传输新轨道时的事件。在处理程序中,我们构造一个 RTCRtpScriptTransform
并将其添加到 event.receiver.transform
(event.receiver
是 RTCRtpReceiver
)。与前面的示例一样,构造函数接受一个具有 name
属性的对象:但在这里,我们使用 receiverTransform
作为值来告诉工作者帧是从封包器传入的。
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 的浏览器中加载。