RTCEncodedAudioFrame: getMetadata() 方法

Baseline 2023
新推出

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

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

RTCEncodedAudioFrame 接口的 getMetadata() 方法返回一个对象,其中包含与该帧关联的元数据。

这包括有关该帧的信息,例如使用的音频编码、同步源和贡献源,以及序列号(对于传入的帧)。

语法

js
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() 函数中获取帧元数据并将其记录下来。

js
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

json
{
  "payloadType": 109,
  "synchronizationSource": 1876443470
}

规范

规范
WebRTC Encoded Transform
# dom-rtcencodedaudioframe-getmetadata

浏览器兼容性

另见