RtcStatsReport比较常用的type
- googCertificate
- googCertificate
- googCandidatePare
- localCandidate
- remoteCandidate
- ssrc
- googTrack
- googLibjingleSession
- VideoBWE
ssrc
每一个发送或接受的音频或视频Track都有一个对应的ssrc报告,其中包含有:
- mediaType 媒体类型video/audio
- packetsSent 累计发送的数据包数
- googJitterReceived 接收到多少抖动
- id 后缀用来区分是发送或接受的ssrc,发送: _send,接收: _recv
- googTrackId 音频或视频TrackId
- googRtt 全称为:Round-trip time,表示的是请求的往返时间,是发送端从接收端发送过来的RTCP中得到时间戳通过计算得到往返时延
- transportId 指向传输RTP流的部分,通常于音频或视频流的transportId是一样的
- googCodecName 编码器的名称,音频一般是opus,视频一般为:VP8、VP9、H264
- codecImplementationName 具体实现编码器的名称,一般MediaCodec等
- audioInputLevel 发送端采集的音频能量大小
- audioOutputLevel 扬声器播放的音量大小
- bytesSent 累计发送数据的字节数
- framesEncoded 累计编码出的视频帧数量
- packetsLost 累计丢包数量,对于发送端从接收端发送过来的RTCP Receiver Report中得到累计丢包数量,可以和googNacksReceived数据进行对照,对于接收端来说,丢包数量是本地测量出来的。
- googNacksReceived 发送端收到的重传包请求(nack)数量,可以和packetsLost进行对照
- qpSum 全称为:Quantization Parameter,发送端编码出的带有量化参数(QP)值的帧的数量,一般来说,这个数字越高,视频轨道压缩的越严重,需要注意,QP值可能因编码器不同而不同,所以此值仅在与同一编码器进行比较时可能有用
- googAdaptationChanges 发送端因为CPU的负载变化导致的分辨率变高或变低的次数,需要设置googCpuOveruseDetection
- googAvgEncodeMs 发送端平均编码时间,值越小越好
- googBandwidthLimitedResolution 是否因为宽带受限而降低发送的视频分辨率
- googCpuLimitedResolution 是否因为CPU不足而降低发送的视频分辨率
- googEncodeUsagePercent 发送端(平均每帧编码时间)/(平均每帧采集时间),主要是用来反映编码效率
- googFirsReceived 发送端收到的关键帧请求数量,Fir全称为:Full Intra Request,一般来说在video conference模式下,有新的参与者进来会发出
- *googPlisReceived 发送端收到的古建筑请求数量, pli全称为:Picture Loss Indication,一般来说接码失败时会发出
- googFrameHeightSent 发送端发送的视频分辨率高度,根据当前网络会进行动态调整
- googFrameWidthSent 发送端发送的视频分辨率宽度,根据当前网络会动态调整
- googFrameRateInput 发送端设置的初始帧率
- googFrameRateSent 发送端实际发送的帧率,根据当前网络会动态调整
- googFrameHeightReceived 接收到的视频分辨率高度
- googFrameWidthReceived 接收到的视频分辨率宽度
{
"ptid": "32093-24769",
"reportStats-Thread": "id: ssrc_2694901265_recv, type: ssrc, timestamp: 1.557741902171555E12, values: [bytesReceived: 0], [codecImplementationName: MediaCodec], [framesDecoded: 0], [mediaType: video], [packetsLost: 0], [packetsReceived: 0], [ssrc: 2694901265], [transportId: Channel-audio-1], [googCaptureStartNtpTimeMs: 0], [googCodecName: ], [googCurrentDelayMs: 0], [googDecodeMs: 0], [googFirsSent: 0], [googFrameHeightReceived: 0], [googFrameRateDecoded: 0], [googFrameRateOutput: 0], [googFrameRateReceived: 0], [googFrameWidthReceived: 0], [googJitterBufferMs: 0], [googMaxDecodeMs: 0], [googMinPlayoutDelayMs: 0], [googNacksSent: 0], [googPlisSent: 0], [googRenderDelayMs: 10], [googTargetDelayMs: 0], [googTrackId: 18811598131f9451106c87938ee_video], "
}
{
"ptid": "32093-24769",
"reportStats-Thread": "id: ssrc_1146199825_send, type: ssrc, timestamp: 1.557741902171555E12, values: [audioInputLevel: 13], [bytesSent: 21912], [mediaType: audio], [packetsLost: 49], [packetsSent: 240], [ssrc: 1146199825], [transportId: Channel-audio-1], [googCodecName: opus], [googEchoCancellationReturnLoss: -100], [googEchoCancellationReturnLossEnhancement: -100], [googJitterReceived: 59], [googResidualEchoLikelihood: 0.00511946], [googResidualEchoLikelihoodRecentMax: 0.00511946], [googRtt: 10], [googTrackId: 13552463341d2db1797a13993cd_audio], [googTypingNoiseState: false], "
}
VideoBwe
包含有关视频宽带相关信息,一般在分析视频质量不好的时候,可以先查看这个报告中的发送和接收的可用宽带信息
- googActualEncBitrate 视频编码器实际输出的码率,一般和目标码率是匹配的
- googAvailableReceiveBandwidth 接收视频数据可用的宽带
- googAvailableSendBandwidth 发送视频数据可用的宽带
- googBucketDelay Google为处理大数据速率的策略表示,一般是很小的数值
- googRetransmitBitrate 如果RTX被使用的话,表示重传的码率,此数据通常代表丢包率
- googTargetEncBitrate 视频编码的目标码率
- googTansmitBitrate 实际发送传输的码率,如果此数值与googActualEncBitrate有较大的出入,可能是受fec(前向纠错)影响
{
"ptid": "32093-24769",
"reportStats-Thread": "id: bweforvideo, type: VideoBwe, timestamp: 1.557741902171555E12, values: [googActualEncBitrate: 523079], [googAvailableReceiveBandwidth: 0], [googAvailableSendBandwidth: 1000000], [googBucketDelay: 17], [googRetransmitBitrate: 7034896], [googTargetEncBitrate: 500000], [googTransmitBitrate: 1124147], "
}
localCandidate和remoteCandidate
主要描述本地Candidate和远端Candidate,主要包括:ip地址、端口号、以及候选项类型、网络类型、传输协议类型等,详细描述可以参考具体规范描述
- candidateType: ICE候选项类型可分为:
- host 客户端从本机网络接口上获取的本机地址
- srflx 通过STUN服务器反射后获取的Server-reflexive地址(内网地址被NAT映射后的地址)
- prflx 在TUN Server上为客户端分配的中继地址
- relay 中继地址
{
"ptid": "32093-24769",
"reportStats-Thread": "id: Cand-7vpmljXh, type: localcandidate, timestamp: 1.557741900901133E12, values: [ipAddress: 111.200.55.10], [networkType: wlan], [portNumber: 26072], [priority: 1853824767], [transport: udp], [candidateType: peerreflexive], "
}
{
"ptid": "32093-24769",
"reportStats-Thread": "id: Cand-WoA+01gx, type: remotecandidate, timestamp: 1.557741900901133E12, values: [ipAddress: 39.97.130.104], [portNumber: 50002], [priority: 1], [transport: udp], [candidateType: host], "
}
googComponent
googComponent相当于认证数据和连接之间的关系,包含了一个指向当前活跃的Candidate和有关用于DTLS和SRTP加密的相关信息
{
"ptid": "32093-24769",
"reportStats-Thread": "id: Channel-audio-1, type: googComponent, timestamp: 1.557741903177303E12, values: [selectedCandidatePairId: Conn-audio-1-0], [googComponent: 1], "
}
googCandidatePair
googCandidatePair是对一对ICE候选项的描述,RTP通道相关信息,包括以下信息
- bytesReceived 接收的字节数
- bytesReceived 发送的字节数
- packetsSent 发送的数据包数
- 注意 以上的发送和接收的数据包以及字节数总数都是rtp的数据
- requestsSent、responsesSent、requestsReceived、responsesReceived STUN请求数和应答数,具体查看官方文档
- googActiveConnection 判断当前的连接是否活跃, 对等的规范可以在这里找到
- googRtt 是最近的STUN请求的往返时间
- googLocalAddress 本地的候选地址
- *googRemoteAddress ** 远端的候选地址
- googTransportType 传输通道类型,一般为UDP
{
"ptid": "32093-24769",
"reportStats-Thread": "id: Conn-audio-1-0, type: googCandidatePair, timestamp: 1.557741904181686E12, values: [googActiveConnection: true], [bytesReceived: 41505], [bytesSent: 785302], [packetsSent: 1180], [googReadable: true], [requestsSent: 6], [consentRequestsSent: 1], [responsesSent: 0], [requestsReceived: 0], [responsesReceived: 6], [googChannelId: Channel-audio-1], [googLocalAddress: 111.200.55.10:26072], [localCandidateId: Cand-7vpmljXh], [googLocalCandidateType: prflx], [googRemoteAddress: 39.97.130.104:50002], [remoteCandidateId: Cand-WoA+01gx], [googRemoteCandidateType: local], [googRtt: 539], [packetsDiscardedOnSend: 0], [googTransportType: udp], [googWritable: true], "
}
googTrack与googLibjingleSession
这两种Type没有包含什么信息,只是包含了TrackId等信息.
{
"ptid": "32093-24769",
"reportStats-Thread": "id: googTrack_13552463341d2db1797a13993cd_audio, type: googTrack, timestamp: 0.0, values: [googTrackId: googTrack_13552463341d2db1797a13993cd_audio], "
}
{
"ptid": "32093-24769",
"reportStats-Thread": "id: googLibjingleSession_3733336158732609836, type: googLibjingleSession, timestamp: 1.557741904181686E12, values: [googInitiator: true], "
}
googCertificate
googCertificate 包含了一些有关本端和对端所使用的DTL证书信息,以及指纹和哈希算法,可以在RTCCertificateStats字典中查询详细说明.