RTCEncodedAudioFrame:getMetadata() 方法

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

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

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

语法

js
getMetadata()

参数

无。

返回值

具有以下属性的对象

synchronizationSource

一个正整数,指示此帧描述的 RTP 数据包流的同步源 (“ssrc”)。源可能类似于麦克风,或者组合多个源的混音器应用程序。来自同一源的所有数据包共享相同的时钟源和序列空间,因此可以相互排序。请注意,具有相同值的两个帧指的是相同的源。

payloadType

一个介于 0 到 127 之间的正整数,描述 RTP 负载的格式。值的格式映射在 RFC3550 中定义,更具体地说,在 RFC3551 的第 6 节:有效负载类型定义中定义。

contributingSources

已为帧做出贡献的源 (ssrc) 的数组。考虑一个会议应用程序,它组合来自多个用户的音频。synchronizationSource 将包含应用程序的 ssrc,而 contributingSources 将包含所有单个音频源的 ssrc 值。

sequenceNumber

传入音频帧(不适用于传出帧)的序列号,可用于重建帧的原始发送顺序。这是一个介于 0 到 32767 之间的数字。请注意,虽然在发送时按顺序分配数字,但它们将在 32767 溢出并从 0 重新开始。因此,为了比较两个帧序列号,以便确定一个是否假定在另一个之后,您必须使用序列号算术

示例

此示例WebRTC 编码转换实现展示了如何在 transform() 函数中获取帧元数据并记录它。

js
addEventListener("rtctransform", (event) => {
  const async 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,因为这是一个传出帧。

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

规范

规范
WebRTC 编码转换
# dom-rtcencodedaudioframe-getmetadata

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅