RTCRtpScriptTransformer: writable 属性

基准线 2025
新推出

自 2025 年 10 月起,此功能已在最新的设备和浏览器版本中可用。此功能可能不适用于较旧的设备或浏览器。

RTCRtpScriptTransformer 接口的只读属性 writable 返回一个 WritableStream 实例,该实例可用作对应 RTCRtpScriptTransformer.readable 上入队的已编码媒体帧的接收器。

当对应的 RTCRtpScriptTransform 被插入到 WebRTC 发送方和接收方管道时,已编码媒体帧(RTCEncodedVideoFrameRTCEncodedAudioFrame)可能会入队到 RTCRtpScriptTransformer.readable。WebRTC 已编码转换可以从 readable 读取帧,根据需要进行修改,然后通过将其发送到此 writable 来将其发送回 WebRTC 管道。执行此操作的常用方法是通过 TransformStream 管道传输帧。

一个 WritableStream

示例

以下示例显示了如何将 RTCRtpScriptTransformer.readable 通过 TransformStream 管道传输到 RTCRtpScriptTransformer.writable

js
addEventListener("rtctransform", (event) => {
  let transform;
  // Select a transform based on passed options
  if (event.transformer.options.name === "senderTransform")
    transform = createSenderTransform(); // A TransformStream
  else if (event.transformer.options.name === "receiverTransform")
    transform = createReceiverTransform(); // A TransformStream
  else return;

  // Pipe frames from the readable to writeable through TransformStream
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
});

该代码实现了 rtctransform 事件的处理程序,该事件在构造对应的 RTCRtpScriptTransform 时以及在入队新帧进行处理时,在全局 worker 对象上触发。event.transformer 是具有 writablereadable 属性的 RTCRtpScriptTransformer

使用 createSenderTransform()createReceiverTransform()(未显示实现)创建了一个不同的 TransformStream 来处理传出和传入的帧。事件处理程序根据从 RTCRtpScriptTransform 构造函数 传递的选项来选择要使用的正确转换流,并将其分配给 transform

该代码在 readable 上调用 ReadableStream.pipeThrough() 将已编码帧通过选定的 TransformStream 管道传输,然后调用 ReadableStream.pipeTo() 将其管道传输到 RTCRtpScriptTransformer.writable

规范

规范
WebRTC Encoded Transform
# dom-rtcrtpscripttransformer-writable

浏览器兼容性