RTCEncodedAudioFrame
注意:此功能在 专用 Web 工作线程 中可用。
RTCEncodedAudioFrame
是 WebRTC API 的一部分,它表示 WebRTC 接收器或发送器管道中的已编码音频帧,可以使用 WebRTC 已编码转换 对其进行修改。
该接口提供方法和属性以获取有关帧的元数据,从而可以确定其格式和在帧序列中的顺序。data
属性提供对已编码帧数据的访问权限,该数据可能是加密的或通过转换进行修改的。
注意:此功能在 专用 Web 工作线程 中可用。
实例属性
RTCEncodedAudioFrame.timestamp
只读 已弃用 非标准-
返回帧采样的开始时间戳。
RTCEncodedAudioFrame.data
-
返回包含已编码帧数据的缓冲区。
实例方法
RTCEncodedAudioFrame.getMetadata()
-
返回与帧关联的元数据。
示例
此代码片段展示了 Worker
中 rtctransform
事件的处理程序,该处理程序实现了一个 TransformStream
,并将已编码帧从 event.transformer.readable
管道到 event.transformer.writable
(event.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 表仅在浏览器中加载