RTCEncodedVideoFrame: getMetadata() 方法
注意:此功能在 专用 Web Workers 中可用。
RTCEncodedVideoFrame 接口的 getMetadata() 方法返回一个对象,其中包含与该帧关联的元数据。
这包括有关帧的信息,例如其大小、视频编码、构建完整图像所需的其他帧、时间戳以及其他信息。
语法
getMetadata()
参数
无。
返回值
具有以下属性的对象:
frameId-
一个表示此帧 ID 的正整数值。
dependencies-
一个正整数的
Array,指示此帧所依赖的帧的 frameIds。对于关键帧,这将是空的,因为关键帧包含构建图像所需的所有信息。对于增量帧,这将列出渲染此帧所需的所有帧。可以使用RTCEncodedVideoFrame.type来确定帧的类型。 width-
一个表示帧宽度的正整数。最大值为 65535。
height-
一个表示帧高度的正整数。最大值为 65535。
spatialIndex-
一个表示帧的空间索引的正整数。某些编解码器允许生成不同分辨率层的帧。当需要降低比特率时,可以有选择地丢弃较高层的帧,同时保持可接受的视频质量。
temporalIndex-
一个表示帧的时间索引的正整数。某些编解码器根据丢弃帧是否会阻止其他帧被解码来将帧分组为层。当需要降低比特率时,可以有选择地丢弃较高层的帧,同时保持可接受的视频质量。
synchronizationSource-
一个表示此编码视频帧所描述的 RTP 数据包流的同步源("ssrc")的正整数值。源可能是摄像头或麦克风,或者某种组合了多个源的混合器应用程序。来自同一源的所有数据包共享相同的时间源和序列空间,因此可以相对排序。注意,具有相同值的两个帧引用同一源(有关更多信息,请参阅
RTCInboundRtpStreamStats.ssrc)。 payloadType-
一个表示 RTP 有效载荷格式的 0 到 127 范围内的正整数值。值与格式的映射在 RFC3550 中定义。
contributingSources-
已为该帧做出贡献的源(ssrc)的
Array。考虑一个组合了多个用户音频和视频的会议应用程序。synchronizationSource将包含应用程序的 ssrc,而contributingSources将包含所有单独的视频和音频源的 ssrc 值。 时间戳-
原始帧的媒体呈现时间戳(PTS),以微秒为单位,匹配对应于此帧的原始帧的时间戳。这用于同步属于同一演示文稿的单独的视频、音频、字幕和其他流。
示例
这个示例 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);
});
来自本地摄像头的最终对象可能如下所示。请注意,由于只有一个源,因此没有 contributing sources。
{
"contributingSources": [],
"dependencies": [405],
"frameId": 406,
"height": 480,
"payloadType": 120,
"spatialIndex": 0,
"synchronizationSource": 3956716931,
"temporalIndex": 0,
"width": 640
}
规范
| 规范 |
|---|
| WebRTC Encoded Transform # dom-rtcencodedvideoframe-getmetadata |
浏览器兼容性
加载中…