RTCRtpScriptTransformer:writable 属性

有限可用性

此功能不是基线功能,因为它在某些最广泛使用的浏览器中不起作用。

writableRTCRtpScriptTransformer 接口的只读属性,它返回一个 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 时以及在为处理而入队新帧时在全局工作线程对象上触发。event.transformer 是具有 writablereadable 属性的 RTCRtpScriptTransformer

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

代码在 readable 上调用 ReadableStream.pipeThrough() 以将编码帧通过选定的 TransformStream 传输,然后调用 ReadableStream.pipeTo() 将它们传输到 RTCRtpScriptTransformer.writable

规范

规范
WebRTC 编码转换
# dom-rtcrtpscripttransformer-writable

浏览器兼容性

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