1. RTP 相关统计
1.1 inbound-rtp (接收端统计)
接收到的 RTP 流统计信息,包含以下关键指标:
bytesReceived: 接收到的字节总数packetsReceived: 接收到的数据包总数packetsLost: 丢失的数据包数量jitter: 数据包到达时间的抖动(毫秒)framesDecoded: 已解码的视频帧数frameWidth: 视频帧宽度frameHeight: 视频帧高度framesPerSecond: 每秒解码的帧数kind: 媒体类型(“video” 或 “audio”)
1.2 outbound-rtp (发送端统计)
发送的 RTP 流统计信息,包含以下关键指标:
bytesSent: 发送的字节总数packetsSent: 发送的数据包总数retransmittedPacketsSent: 重传的数据包数量retransmittedBytesSent: 重传的字节总数kind: 媒体类型(“video” 或 “audio”)
1.3 remote-inbound-rtp (对端接收统计)
对端接收到的 RTP 流统计信息,包含:
packetsLost: 对端报告的丢包数jitter: 对端报告的抖动roundTripTime: 往返时间(RTT)totalRoundTripTime: 总往返时间
1.4 remote-outbound-rtp (对端发送统计)
对端发送的 RTP 流统计信息,包含:
packetsSent: 对端发送的数据包数bytesSent: 对端发送的字节数timestamp: 时间戳
2. 媒体轨道相关统计
2.1 track (媒体轨道统计)
媒体轨道的统计信息,包含:
frameWidth: 视频帧宽度frameHeight: 视频帧高度framesPerSecond: 每秒帧数framesSent: 发送的帧数framesReceived: 接收的帧数framesDecoded: 解码的帧数framesDropped: 丢弃的帧数
2.2 media-source (媒体源统计)
媒体源的统计信息,包含:
width: 源视频宽度height: 源视频高度framesPerSecond: 源视频帧率frames: 总帧数
2.3 media-playout (媒体播放统计)
媒体播放的统计信息,包含:
framesDecoded: 解码的帧数framesDropped: 丢弃的帧数framesCorrupted: 损坏的帧数totalFramesDuration: 总帧持续时间
3. 编解码器相关统计
3.1 codec (编解码器统计)
编解码器的统计信息,包含:
payloadType: 负载类型mimeType: MIME 类型clockRate: 时钟频率channels: 通道数sdpFmtpLine: SDP 格式参数
4. 传输相关统计
4.1 transport (传输层统计)
传输层的统计信息,包含:
bytesReceived: 接收的字节数bytesSent: 发送的字节数packetsReceived: 接收的数据包数packetsSent: 发送的数据包数selectedCandidatePairId: 选中的候选者对 ID
4.2 candidate-pair (候选者对统计)
ICE 候选者对的统计信息,包含:
state: 连接状态priority: 优先级nominated: 是否被提名writable: 是否可写readable: 是否可读currentRoundTripTime: 当前往返时间availableOutgoingBitrate: 可用输出比特率requestsReceived: 接收到的请求数requestsSent: 发送的请求数responsesReceived: 接收到的响应数responsesSent: 发送的响应数
4.3 local-candidate (本地候选者统计)
本地 ICE 候选者的统计信息,包含:
ip: IP 地址port: 端口号protocol: 协议类型candidateType: 候选者类型priority: 优先级
4.4 remote-candidate (远程候选者统计)
远程 ICE 候选者的统计信息,包含:
ip: IP 地址port: 端口号protocol: 协议类型candidateType: 候选者类型
5. 数据通道相关统计
5.1 data-channel (数据通道统计)
数据通道的统计信息,包含:
state: 通道状态messagesSent: 发送的消息数bytesSent: 发送的字节数messagesReceived: 接收的消息数bytesReceived: 接收的字节数
使用示例
// 获取所有统计信息
pc.getStats(null).then(stats => {stats.forEach(report => {switch(report.type) {case 'inbound-rtp':console.log('接收统计:', {bitrate: report.bytesReceived,packetsLost: report.packetsLost,jitter: report.jitter});break;case 'outbound-rtp':console.log('发送统计:', {bitrate: report.bytesSent,packetsSent: report.packetsSent});break;case 'candidate-pair':if (report.state === 'succeeded') {console.log('网络质量:', {rtt: report.currentRoundTripTime,bitrate: report.availableOutgoingBitrate});}break;}});
});
注意事项
- 统计信息的可用性取决于浏览器实现
- 某些统计信息可能只在特定条件下可用
- 统计信息的更新频率可能因浏览器而异
- 建议定期获取统计信息以监控连接质量
- 某些统计信息可能需要权限才能访问
