RTCEncodedAudioFrame

基线 2023 *
新推出

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

* 此特性的某些部分可能存在不同级别的支持。

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

RTCEncodedAudioFrameWebRTC API 的一部分,代表 WebRTC 接收器或发送器管道中的一个已编码音频帧,可以使用 WebRTC Encoded Transform 进行修改。

该接口提供了方法和属性来获取帧的元数据,从而确定其格式和在帧序列中的顺序。data 属性提供对编码帧数据的缓冲区访问,这些数据可能已加密或被转换器修改。

实例属性

RTCEncodedAudioFrame.timestamp 只读 已弃用 非标准

返回帧开始采样的时间戳。

RTCEncodedAudioFrame.data

返回包含已编码帧数据的缓冲区。

实例方法

RTCEncodedAudioFrame.getMetadata()

返回与帧关联的元数据。

示例

此代码段展示了一个在 Worker 中处理 rtctransform 事件的处理器,该处理器实现了一个 TransformStream,并将已编码帧从 event.transformer.readable 通过它管道传输到 event.transformer.writableevent.transformerRTCRtpScriptTransform 的 worker 端对应项)。

如果将转换器插入音频流,则每当在 event.transformer.readable 上排队新帧时,都会调用 transform() 方法,并传入一个 RTCEncodedAudioFrametransform() 方法展示了如何读取它,使用虚构的加密函数进行修改,然后将其排队到控制器(这最终将其管道传输到 event.transformer.writable,然后再传回 WebRTC 管道)。

js
addEventListener("rtctransform", (event) => {
  const transform = new TransformStream({
    async transform(encodedFrame, controller) {
      // Reconstruct the original frame.
      const view = new DataView(encodedFrame.data);

      // Construct a new buffer
      const newData = new ArrayBuffer(encodedFrame.data.byteLength);
      const newView = new DataView(newData);

      // Encrypt frame bytes using the encryptFunction() method (not shown)
      for (let i = 0; i < encodedFrame.data.byteLength; ++i) {
        const encryptedByte = encryptFunction(~view.getInt8(i));
        newView.setInt8(i, encryptedByte);
      }

      encodedFrame.data = newData;
      controller.enqueue(encodedFrame);
    },
  });
  event.transformer.readable
    .pipeThrough(transform)
    .pipeTo(event.transformer.writable);
});

请注意,更完整的示例可在 使用 WebRTC Encoded Transforms 中找到。

规范

规范
WebRTC Encoded Transform
# rtcencodedaudioframe

浏览器兼容性

另见