DedicatedWorkerGlobalScope: rtctransform 事件

可用性有限

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

注意:此功能仅在 专用 Web Worker 中可用。

当一个编码的视频或音频帧已被排队,供 WebRTC Encoded Transform 处理时,会在 worker 的 DedicatedWorkerGlobalScope 对象上触发 rtctransform 事件。

该事件的 transformer 属性会返回一个 RTCRtpScriptTransformer 对象,该对象公开了帧被排队的 ReadableStream,以及一个可以写入帧以将其注入 WebRTC 管道的 WritableStream

此事件不可取消,也不会冒泡。

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

js
addEventListener("rtctransform", (event) => { })

onrtctransform = (event) => { }

事件类型

一个 RTCTransformEvent。继承自 Event

Event RTCTransformEvent

事件属性

此接口还继承了其父级 Event 的属性。

RTCTransformEvent.transformer 只读

返回与事件关联的 RTCRtpScriptTransformer

示例

以下代码片段展示了 worker 中 rtctransform 事件的处理程序,它使用 addEventListener() 添加到全局作用域。event.transformer 是一个 RTCRtpScriptTransformer 对象,它是 RTCRtpScriptTransform 在 worker 端的对应物。

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);
});

当编码帧被加入 RTCRtpScriptTransformer 时,会触发 rtctransform 事件,并且在 transformer 的相应 RTCRtpScriptTransformer 被构建时也会触发一次。代码首先使用选项中传递的 name 值来确定要应用的转换(这使得添加到传入和传出 WebRTC 管道的 RTCRtpScriptTransform 实例能够共享一个 worker)。然后,编码帧通过可读流,经过选定的转换 TransformStream,写入可写流。实际的转换代码未显示。

请注意,此代码是 使用 WebRTC 编码转换 中提供的更完整示例的一部分。

规范

规范
WebRTC Encoded Transform
# dom-dedicatedworkerglobalscope-onrtctransform

浏览器兼容性

另见