RTCEncodedAudioFrame

注意:此功能在 专用 Web 工作线程 中可用。

RTCEncodedAudioFrameWebRTC API 的一部分,它表示 WebRTC 接收器或发送器管道中的已编码音频帧,可以使用 WebRTC 已编码转换 对其进行修改。

该接口提供方法和属性以获取有关帧的元数据,从而可以确定其格式和在帧序列中的顺序。data 属性提供对已编码帧数据的访问权限,该数据可能是加密的或通过转换进行修改的。

注意:此功能在 专用 Web 工作线程 中可用。

实例属性

RTCEncodedAudioFrame.timestamp 只读 已弃用 非标准

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

RTCEncodedAudioFrame.data

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

实例方法

RTCEncodedAudioFrame.getMetadata()

返回与帧关联的元数据。

示例

此代码片段展示了 Workerrtctransform 事件的处理程序,该处理程序实现了一个 TransformStream,并将已编码帧从 event.transformer.readable 管道到 event.transformer.writableevent.transformer 是一个 RTCRtpScriptTransformer,是 RTCRtpScriptTransform 的工作线程端对应物)。

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

js
addEventListener("rtctransform", (event) => {
  const async 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 已编码转换 中提供了更完整的示例。

规范

规范
WebRTC 已编码转换
# rtcencodedaudioframe

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅