RTCIceCandidatePairStats

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

* 此特性的某些部分可能存在不同级别的支持。

WebRTC API 的 RTCIceCandidatePairStats 字典用于报告统计信息,这些信息可以深入了解 RTCPeerConnection 在连接时,以及在由指定的 ICE 候选对描述的方式配置时的质量和性能。

可以通过迭代 RTCPeerConnection.getStats() 返回的 RTCStatsReport,直到找到 type"candidate-pair" 的条目来获取统计信息。

实例属性

availableIncomingBitrate 可选

表示网络可用入站容量的数字。这报告了所有候选对的传入 RTP 流每秒可用的总比特数。它不考虑 Internet Protocol (IP) 开销的大小,也不考虑任何其他传输层(例如 TCPUDP)。

availableOutgoingBitrate 可选

表示网络近似可用出站容量的数字。这报告了所有候选对的传出 RTP 流每秒可用的总比特数。它不考虑 IP 开销的大小,也不考虑任何其他传输层(例如 TCPUDP)。

bytesDiscardedOnSend 可选 实验性

一个整数,表示由于此候选对上的套接字错误而丢弃的总字节数。

bytesReceived 可选

一个整数,表示在此候选对上接收到的有效载荷字节总数。

bytesSent 可选

一个整数,表示在此候选对上发送的有效载荷字节总数(不包括任何标头、填充或其他协议开销的发送字节总数)。

consentRequestsSent 可选 实验性

一个整数,表示在此候选对上发送的 STUN 同意请求总数。

currentRoundTripTime 可选

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

lastPacketReceivedTimestamp 可选

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

lastPacketSentTimestamp 可选

一个 DOMHighResTimeStamp 值,表示本地对等方将最后一个数据包发送到此候选对的远程对等方的时间。STUN 数据包不记录时间戳。

localCandidateId 可选

一个字符串,表示与 RTCIceCandidate 对应的唯一 ID,该数据包含在 RTCIceCandidateStats 对象中,该对象提供了候选对本地候选的统计信息。

nominated 可选

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

packetsDiscardedOnSend 可选 实验性

一个整数,表示由于此候选对上的套接字错误而丢弃的数据包总数。

packetsReceived 可选 实验性

一个整数,表示在此候选对上接收到的数据包总数。

packetsSent 可选 实验性

一个整数,表示在此候选对上发送的数据包总数。

remoteCandidateId 可选

一个字符串,包含一个唯一 ID,对应于用于构造描述连接远程端的 RTCIceCandidateStats 对象的远程候选数据。

requestsReceived 可选

一个整数,表示已收到的连接性检查请求总数,包括重传。此值包括连接性检查和 STUN 同意检查。

requestsSent 可选

一个整数,表示已发送的连接性检查请求总数,包括重传。

responsesReceived 可选

一个整数,表示已收到的连接性检查响应总数。

responsesSent 可选

一个整数,表示已发送的连接性检查响应总数。这包括连接性检查请求和 STUN 同意请求。

state 可选

一个字符串,表示两个候选之间连接的状态。

totalRoundTripTime 可选

一个数字,表示从在此候选对上迄今为止发出的所有 STUN 请求发送到接收响应之间经过的总时间(以秒为单位)。这包括连接性检查和同意检查请求。可以通过将此值除以 responsesReceived 来计算平均往返时间 (RTT)。

transportId 可选

一个字符串,唯一标识被检查以获取用于生成此对象的传输相关统计信息(如 RTCTransportStats 中所发现)的 RTCIceTransport

常见实例属性

以下属性是所有 WebRTC 统计信息对象共有的。

id

一个字符串,唯一标识正在监控以生成这组统计信息的对象。

时间戳

一个 DOMHighResTimeStamp 对象,表示此统计信息对象样本的采集时间。

type

一个值为 "candidate-pair" 的字符串,表示对象包含的统计信息类型。

已废弃的属性

以下属性已从规范中删除,不应再使用。您应尽快更新任何现有代码以避免使用它们。查看兼容性表以了解哪些浏览器支持它们以及在哪个版本中。

priority 已废弃 可选 非标准

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

readable 已废弃 可选 非标准

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

writable 已废弃 可选 非标准

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

非标准属性

selected 非标准 可选

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

用法说明

当前活动的 ICE 候选对(如果有)可以通过调用 RTCIceTransport 方法 getSelectedCandidatePair() 来获取,该方法返回一个 RTCIceCandidatePair 对象,如果没有选择的对,则返回 null。活动候选对描述了 RTCPeerConnection 两端的当前配置。

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

示例

此示例计算连接性检查之间经过的平均时间。

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

  console.log(`Average time between ICE connectivity checks: ${elapsed} ms.`);
}

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

规范

规范
WebRTC 统计 API 的标识符
# dom-rtcstatstype-candidate-pair

浏览器兼容性