RTCRtpScriptTransform
RTCRtpScriptTransform 接口是 WebRTC API 的一部分,用于将 WebRTC 编码转换(在 worker 线程中运行的 TransformStream)插入到 WebRTC 发送器和接收器管道中。
构造函数
RTCRtpScriptTransform()-
创建一个新的
RTCRtpScriptTransform对象实例。
实例属性
无。
实例方法
无。
描述
RTCRtpScriptTransform 实例是通过一个 Worker 来构造的,转换流代码将在该 Worker 中运行,同时还会提供一个(可选的)options 对象和要传递给 Worker 的 可转移对象 数组。然后,通过分别将它们分配给 RTCRtpReceiver.transform 和 RTCRtpSender.transform,将它们添加到传入和传出的 RTC 管道中。
在创建此对象时,以及每当到达一个编码帧时,都会在 worker 的全局对象上触发 rtctransform 事件。该事件的 transformer 属性是一个 RTCRtpScriptTransformer,它是主线程 RTCRtpScriptTransform 的 worker 端对应物。它具有从主线程 RTCRtpScriptTransform 共享的 readable(ReadableStream)和 writable(WritableStream)属性——这些属性在主线程中不是公开的。如果相应的 RTCRtpScriptTransform 与 RTCRtpReceiver 一起使用,则 readable 会从打包器中对传入的编码音频或视频帧进行排队。如果与 RTCRtpSender 一起使用,则 readable 包含来自编解码器的帧。
Worker 线程的 rtctransform 事件处理程序定义了一个 管道链。这会将编码帧从 event.transformer.readable 通过定义转换函数的 TransformStream 管道传输到 event.transformer.writable。event.transformer 还具有从 RTCRtpScriptTransform 构造函数(如果已定义)传递的 options 对象,可用于确定事件的来源,从而确定要添加到管道的特定 TransformStream。
示例
请注意,这些示例展示了 RTCRtpScriptTransform 的定义和用法。Worker 线程的转换代码包含在 使用 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,它接受一个定义了转换的 worker 脚本,以及一个可选对象,可用于将任意消息传递给 worker(在本例中,我们使用了一个值为 "senderTransform" 的 name 属性,以告知 worker 该转换将添加到出站流)。然后,通过将转换分配给 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 作为值,以告知 worker 帧是从打包器传入的。
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 Encoded Transform # rtcrtpscripttransform |
浏览器兼容性
加载中…