RTCEncodedVideoFrame: getMetadata() 方法

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

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

这包括有关帧的信息,包括其大小、视频编码、构建完整图像所需的其它帧、时间戳和其他信息。

语法

js
getMetadata()

参数

无。

返回值

具有以下属性的对象

frameId

一个正整数,表示此帧的 ID。

dependencies

一个Array,包含正整数,表示此帧依赖的帧的 frameId。对于关键帧,这将为空,因为关键帧包含构建图像所需的所有信息。对于增量帧,这将列出呈现此帧所需的所有帧。可以使用RTCEncodedVideoFrame.type确定帧的类型。

width

一个正整数,表示帧的宽度。最大值为 65535。

height

一个正整数,表示帧的高度。最大值为 65535。

spatialIndex

一个正整数,表示帧的空间索引。某些编解码器允许生成具有不同分辨率层的帧。为了在需要时降低比特率,同时保持可接受的视频质量,可以有选择地丢弃较高层中的帧。

temporalIndex

一个正整数,表示帧的时间索引。某些编解码器根据是否丢弃帧会阻止其他帧被解码来对帧进行分层。为了在需要时降低比特率,同时保持可接受的视频质量,可以有选择地丢弃较高层中的帧。

synchronizationSource

一个正整数,表示此编码视频帧所描述的 RTP 数据包流的同步源 ("ssrc")。源可能类似于摄像头或麦克风,或者某种将多个源组合在一起的混音器应用程序。来自同一源的所有数据包共享相同的时间源和序列空间,因此可以相互排序。请注意,具有相同值的两个帧引用的是同一个源(有关更多信息,请参阅RTCRtpStreamStats.ssrc)。

payloadType

一个介于 0 到 127 之间的正整数,描述了 RTP 有效负载的格式。值到格式的映射在 RFC3550 中定义。

contributingSources

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

timestamp

原始帧的(以微秒为单位的)媒体呈现时间戳 (PTS),与对应于此帧的原始帧的时间戳匹配。这用于同步属于同一演示文稿的不同视频、音频、字幕和其他流。

示例

此示例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);
});

来自本地网络摄像头的结果对象可能如下所示。请注意,由于只有一个源,因此没有贡献源。

js
{
  "contributingSources": [],
  "dependencies": [
    405
  ],
  "frameId": 406,
  "height": 480,
  "payloadType": 120,
  "spatialIndex": 0,
  "synchronizationSource": 3956716931,
  "temporalIndex": 0,
  "width": 640
}

规范

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

浏览器兼容性

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

另请参阅