RTCIceCandidatePairStats - 表示 RTCPeerConnection 质量和性能的统计信息

RTCIceCandidatePairStats 是 WebRTC 的字典,表示统计信息,这些统计信息可以查看在按指定的 ICE 候选对进行连接和配置时 RTCPeerConnection 的质量和性能。

如果基于 RTCStats 的对象的 typecandidate-pair,则它是一个 RTCIceCandidatePairStats 对象。

属性

RTCIceCandidatePairStats 基于 RTCStats 并继承其属性。此外,它还添加了以下新属性:

availableIncomingBitrate 可选

通过报告所有候选对的传入 RTP 流的每秒可用比特数,提供表示网络可用入站容量的信息性值。这没有考虑到 IP 开销的大小,也没有考虑任何其他传输层,如 TCPUDP

availableOutgoingBitrate 可选

通过报告所有候选对的输出 RTP 流的每秒可用比特数,提供表示网络可用出站容量的信息值。这没有考虑到 IP 开销的大小,也没有考虑任何其他传输层,如 TCPUDP

bytesReceieved 可选

到目前为止,此候选对上已收到的有效负载字节总数(即,已收到的字节总数减去任何标头,填充或其他管理开销)。

bytesSent 可选

到目前为止,此候选对上已发送的有效负载字节总数(即,已发送的字节总数减去任何标头,填充或其他管理开销)。

circuitBreakerTriggerCount 可选

一个整数值,指示为此五元组触发断路器的次数(这五个值组成的一组,包括 TCP 连接:源 IP 地址,源端口号,目标 IP 地址,目标端口号和协议)。每当连接超时或需要自动中止连接时,就会触发断路器。

consentExpiredTimestamp 可选

一个 DOMHighResTimeStamp 值,指示最近的 STUN 绑定响应到期的时间。如果未在候选对上发送有效的 STUN 绑定响应,则此值为 undefined;仅当 responsesReceived 为 0 时,才会发生这种情况。

consentRequestsSent 可选

在此候选对上已发送的同意请求总数。

currentRoundTripTime 可选

一个浮点值,指示最近发送的 STUN 请求与接收到的响应之间经过的总时间(以秒为单位)。这可能基于确认打开连接许可所涉及的请求。

firstRequestTimestamp 可选

一个 DOMHighResTimeStamp 值,它指定该候选对从本地对等方向远程对等方发送第一个 STUN 请求的时间。

lastPacketReceivedTimestamp 可选

一个 DOMHighResTimeStamp 值,指示本地对等方针对此候选对从远程对等方接收到最后一个数据包的时间。未记录 STUN 数据包的时间戳。

lastPacketSentTimestamp 可选

一个 DOMHighResTimeStamp 值,指示该候选对的最后一个数据包从本地对等方发送到远程对等方的时间。未记录 STUN 数据包的时间戳。

lastRequestTimestamp 可选

一个 DOMHighResTimeStamp 值,它指定该候选对的最后一个(最新)STUN 请求从本地对等方发送到远程对等方的时间。

lastResponseTimestamp 可选

一个 DOMHighResTimeStamp 值,它指定本地候选者从该对中的远程候选者接收到最后一个(最新)STUN 响应的时间。

localCandidateId 可选

一个字符串,来自 RTCIceCandidateStats 对象中包含的数据中与 RTCIceCandidate 对应的唯一 ID 字符串,为候选对的本地候选者提供统计信息。

nominated 可选

一个布尔值,如果为 true,则表示此对象描述的候选对是已提议使用的一个,如果(在已提名的)候选对中优先级最高,将被使用。有关详细信息,请参见 RFC 5245, section 7.1.3.2.4

packetsReceived 可选

在此候选对上接收到的数据包总数。

packetsSent 可选

在此候选对上发送的数据包总数。

remoteCandidateId 可选

唯一的 ID 字符串,对应于从其获取数据以构造 RTCIceCandidateStats 对象的远程候选对象,该对象描述了连接的远程端。

requestsReceived 可选

已接收到的连通性检查请求的总数,包括重传。该值包括连接检查和 STUN 同意检查。

requestsSent 可选

已发送的连通性检查请求的总数,包括重发。

responsesReceived 可选

已收到的连接检查响应的总数。

responsesSent 可选

已发送的连接性检查响应的总数。这包括连接检查请求和 STUN 同意请求。

retransmissionsReceived 可选

接收到连接检查请求重传的总次数。重传是一种连接检查请求,其 TRANSACTION_TRANSMIT_COUNTER 属性的 req 字段大于 1。

retransmissionsSent 可选

连接检查请求重新发送的总次数。

state 可选

一个 RTCStatsIceCandidatePairState 对象,它指示两个候选对象之间的连接状态。

totalRoundTripTime 可选

一个浮点值,指示迄今为止在此候选对上进行的所有此类请求,在发送 STUN 请求和接收对它们的响应之间经过的总时间(以秒为单位)。这包括连接检查和同意检查请求。您可以通过将该值除以 responsesReceived 来计算平均往返时间(RTT)。

transportId 可选

一个 DOMString ,用于唯一标识已检查的 RTCIceTransport(如 RTCTransportStats 中所示),以获得用于生成此对象的与传输有关的统计信息。

过时的属性

以下属性已从规范中删除,不应再使用。您应该尽快更新现有的代码以避免使用它们。检查 兼容性表,以了解有关哪些浏览器支持它们以及哪些版本的详细信息。

priority 可选

一个整数值,指示候选对的优先级。

readable 可选

一个布尔值,指示是否可以通过候选对描述的连接发送数据。

writable 可选

一个布尔值,指示是否可以在候选对描述的连接上接收数据。

非标准特性

selected 可选

一个 Firefox 特有的布尔值,如果此对象描述的候选对为当前使用的,则为 true。确定所选候选对的符合规范的方法是查找类型为 transport 的统计对象,即 RTCTransportStats 对象。该对象的 selectedCandidatePairId 属性指示指定的传输是否正在使用。

使用说明

当前有效的 ICE 候选对(如果有)可以通过调用 RTCIceTransport 方法 getSelectedCandidatePair() 方法获得,该方法返回一个 RTCIceCandidatePair 对象,如果未选择任何对,则为 null。有效候选对描述了 RTCPeerConnection 两端的当前配置。

如果 RTCIceTransport 执行 ICE 重新启动,则所有不是传输有效对的候选对都将被删除,此时 ICE 传输的 state 返回 new,并且协商再次开始。有关更多信息,请参见 ICE 重新启动

实例

如果 RTCStats 对象的 rtcStats 是一个 RTCIceCandidatePairStats 对象,则此示例计算连接检查之间的平均时间。

if (rtcStats && rtcStats.type === "candidate-pair") {
  let elapsed = (rtcStats.lastRequestTimestamp - rtcStats.firstRequestTimestamp)
                  / rtcStats.requestsSent;

  log("连接检查之间的平均时间:" + elapsed + " ms。");
}

该代码首先查看 rtcStats,以查看其 type 是否为 candidate-pair。如果是,那么我们知道 rtcStats 实际上是一个 RTCIceCandidatePairStats 对象。如果是这样,我们将计算两次 STUN 连接检查之间经过的平均时间并记录该信息。

规范

规范 状态 备注
Identifiers for WebRTC's Statistics API
RTCIceCandidatePairStats 的定义
候选推荐 Initial specification.

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持56 未知29 不支持 未知 未知
availableIncomingBitrate 不支持 未知 不支持 不支持 未知 未知
availableOutgoingBitrate 支持 未知 不支持 不支持 未知 未知
bytesReceived 支持 未知56 不支持 未知 未知
bytesSent 支持 未知56 不支持 未知 未知
circuitBreakerTriggerCount 不支持 未知 不支持 不支持 未知 未知
consentExpiredTimestamp 不支持 未知 不支持 不支持 未知 未知
contentRequestsSent 不支持 未知 不支持 不支持 未知 未知
currentRoundTripTime

71

支持1

未知 不支持 不支持 未知 未知
firstRequestTimeStamp 不支持 未知 不支持 不支持 未知 未知
lastPacketReceivedTimestamp 不支持 未知56 不支持 未知 未知
lastPacketSentTimestamp 不支持 未知56 不支持 未知 未知
lastReponseTimestamp 不支持 未知 不支持 不支持 未知 未知
lastRequestTimestamp 不支持 未知 不支持 不支持 未知 未知
localCandidateId 不支持 未知29 不支持 未知 未知
nominated 不支持 未知56 不支持 未知 未知
packetsReceived 不支持 未知 不支持 不支持 未知 未知
packetsSent 不支持 未知 不支持 不支持 未知 未知
priority 不支持 未知

42

292

不支持 未知 未知
readable 不支持 未知56 不支持 未知 未知
remoteCandidateId 不支持 未知29 不支持 未知 未知
requestsReceived 支持 未知 不支持 不支持 未知 未知
requestsSent 支持 未知 不支持 不支持 未知 未知
responsesReceived 支持 未知 不支持 不支持 未知 未知
responsesSent 支持 未知 不支持 不支持 未知 未知
retransmissionsReceived 不支持 未知 不支持 不支持 未知 未知
retransmissionsSent 不支持 未知 不支持 不支持 未知 未知
state 不支持 未知29 不支持 未知 未知
totalRoundTripTime

71

支持3

未知 不支持 不支持 未知 未知
transportId 不支持 未知

56

294

不支持 未知 未知
writable 支持5 未知56 不支持 未知 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持5656 未知29 未知 未知 未知
availableIncomingBitrate 支持 不支持 未知 不支持 未知 未知 未知
availableOutgoingBitrate 支持 支持 未知 不支持 未知 未知 未知
bytesReceived 支持 支持 未知56 未知 未知 未知
bytesSent 支持 支持 未知56 未知 未知 未知
circuitBreakerTriggerCount 不支持 不支持 未知 不支持 未知 未知 未知
consentExpiredTimestamp 不支持 不支持 未知 不支持 未知 未知 未知
contentRequestsSent 不支持 不支持 未知 不支持 未知 未知 未知
currentRoundTripTime 支持

71

支持1

未知 不支持 未知 未知 未知
firstRequestTimeStamp 不支持 不支持 未知 不支持 未知 未知 未知
lastPacketReceivedTimestamp 不支持 不支持 未知56 未知 未知 未知
lastPacketSentTimestamp 不支持 不支持 未知56 未知 未知 未知
lastReponseTimestamp 不支持 不支持 未知 不支持 未知 未知 未知
lastRequestTimestamp 不支持 不支持 未知 不支持 未知 未知 未知
localCandidateId 不支持 不支持 未知29 未知 未知 未知
nominated 不支持 不支持 未知56 未知 未知 未知
packetsReceived 不支持 不支持 未知 不支持 未知 未知 未知
packetsSent 不支持 不支持 未知 不支持 未知 未知 未知
priority 不支持 不支持 未知

42

292

未知 未知 未知
readable 不支持 不支持 未知56 未知 未知 未知
remoteCandidateId 不支持 不支持 未知29 未知 未知 未知
requestsReceived 支持 支持 未知 不支持 未知 未知 未知
requestsSent 支持 支持 未知 不支持 未知 未知 未知
responsesReceived 支持 支持 未知 不支持 未知 未知 未知
responsesSent 支持 支持 未知 不支持 未知 未知 未知
retransmissionsReceived 不支持 不支持 未知 不支持 未知 未知 未知
retransmissionsSent 不支持 不支持 未知 不支持 未知 未知 未知
state 不支持 不支持 未知29 未知 未知 未知
totalRoundTripTime 不支持

71

支持3

未知 不支持 未知 未知 未知
transportId 不支持 不支持 未知

56

294

未知 未知 未知
writable 支持 支持5 未知56 未知 未知 未知

1. 通过 currentRtt 支持。

2. 通过 mozPriority 支持。

3. 通过 totalRtt 支持。

4. 通过 componentId 支持。

5. Chrome目前还没有使用规范的算法来确定 writable 的值;它可能与其他浏览器的行为不匹配。