RTCEncodedAudioFrame
基线 2023 *
新推出
注意:此功能在 专用 Web Workers 中可用。
RTCEncodedAudioFrame 是 WebRTC API 的一部分,代表 WebRTC 接收器或发送器管道中的一个已编码音频帧,可以使用 WebRTC Encoded Transform 进行修改。
该接口提供了方法和属性来获取帧的元数据,从而确定其格式和在帧序列中的顺序。data 属性提供对编码帧数据的缓冲区访问,这些数据可能已加密或被转换器修改。
实例属性
RTCEncodedAudioFrame.timestamp只读 已弃用 非标准-
返回帧开始采样的时间戳。
RTCEncodedAudioFrame.data-
返回包含已编码帧数据的缓冲区。
实例方法
RTCEncodedAudioFrame.getMetadata()-
返回与帧关联的元数据。
示例
此代码段展示了一个在 Worker 中处理 rtctransform 事件的处理器,该处理器实现了一个 TransformStream,并将已编码帧从 event.transformer.readable 通过它管道传输到 event.transformer.writable(event.transformer 是 RTCRtpScriptTransform 的 worker 端对应项)。
如果将转换器插入音频流,则每当在 event.transformer.readable 上排队新帧时,都会调用 transform() 方法,并传入一个 RTCEncodedAudioFrame。transform() 方法展示了如何读取它,使用虚构的加密函数进行修改,然后将其排队到控制器(这最终将其管道传输到 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 |
浏览器兼容性
加载中…