RTCEncodedAudioFrame: getMetadata() 方法
注意:此功能在 专用 Web Workers 中可用。
RTCEncodedAudioFrame 接口的 getMetadata() 方法返回一个对象,其中包含与该帧关联的元数据。
这包括有关该帧的信息,例如使用的音频编码、同步源和贡献源,以及序列号(对于传入的帧)。
语法
getMetadata()
参数
无。
返回值
具有以下属性的对象:
audioLevel-
一个表示此帧音频级别的数字。该值介于 0 和 1 之间(包含),其中 1.0 表示 0 dBov(分贝相对于满量程 (DBFS)),0 表示静默,0.5 表示大约 6 dB SPL 变化(相对于 0 dBov)。该值通过公式
10^(-rfc_level/20)从 RFC6464 中指定的 -127 到 0 的范围转换而来。如果接收到的帧数据包中不存在 RFC6464 报头扩展,则audioLevel将为undefined。 synchronizationSource-
一个正整数值,指示此帧所描述的 RTP 数据包流的同步源("ssrc")。源可以是麦克风,也可以是组合了多个源的混音器应用程序。来自同一源的所有数据包共享相同的时间源和序列空间,因此可以相对排序。请注意,值相同的两个帧指的是同一个源。
payloadType-
一个介于 0 和 127 之间的正整数值,描述 RTP 有效载荷的格式。值与格式的映射定义在 RFC3550 中,更具体地说,是在 RFC3551 的 第 6 节:有效载荷类型定义 中。
contributingSources-
一个
Array,包含对该帧做出贡献的源(ssrc)。考虑一个组合了多个用户音频的会议应用程序。synchronizationSource将包含应用程序的 ssrc,而contributingSources将包含所有单独音频源的 ssrc 值。 sequenceNumber-
传入音频帧的序列号(传出帧不使用),可用于重建帧的原始发送顺序。这是一个介于 0 和 32767 之间的数字。请注意,虽然数字在发送时是按顺序分配的,但在达到 32767 时会溢出并重新从 0 开始。因此,要比较两个帧序列号以确定一个是否在另一个之后,您必须使用 序列号算术。
示例
这个示例 WebRTC 编码转换 实现展示了如何在 transform() 函数中获取帧元数据并将其记录下来。
addEventListener("rtctransform", (event) => {
const transform = new TransformStream({
async transform(encodedFrame, controller) {
// Get the metadata and log
const frameMetaData = encodedFrame.getMetadata();
console.log(frameMetaData);
// Enqueue the frame without modifying
controller.enqueue(encodedFrame);
},
});
event.transformer.readable
.pipeThrough(transform)
.pipeTo(event.transformer.writable);
});
来自本地麦克风的结果对象可能如下所示。请注意,由于只有一个源,因此没有贡献源,并且由于这是传出帧,因此也没有 sequenceNumber。
{
"payloadType": 109,
"synchronizationSource": 1876443470
}
规范
| 规范 |
|---|
| WebRTC Encoded Transform # dom-rtcencodedaudioframe-getmetadata |
浏览器兼容性
加载中…