RTCIceCandidatePairStats - 表示 RTCPeerConnection 质量和性能的统计信息
RTCIceCandidatePairStats
是 WebRTC 的字典,表示统计信息,这些统计信息可以查看在按指定的 ICE 候选对进行连接和配置时 RTCPeerConnection
的质量和性能。
如果基于 RTCStats
的对象的 type
是 candidate-pair
,则它是一个 RTCIceCandidatePairStats
对象。
属性
RTCIceCandidatePairStats
基于 RTCStats
并继承其属性。此外,它还添加了以下新属性:
availableIncomingBitrate
可选
通过报告所有候选对的传入 RTP 流的每秒可用比特数,提供表示网络可用入站容量的信息性值。这没有考虑到 IP 开销的大小,也没有考虑任何其他传输层,如 TCP 或 UDP。
availableOutgoingBitrate
可选
通过报告所有候选对的输出 RTP 流的每秒可用比特数,提供表示网络可用出站容量的信息值。这没有考虑到 IP 开销的大小,也没有考虑任何其他传输层,如 TCP 或 UDP。
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. |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 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 | 不支持 | 未知 | 未知 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 56 | 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 | 未知 | 未知 | 未知 |
1. 通过 currentRtt
支持。
2. 通过 mozPriority
支持。
3. 通过 totalRtt
支持。
4. 通过 componentId
支持。
5. Chrome目前还没有使用规范的算法来确定 writable
的值;它可能与其他浏览器的行为不匹配。