统计模型
实时通信框架还需要一种机制来提取有关其性能的统计信息。 这样的统计信息可能很简单,例如知道已经传递了多少字节的数据,或者可能与测量本地设备上的回声消除器的效率一样复杂。
W3C WebRTC 工作组正在定义一个非常简单的统计信息 API,由此调用可以返回特定 MediaStreamTrack
或整个 PeerConnection
的所有相关数据。 统计数据具有统一的结构,由标识特定统计参数的字符串和关联的简单类型的值组成。
此 API 的提供者(例如不同的浏览器)将使用它来公开标准统计信息和非标准统计信息。 基本的统计模型是浏览器维护选择器引用的一组统计信息。 选择器可以例如是特定的 MediaStreamTrack
。 为了使轨道成为有效的选择器,它必须是通过发出状态请求的 RTCPeerConnection
对象发送或接收的 MediaStream
的成员。
调用 Web 应用程序将选择器提供给 getStats()
方法,浏览器发出一组它认为与该选择器相关的统计信息。
getStats()
方法收集给定选择器的统计信息并异步报告结果。
更精确地,getStats()
方法将有效的选择器(例如 MediaStreamTrack
)作为输入,以及在统计信息可用时执行的回调。 给该回调函数一个包含 RTCStats
对象的 RTCStatsReport
。 RTCStatsReport
对象表示将字符串(标识检查的对象 RTCStats.id
)与其对应的 RTCStats
容器相关联的映射。
一个 RTCStatsReport
可以由几个 RTCStats
对象组成,每个实现对象都认为与选择器相关的基础对象的报告状态。 前者通过汇总某种类型的所有统计信息来收集与选择器关联的全局信息。 例如,如果 MediaStreamTrack
由网络上的多个 SSRC 承载,则 RTCStatsReport
可能每个 SSRC 包含一个 RTCStats
对象(可以通过 ssrc stats 属性的值来区分)。
返回的统计信息的设计方式使得 RTCStats id
字典成员可以链接重复的查询(请参见 表6-1)。 因此,Web 应用程序可以通过在开始和结束时请求测量来测量给定时间段内的性能。
表6-1 RTCStats 子典成员
成员 | 类型 | 描述 |
---|---|---|
id | DOMString | 一个唯一的 ID,与检查该对象以生成此 RTCStatsobject 的对象相关联。 |
timestamp | DOMHiResTimeStamp | 与该对象关联的 DOMHiResTimeStamp [HIGHRES-TIME]类型的时间戳。该时间相对于 UNIX 纪元(1970年1月1日,UTC)。 |
type | RTCStatsType | 此对象的类型。 |
目前,唯一定义的类型是 inbound-rtp
和 outbound-rtp
,它们都是 RTCRTPStreamStats
子类的实例,这些子类还提供了 remoteId
和 ssrc
属性:
outbound-rtp
对象类型由子类RTCOutboundRTPStreamStats
表示,提供packetsSent
和bytesSent
属性。inbound-rtp
对象类型由子类RTCInboundRTPStreamStats
表示,提供类似的packetReceived
和bytesReceived
属性。