🍉 加载中...


WebRTC Stats 数据含义笔记

38 minute read

推荐文档:https://www.w3.org/TR/webrtc-stats/

通识

  1. id:标识音频编解码器的唯一 ID。

    • 这个 ID 通常与音频编解码器的参数相关,以及其在会话中的唯一性。
  2. timestamp:记录统计信息的时间戳。

    • 值类似 “1692255519792306.0”。
    • 表示此统计信息记录的时间戳,以一定的时间单位进行表示。

certificate

示例

1{
2  "id": "CF0C:53:2D:A6:44:98:90:61:4D:96:0F:A7:02:32:40:00:65:CD:2D:35:FD:E9:15:06:7F:17:23:D1:42:0E:01:89",
3  "timestamp": "1692255519792306.0",
4  "type": "certificate",
5  "data": "{base64Certificate: MIIBFjCBvKADAgECAghNf1Gxa6LvXTAKBggqhkjOPQQDAjARMQ8wDQYDVQQDDAZXZWJSVEMwHhcNMjMwODE2MDY1ODI0WhcNMjMwOTE2MDY1ODI0WjARMQ8wDQYDVQQDDAZXZWJSVEMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARhfXu8qKVRt/keApFw2Ias1R78uKm0RnSdMmanQiGTKUT4Lp/RbQHzpBWiSYVcnQ/nYs1saxEWD8DJ+iGS2s3kMAoGCCqGSM49BAMCA0kAMEYCIQDG8+vhmV7JP6Ek63FbkQ5Av2bAhRbW9LbG3kHgUk8hNAIhAO7QKPcNO0j7Ead7JXtwfHzD7yGskGw3AMX8zXQoclEW, fingerprint: 0C:53:2D:A6:44:98:90:61:4D:96:0F:A7:02:32:40:00:65:CD:2D:35:FD:E9:15:06:7F:17:23:D1:42:0E:01:89, fingerprintAlgorithm: sha-256}"
6}

解释

这段 WebRTC Stats JSON 描述了一个证书(Certificate)的相关统计信息,涵盖了证书内容、指纹等方面的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “certificate”,表示这是有关证书的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与证书的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • base64Certificate:以 Base64 编码表示的证书。
  • fingerprint:证书指纹。
  • fingerprintAlgorithm:证书指纹算法,这里是 SHA-256。

codec

示例

1{
2  "id": "COT01_111_minptime=10;useinbandfec=1",
3  "timestamp": "1692255519792306.0",
4  "type": "codec",
5  "data": "{sdpFmtpLine: minptime=10;useinbandfec=1, payloadType: 111, channels: 2, transportId: T01, mimeType: audio/opus, clockRate: 48000}"
6}

解释

这段 WebRTC Stats JSON 描述了一个音频编解码器的相关统计信息,包括其参数、传输相关信息以及与音频质量和编码相关的数据。

其包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “codec”,表示这是有关音频编解码器的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 值为 “{sdpFmtpLine: minptime=10;useinbandfec=1, payloadType: 111, channels: 2, transportId: T01, mimeType: audio/opus, clockRate: 48000}"。
    • sdpFmtpLine 表示与 SDP 中的格式参数有关的信息。
    • payloadType 表示编解码器的有效载荷类型。
    • channels 表示音频通道数量。
    • transportId 表示传输 ID。
    • mimeType 表示媒体类型,这里是 “audio/opus”。
    • clockRate 表示音频编解码器的时钟速率,这里是 48000。

candidate-pair

示例一

 1{
 2  "id": "CP8aPa7EwD_4vALYSLE",
 3  "timestamp": "1692255519792306.0",
 4  "type": "candidate-pair",
 5  "data": {
 6    "transportId": "T01",
 7    "requestsSent": 0,
 8    "localCandidateId": "ITNqu3Pre",
 9    "bytesSent": 0,
10    "bytesDiscardedOnSend": 0,
11    "priority": 179897690279002110,
12    "requestsReceived": 0,
13    "writable": false,
14    "remoteCandidateId": "I0CYvF5UH",
15    "bytesReceived": 0,
16    "packetsReceived": 0,
17    "responsesSent": 0,
18    "packetsDiscardedOnSend": 0,
19    "nominated": false,
20    "packetsSent": 0,
21    "totalRoundTripTime": 0.0,
22    "responsesReceived": 0,
23    "state": "waiting",
24    "consentRequestsSent": 0
25  }
26}

示例二

 1{
 2  "id": "CP8aPa7EwD_4vALYSLE",
 3  "timestamp": "1692255519792306.0",
 4  "type": "candidate-pair",
 5  "data": {
 6    "lastPacketReceivedTimestamp": 1692265165412.0,
 7    "transportId": "T01",
 8    "requestsSent": 7,
 9    "localCandidateId": "IHHE3Y3IF",
10    "bytesSent": 64023,
11    "bytesDiscardedOnSend": 0,
12    "priority": 7241540810645061119,
13    "availableOutgoingBitrate": 141846.0,
14    "requestsReceived": 7,
15    "writable": true,
16    "remoteCandidateId": "IrVCGVl4y",
17    "bytesReceived": 44089,
18    "packetsReceived": 650,
19    "responsesSent": 7,
20    "packetsDiscardedOnSend": 0,
21    "nominated": true,
22    "packetsSent": 646,
23    "totalRoundTripTime": 0.145,
24    "responsesReceived": 7,
25    "lastPacketSentTimestamp": 1692265165416.0,
26    "state": "succeeded",
27    "currentRoundTripTime": 0.002,
28    "consentRequestsSent": 6
29  }
30}

解释

这段 WebRTC Stats JSON 描述了一个候选对(Candidate Pair)的相关统计信息,包括传输、字节、数据包、优先级、状态等与候选对相关的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “candidate-pair”,表示这是有关候选对的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 值为 “{transportId: T01, requestsSent: 5, localCandidateId: I8aPa7EwD, bytesSent: 0, bytesDiscardedOnSend: 0, priority: 9114724894817155583, requestsReceived: 0, writable: false, remoteCandidateId: I4vALYSLE, bytesReceived: 0, packetsReceived: 0, responsesSent: 0, packetsDiscardedOnSend: 0, nominated: false, packetsSent: 0, totalRoundTripTime: 0.0, responsesReceived: 0, state: in-progress, consentRequestsSent: 0}"。
    • lastPacketReceivedTimestamp 表示最后一个数据包的接收时间戳。
    • transportId 表示传输 ID。
    • requestsSent 表示发送的请求数量。
    • localCandidateId 表示本地候选者的 ID。
    • bytesSent 表示已发送的字节数。
    • bytesDiscardedOnSend 表示在发送时被丢弃的字节数。
    • priority 表示优先级。
    • availableOutgoingBitrate 表示可用的出站比特率。
    • requestsReceived 表示接收的请求数量。
    • writable 表示是否可写。
    • remoteCandidateId 表示远程候选者的 ID。
    • bytesReceived 表示已接收的字节数。
    • packetsReceived 表示已接收的数据包数量。
    • responsesSent 表示已发送的响应数量。
    • packetsDiscardedOnSend 表示在发送时被丢弃的数据包数量。
    • nominated 表示是否已指定为已选中。
    • packetsSent 表示已发送的数据包数量。
    • totalRoundTripTime 表示总往返时间。
    • responsesReceived 表示已接收的响应数量。
    • lastPacketSentTimestamp 表示最后一个数据包的发送时间戳。
    • state 表示状态,这里是 “in-progress”。(waiting、in-progress、success)
    • currentRoundTripTime 当前往返时延。
    • consentRequestsSent 表示已发送的同意请求数量。

stream

示例

1{
2  "id": "DEPRECATED_S9a80ba1f-f722-4c41-9ac7-6ee9976d217a",
3  "timestamp": "1692255519792306.0",
4  "type": "stream",
5  "data": "{trackIds: [DEPRECATED_TI3], streamIdentifier: 9a80ba1f-f722-4c41-9ac7-6ee9976d217a}"
6}

解释

这段 WebRTC Stats JSON 描述了一个流(Stream)的相关统计信息,包括与流相关的轨道信息和流的标识符。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “stream”,表示这是有关流的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 值为 “{trackIds: [DEPRECATED_TI3], streamIdentifier: 9a80ba1f-f722-4c41-9ac7-6ee9976d217a}"。
    • trackIds 表示与流相关的轨道(Track)的 ID 列表,这里是一个包含 “DEPRECATED_TI3” 的数组。
    • streamIdentifier 表示流的标识符,这里是一个 UUID(通用唯一标识符)。

“DEPRECATED” 表示这些字段或值可能已经过时,可能在未来的版本中不再使用。

track 存在对应关系(通过 ID)

track

示例一

1{
2  "id": "DEPRECATED_TI3",
3  "timestamp": "1692255519792306.0",
4  "type": "track",
5  "data": "{totalAudioEnergy: 7.657708458531581e-7, removedSamplesForAcceleration: 3452, kind: audio, jitterBufferDelay: 44131.2, audioLevel: 0.00027466658528397473, concealedSamples: 18720, trackIdentifier: c7a9c1d5-f05a-46f4-a39d-1a5c363fcaa8, totalSamplesDuration: 14.76999999999973, detached: false, insertedSamplesForDeceleration: 840, jitterBufferEmittedCount: 693120, ended: false, totalSamplesReceived: 708960, concealmentEvents: 1, remoteSource: true, silentConcealedSamples: 17160}"
6}

示例二

1{
2  "id": "DEPRECATED_TO3",
3  "timestamp": "1692255519792306.0",
4  "type": "track",
5  "data": "{detached: false, kind: audio, ended: false, remoteSource: false, trackIdentifier: 40293309-b8b5-4aac-8fd8-a10f39cbceef, mediaSourceId: SA3}"
6}

解释

这段 WebRTC Stats JSON 描述了一个轨道(Track)的相关统计信息,包括与音频、样本、抖动缓冲等相关的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “track”,表示这是有关轨道的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 值为 “{totalAudioEnergy: 7.657708458531581e-7, removedSamplesForAcceleration: 3452, kind: audio, jitterBufferDelay: 44131.2, audioLevel: 0.00027466658528397473, concealedSamples: 18720, trackIdentifier: c7a9c1d5-f05a-46f4-a39d-1a5c363fcaa8, totalSamplesDuration: 14.76999999999973, detached: false, insertedSamplesForDeceleration: 840, jitterBufferEmittedCount: 693120, ended: false, totalSamplesReceived: 708960, concealmentEvents: 1, remoteSource: true, silentConcealedSamples: 17160}"。
    • totalAudioEnergy 表示总音频能量。
    • removedSamplesForAcceleration 表示为加速而删除的样本数。
    • kind 表示轨道的种类,这里是 “audio”。
    • jitterBufferDelay 表示抖动缓冲延迟。
    • audioLevel 表示音频级别。
    • concealedSamples 表示隐藏的样本数。
    • trackIdentifier 表示轨道的标识符,这里是一个 UUID。
    • totalSamplesDuration 表示总样本持续时间。
    • detached 表示轨道是否已分离。
    • insertedSamplesForDeceleration 表示为减速而插入的样本数。
    • jitterBufferEmittedCount 表示抖动缓冲发出的计数。
    • ended 表示轨道是否已结束。
    • totalSamplesReceived 表示总接收样本数。
    • concealmentEvents 表示隐藏事件的数量。
    • remoteSource 表示是否为远程源。
    • silentConcealedSamples 表示静默隐藏的样本数。
    • mediaSourceId 表示媒体源的 ID。

“DEPRECATED” 表示这些字段或值可能已经过时,可能在未来的版本中不再使用。

stream 存在对应关系(通过 ID)

remote-candidate

示例一

1{
2  "id": "I4vALYSLE",
3  "timestamp": "1692255519792306.0",
4  "type": "remote-candidate",
5  "data": "{candidateType: host, protocol: udp, address: fec0::681b:d9ff:fe51:bed9, transportId: T01, port: 60295, usernameFragment: HouS, isRemote: true, ip: fec0::681b:d9ff:fe51:bed9, foundation: 3392773507, priority: 2122187263}"
6}

示例二

1{
2  "id": "I9/Ew8GJD",
3  "timestamp": "1692255519792306.0",
4  "type": "remote-candidate",
5  "data": "{candidateType: relay, protocol: udp, relatedAddress: 192.168.1.101, address: 192.168.1.101, transportId: T01, port: 61619, usernameFragment: HouS, isRemote: true, ip: 192.168.1.101, relatedPort: 62281, foundation: 27902767, priority: 41885695}"
6}

解释

这段 WebRTC Stats JSON 描述了一个远程候选者(Remote Candidate)的相关统计信息,包括与候选者属性、地址、协议等相关的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “remote-candidate”,表示这是有关远程候选者的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 值为 “{candidateType: host, protocol: udp, address: fec0::681b:d9ff:fe51:bed9, transportId: T01, port: 60295, usernameFragment: HouS, isRemote: true, ip: fec0::681b:d9ff:fe51:bed9, foundation: 3392773507, priority: 2122187263}"。
    • candidateType 表示候选者类型,这里是 “host”。
    • protocol 表示协议,这里是 “udp”。
    • address 表示地址,这里是一个 IPv6 地址。
    • relatedAddress 表示关联地址,这里是一个 IPv4 地址。
    • transportId 表示传输 ID。
    • port 表示端口号。
    • usernameFragment 表示用户名片段。
    • isRemote 表示是否为远程候选者。
    • ip 表示 IP 地址。
    • relatedPort 表示关联端口号。
    • foundation 表示基础。
    • priority 表示优先级。

local-candidate

示例一

1{
2  "id": "I5Sr38xhn",
3  "timestamp": "1692255519792306.0",
4  "type": "local-candidate",
5  "data": "{candidateType: host, address: 127.0.0.1, transportId: T01, isRemote: false, ip: 127.0.0.1, networkAdapterType: loopback, foundation: 3267603578, priority: 1518149375, tcpType: passive, protocol: tcp, port: 57161, usernameFragment: X1NU, vpn: false, networkType: unknown}"
6}

示例二

1{
2  "id": "IhoCkMQlZ",
3  "timestamp": "1692255519792306.0",
4  "type": "local-candidate",
5  "data": "{candidateType: relay, address: 192.168.1.101, transportId: T01, isRemote: false, ip: 192.168.1.101, networkAdapterType: ethernet, foundation: 2723958935, priority: 41885695, url: turn:192.168.1.101:19302?transport=udp, protocol: udp, relayProtocol: udp, relatedAddress: 192.168.1.102, port: 52599, usernameFragment: X1NU, vpn: false, relatedPort: 54922, networkType: ethernet}"
6}

解释

这段 WebRTC Stats JSON 描述了一个本地候选者(Local Candidate)的相关统计信息,包括与候选者属性、地址、协议等相关的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “local-candidate”,表示这是有关本地候选者的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 值为 “{candidateType: host, address: 127.0.0.1, transportId: T01, isRemote: false, ip: 127.0.0.1, networkAdapterType: loopback, foundation: 3267603578, priority: 1518149375, tcpType: passive, protocol: tcp, port: 57161, usernameFragment: X1NU, vpn: false, networkType: unknown}"。
    • candidateType 表示候选者类型,这里是 “host”。
    • address 表示地址,这里是一个 IPv4 地址。
    • transportId 表示传输 ID。
    • isRemote 表示是否为远程候选者。
    • ip 表示 IP 地址。
    • networkAdapterType 表示网络适配器类型,这里是 “loopback”。(ethernet、loopback 等)
    • foundation 表示基础。
    • priority 表示优先级。
    • url 表示 URL,这里是一个 TURN 服务器的 URL。
    • tcpType 表示 TCP 类型,这里是 “passive”。(仅协议为 tcp 时存在)
    • protocol 表示协议,这里是 “tcp”。
    • relayProtocol 表示中继协议,这里是 “udp”。
    • relatedAddress 表示关联地址,这里是一个 IPv4 地址。
    • port 表示端口号。
    • usernameFragment 表示用户名片段。
    • vpn 表示是否为 VPN 连接。
    • relatedPort 表示关联端口号。
    • networkType 表示网络类型,这里是 “unknown”。

inbound-rtp

示例

1{
2  "id": "IT01A935779291",
3  "timestamp": "1692255519792306.0",
4  "type": "inbound-rtp",
5  "data": "{totalAudioEnergy: 7.657708458531581e-7, lastPacketReceivedTimestamp: 1692255519791.0, transportId: T01, relativePacketArrivalDelay: 16.37, jitterBufferFlushes: 2, mid: 0, audioLevel: 0.00027466658528397473, delayedPacketOutageSamples: 1920, packetsLost: 0, totalSamplesReceived: 708960, concealmentEvents: 1, totalInterruptionDuration: 0.0, removedSamplesForAcceleration: 3452, jitterBufferMinimumDelay: 41433.6, kind: audio, trackId: DEPRECATED_TI3, jitterBufferDelay: 44131.2, interruptionCount: 0, ssrc: 935779291, concealedSamples: 18720, mediaType: audio, jitterBufferTargetDelay: 41587.2, trackIdentifier: c7a9c1d5-f05a-46f4-a39d-1a5c363fcaa8, totalSamplesDuration: 14.76999999999973, remoteId: ROA935779291, headerBytesReceived: 20744, insertedSamplesForDeceleration: 840, packetsDiscarded: 0, fecPacketsReceived: 0, jitterBufferEmittedCount: 693120, codecId: CIT01_111_minptime=10;useinbandfec=1, bytesReceived: 27369, jitter: 0.006, packetsReceived:"
6}

解释

这段 WebRTC Stats JSON 描述了一个入站 RTP(Real-Time Transport Protocol)流的相关统计信息,包括有关音频数据的接收情况、抖动、丢包等等。

包含了以下字段: 当然,我会一一为您解释每个字段的含义:

  1. type:统计信息的类型。

    • 值为 “inbound-rtp”,表示这是有关入站 RTP 流的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与入站 RTP 流的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • totalAudioEnergy:接收到的音频数据的总能量。
    • 只存在于音频
  • lastPacketReceivedTimestamp:接收到最后一个数据包的时间戳
  • transportId:传输 ID
  • relativePacketArrivalDelay:相对包到达延迟
  • jitterBufferFlushes:抖动缓冲刷新次数
  • mid:媒体标识符。
  • audioLevel:音频级别
    • 值位于 0 和 1 之间
    • 0 代表静音,1 代表 0 dBov,0.5 表示声压级从 0 dBov 开始大约 6 dBSPL 变化。
  • delayedPacketOutageSamples:延迟数据包的中断样本数
  • packetsLost丢失的数据包数量
  • totalSamplesReceived总接收的样本数
  • concealmentEvents数据包遮挡事件数
  • totalInterruptionDuration:中断总时长
  • removedSamplesForAcceleration:加速移除的样本数
  • jitterBufferMinimumDelay:缓冲区最小延迟
  • kind:媒体类型
  • trackId:轨道 ID
  • jitterBufferDelay:缓冲区延迟
  • interruptionCount:中断次数
  • ssrc:同步源标识符
  • concealedSamples遮挡的样本数
    • 只存在于音频
    • 一个隐藏的采样是指用本地合成的音频采样来替换收到的音频采样进行回放。它所隐藏的是丢失的语音数据包(度量指标为 packetsLost)、来得太迟的语音数据包(度量指标为packetsDiscarded)**,目的是尽量使得听者感知不到有丢包的情况。
  • mediaType:媒体类型
  • jitterBufferTargetDelay:缓冲区目标延迟
  • trackIdentifier:轨道标识符
  • totalSamplesDuration:总样本时长
  • remoteId:远程 ID
  • headerBytesReceived:接收到的头部字节数
  • insertedSamplesForDeceleration:减速插入的样本数
  • packetsDiscarded被丢弃的数据包数
  • fecPacketsReceived:接收到的 FEC 数据包数
  • jitterBufferEmittedCount:缓冲区发射(音频样本或视频帧)计数
  • codecId:编解码器 ID
  • bytesReceived接收到的字节数
  • jitter抖动
    • 此 SSRC 的数据包抖动以秒为单位测量。
  • packetsReceived接收到的数据包数

TODO: silentConcealedSamples 指以静音包(slient)作为隐藏的(concealed)的音频采样的总个数。静音包以静音或者舒适噪音进行播放,silentConcealedSamples 是 concealedSamples 的子集

TODO: JitterBufferDelay 单位为秒,将收到的 RTP 数据包暂存一下,等一会儿再将缓冲区的 RTP 包重新组合成帧或者重新排序并平滑播放。在音频的情况下,多个样本属于同一个 RTP 数据包,因此它们将具有相同的摄取时间戳,但不同的抖动缓冲区发出时间戳。在视频的情况下,帧可能是通过多个 RTP 数据包接收的,因此收取时间戳是进入抖动缓冲区的最早数据包,发出时间戳是整个帧退出抖动缓冲区的时间。该指标在样本或帧退出时增加,增加的值为在缓冲区中完成它们的时间,同时也会增加 jitterBufferEmittedCount。

FEC: 一种前向性纠错技术,发送方将要发送的数据加上一定的冗余纠错码一起发送,接收方则根据纠错码对接收到的数据进行差错检测,如发现差错,则由接收方进行纠错。特点是使用纠错码,单信道通信,发送方无需设置缓存。

ARQ: 一种按需重传的机制,发送者通过接受者的反馈得知有报文在传输过程中有丢失,就重传该报文。

outbound-rtp

示例

1{
2  "id": "OT01A281019965",
3  "timestamp": "1692255519792306.0",
4  "type": "outbound-rtp",
5  "data": "{headerBytesSent: 20716, transportId: T01, retransmittedPacketsSent: 0, kind: audio, trackId: DEPRECATED_TO3, targetBitrate: 32000.0, ssrc: 281019965, mid: 0, nackCount: 0, active: true, mediaType: audio, totalPacketSendDelay: 0.000289, bytesSent: 58835, mediaSourceId: SA3, remoteId: RIA281019965, codecId: COT01_111_minptime=10;useinbandfec=1, packetsSent: 730, retransmittedBytesSent: 0}"
6}

解释

这段 WebRTC Stats JSON 描述了一个出站 RTP(Real-Time Transport Protocol)流的相关统计信息,涵盖了数据包发送、重传、目标比特率等方面的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “outbound-rtp”,表示这是有关出站 RTP 流的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与出站 RTP 流的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • headerBytesSent发送的头部字节数。
  • transportId:传输 ID。
  • retransmittedPacketsSent重传的数据包数。
  • kind:媒体类型,这里是音频。
  • trackId:轨道 ID。
  • targetBitrate目标比特率。
  • ssrc:同步源标识符。
  • mid:媒体标识符。
  • nackCountNACK(Negative Acknowledgment)次数。
  • active:是否活跃。
  • mediaType:媒体类型,这里是音频。
  • totalPacketSendDelay总数据包发送延迟。
  • bytesSent发送的字节数。
  • mediaSourceId:媒体源 ID。
  • remoteId:远程 ID。
  • codecId:编解码器 ID。
  • packetsSent发送的数据包数。
  • retransmittedBytesSent重传的字节数。

NACK 是接收者发送的显式协议消息,用于报告由于某种原因(例如,通过网络传输的数据接收时有错误或无法读取),必须重新发送特定的预期信号。使用 NACK 消息的协议通常能够报告消息被 NACK 的原因。

peer-connection

示例

1{
2  "id": "P",
3  "timestamp": "1692255519792306.0",
4  "type": "peer-connection",
5  "data": "{dataChannelsOpened: 0, dataChannelsClosed: 0}"
6}

解释

这段 WebRTC Stats JSON 描述了一个对等连接(Peer Connection)的相关统计信息,包括数据通道的打开和关闭情况。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “peer-connection”,表示这是有关对等连接的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与对等连接的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • dataChannelsOpened:已打开的数据通道数量。
  • dataChannelsClosed:已关闭的数据通道数量。

remote-inbound-rtp

示例

1{
2  "id": "RIA281019965",
3  "timestamp": "1692255516294000.0",
4  "type": "remote-inbound-rtp",
5  "data": "{codecId: COT01_111_minptime=10;useinbandfec=1, jitter: 0.0040625, transportId: T01, kind: audio, ssrc: 281019965, roundTripTime: 0.0038599999999999997, roundTripTimeMeasurements: 3, packetsLost: 0, totalRoundTripTime: 0.010329999999999999, fractionLost: 0.0, localId: OT01A281019965}"
6}

解释

这段 WebRTC Stats JSON 描述了一个远程入站 RTP(Real-Time Transport Protocol)流的相关统计信息,,涵盖了编解码器、抖动、往返时延、丢包率等方面的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “remote-inbound-rtp”,表示这是有关远程入站 RTP 流的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与远程入站 RTP 流的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • codecId:编解码器 ID。
  • jitter:抖动。
  • transportId:传输 ID。
  • kind:媒体类型,这里是音频。
  • ssrc:同步源标识符。
  • roundTripTime往返时延。**
  • roundTripTimeMeasurements往返时延测量次数。**
  • packetsLost丢失的数据包数量。**
  • totalRoundTripTime总往返时延。**
  • fractionLost丢包率。**
  • localId:本地出站 RTP 流的 ID,即对应的本地出站 RTP 流。

remote-outbound-rtp

示例

1{
2  "id": "ROA935779291",
3  "timestamp": "1692255518535000.0",
4  "type": "remote-outbound-rtp",
5  "data": "{codecId: CIT01_111_minptime=10;useinbandfec=1, transportId: T01, kind: audio, ssrc: 935779291, roundTripTimeMeasurements: 0, packetsSent: 668, totalRoundTripTime: 0.0, bytesSent: 24998, remoteTimestamp: 1692255522143.0, localId: IT01A935779291, reportsSent: 3}"
6}

解释

这段 WebRTC Stats JSON 描述了一个远程出站 RTP(Real-Time Transport Protocol)流的相关统计信息,涵盖了编解码器、数据包发送、往返时延、发送的字节数等方面的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “remote-outbound-rtp”,表示这是有关远程出站 RTP 流的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与远程出站 RTP 流的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • codecId:编解码器 ID。
  • transportId:传输 ID。
  • kind:媒体类型,这里是音频。
  • ssrc:同步源标识符。
  • roundTripTimeMeasurements往返时延测量次数。**
  • packetsSent发送的数据包数。**
  • totalRoundTripTime总往返时延。**
  • bytesSent发送的字节数。**
  • remoteTimestamp:远程时间戳。
  • localId:本地入站 RTP 流的 ID,即对应的本地入站 RTP 流。
  • reportsSent发送的报告数。**

media-source

示例

1{
2  "id": "SA3",
3  "timestamp": "1692255519792306.0",
4  "type": "media-source",
5  "data": "{totalAudioEnergy: 2.7587911073167186, kind: audio, audioLevel: 0.391674550614948, trackIdentifier: 40293309-b8b5-4aac-8fd8-a10f39cbceef, totalSamplesDuration: 14.489999999999736}"
6}

解释

这段 WebRTC Stats JSON 描述了一个媒体源(Media Source)的相关统计信息,涵盖了音频能量、音频级别、轨道标识符等方面的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “media-source”,表示这是有关媒体源的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与媒体源的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • totalAudioEnergy:总音频能量。
  • kind:媒体类型,这里是音频。
  • audioLevel:音频级别。
  • trackIdentifier:轨道标识符。
  • totalSamplesDuration:总样本时长。

transport

示例

1{
2  "id": "T01",
3  "timestamp": "1692255519792306.0",
4  "type": "transport",
5  "data": "{dtlsRole: server, localCertificateId: CF0C:53:2D:A6:44:98:90:61:4D:96:0F:A7:02:32:40:00:65:CD:2D:35:FD:E9:15:06:7F:17:23:D1:42:0E:01:89, iceState: connected, tlsVersion: FEFD, bytesSent: 97610, dtlsCipher: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, srtpCipher: AES_CM_128_HMAC_SHA1_80, remoteCertificateId: CFE2:B6:48:A6:87:62:DF:2A:59:89:AE:C0:D6:70:E1:CC:82:2F:59:1C:A4:64:65:A2:C4:38:0D:44:B3:57:61:EE, bytesReceived: 65901, dtlsState: connected, iceLocalUsernameFragment: X1NU, packetsReceived: 968, iceRole: controlling, packetsSent: 962, selectedCandidatePairChanges: 1, selectedCandidatePairId: CP9MSAXBWg_aSbN5wt9}"
6}

解释

这段 WebRTC Stats JSON 描述了一个传输(Transport)的相关统计信息,涵盖了加密套件、ICE 状态、数据包发送接收等方面的数据。

包含了以下字段:

  1. type:统计信息的类型。

    • 值为 “transport”,表示这是有关传输的统计信息。
  2. data:具体的统计数据,以字符串形式表示,通常是一个 JSON 格式的数据。

    • 这里包含了一系列与传输的各种统计信息有关的数据,下面会详细解释每个字段。

具体的统计数据:

  • dtlsRole:DTLS 角色,这里是服务器。
  • localCertificateId:本地证书的 ID。
  • iceState:ICE(Interactive Connectivity Establishment)状态,这里是已连接。
  • tlsVersion:TLS 版本。
  • bytesSent:发送的字节数。
  • dtlsCipher:DTLS 加密套件。
  • srtpCipher:SRTP(Secure Real-time Transport Protocol)加密套件。
  • remoteCertificateId:远程证书的 ID。
  • bytesReceived:接收的字节数。
  • dtlsState:DTLS 状态,这里是已连接。
  • iceLocalUsernameFragment:ICE 本地用户名片段。
  • packetsReceived:接收的数据包数。
  • iceRole:ICE 角色,这里是控制角色。
  • packetsSent:发送的数据包数。
  • selectedCandidatePairChanges:选定候选对变化次数。
  • selectedCandidatePairId:选定的候选对的 ID。

参考资料