统计模型

实时通信框架还需要一种机制来提取有关其性能的统计信息。 这样的统计信息可能很简单,例如知道已经传递了多少字节的数据,或者可能与测量本地设备上的回声消除器的效率一样复杂。

W3C WebRTC 工作组正在定义一个非常简单的统计信息 API,由此调用可以返回特定 MediaStreamTrack 或整个 PeerConnection 的所有相关数据。 统计数据具有统一的结构,由标识特定统计参数的字符串和关联的简单类型的值组成。

此 API 的提供者(例如不同的浏览器)将使用它来公开标准统计信息和非标准统计信息。 基本的统计模型是浏览器维护选择器引用的一组统计信息。 选择器可以例如是特定的 MediaStreamTrack。 为了使轨道成为有效的选择器,它必须是通过发出状态请求的 RTCPeerConnection 对象发送或接收的 MediaStream 的成员。

调用 Web 应用程序将选择器提供给 getStats() 方法,浏览器发出一组它认为与该选择器相关的统计信息。

getStats() 方法收集给定选择器的统计信息并异步报告结果。

更精确地,getStats() 方法将有效的选择器(例如 MediaStreamTrack)作为输入,以及在统计信息可用时执行的回调。 给该回调函数一个包含 RTCStats 对象的 RTCStatsReportRTCStatsReport 对象表示将字符串(标识检查的对象 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-rtpoutbound-rtp,它们都是 RTCRTPStreamStats 子类的实例,这些子类还提供了 remoteIdssrc 属性:

  • outbound-rtp 对象类型由子类 RTCOutboundRTPStreamStats 表示,提供 packetsSentbytesSent 属性。
  • inbound-rtp 对象类型由子类 RTCInboundRTPStreamStats 表示,提供类似的 packetReceivedbytesReceived 属性。