webrtc调试工具chrome://webrtc-internals介绍

了解webrtc的开发者都应该知道存在chrome://webrtc-internals这样一个调试工具,在Chome的地址栏中输入chrome://webrtc-internals这个命令就会展示出有webrtc相关功能被启用的网页以及通话过程中产生的统计数据,当我们需要分析一通webrtc通话的音视频质量的时候,这些统计数据就派上了大用场,由于chrome://webrtc-internals并无官方的说明文档,有些数据的描述对于非音视频开发者又不太友好,所以本文简单地对其中的一些重要的统计数据作了说明。目前还未深入了解的数据我用了TBD作为标识,后续了解了算法之后我会补充说明。下图所展示的是音视频发送端的统计数据:

webrtc调试工具chrome://webrtc-internals介绍


自顶而下观察这幅图,我们将这个图分为3个部分来说明:
  1. 第一个部分,也就是绿线的上方(图的顶部)有两个方块,第一个方块展示的是PeerConnection的相关信息,如果有多个PeerConnection的话,那么就会有多个类似的标签页,另外一个方块展示的是GetUserMedia的相关信息,在本文中我们暂时不涉及。
  2. 第二个部分,在图中标示的Time和Event区域(图的上方偏左侧),这个部分主要描述的是PeerConnection建立的流程,相关方法调用的次序以及调用的时间。
  3. 第三个部分,在图中标示的Stats Tables部分(图的右侧以及下半部分),这个部分主要展示的是PeerConnection相关的统计数据,而我们所要说明的就是就是音频以及视频流的统计信息。


所有这些统计数据都来源于Chrome M56版本,可能会与老版本的Chrome存在不一致的地方,如果有些字段的描述不正确,还请指正,我会首先列出发送端的部分描述信息,后续会将接收端的补全。
音频统计数据
aecDivergentFilterFraction:TBD(后续会补全)

audioInputLevel:发送端采集的音频能量大小。

bitsSentPerSecond:每秒发送出去的比特数。

packetsSentPerSecond:每秒发送出去的音频包数。

googEchoCancellationQualityMin:TBD(后续会补全)

googEchoCancellationReturnLoss:TBD(后续会补全)

googEchoCancellationReturnLossEnhancement:TBD(后续会补全)

googResidualEchoLikelihood:Chrome 56中新增的,主要用来标识是否存在回声,范围为0 (没有回声)- 1(有回声),当值大于0.5时表明存在回声。

视频统计数据
bitsSentPerSecond:每秒发送出去的比特数,根据当前网络情况会进行动态调整。

framesEncoded:累计编码出来的视频帧数,没有异常情况的话会一直增长。

packetsLost:发送端从接收端发送过来的RTCP Receiver Report中得到的累积丢包数量,可以和googNacksReceived数据进行对照。

googRtt:Rtt全称为Round-trip time,是发送端从接受端发送过来的RTCP Receiver Report中得到的时间戳通过计算得到的往返时延。

packetsSentPerSecond:Chrome 56中新增的,每秒发送出去的视频包数量。

qpSum:发送端编码出的带有QP值的帧的数量,QP全称为Quantization Parameter。

googAdaptationChanges:发送端因为CPU的负载变化导致的分辨变高或者变低的次数,需要设置googCpuOveruseDetection。

googAvgEncodeMs:发送端平均编码时间,越小越好。

googEncodeUsagePercent:发送端(平均每帧编码时间)/(平均每帧采集时间),反应编码效率。

googFirsReceived:发送端收到的关键帧请求数量,FIR全称为Full Intra Request,一般来说在video conference模式下,有新的参与者进来会发出。

googPlisReceived:发送端收到的关键帧请求数量,PLI全称为Picture Loss Indication,一般来说在解码失败时会发出。

googNacksReceived:发送端收到的重传包请求数量,Nack全称为Negative ACKnowledgement可以和packetsLost数据进行对照。

googFrameHeightSent:发送端发送的分辨率高度,根据当前网络会进行动态调整。

googFrameWidthSent:发送端发送的分辨率宽度,根据当前网络会进行动态调整。

googFrameRateInput:发送端设置的初始帧率。

googFrameRateSent:发送端实际发送的帧率,根据当前网络会进行动态调整。