【经验分享】 网络质量检测

               作者:  王彩兴                  指导:  尹航

网络的检测:

1. 开发者自己如何在通话过程中监控用户的网络情况?

在加入频道前调用接口enableLastmileTest/onLastmileQuality能比较准确的评估网络情况。 此外,还比较关心的一点是,出现网络问题的时候,怎么区分是客户端自己的网络问题,还是我们服务器接入问题?

onNetworkQuality()可以反映每个用户的网络上下行last mile质量报告回调。该回调描述每个用户/主播在通话中的 last mile 网络状态,其中 last mile 是指设备到 Agora 边缘服务器的网络状态。该回调每 2 秒触发一次。如果远端有多个用户/主播,该回调每 2 秒会被触发多次。

2. 开发者自己如何在通话过程中监控语音/视频质量?

这个回调onRemoteAudioStats(quality/delay/lost)准确么?Quality是如何计算出来的?Delay具体指的是从哪里到哪里的Delay? Lost是从哪里到哪里的Lost?

远端用户发送的音频流质量Quality:

0:质量未知

1:质量极好

2:用户主观感觉和极好差不多 ,但码率可能略低于极好

3:用户主观感受有瑕疵,但不影响沟通

4:勉强能沟通但不顺畅

5:网络质量非常差,基本不能沟通

6:网络连接已断开,完全无法沟通

delay 和 lost 指的是 local audio 接收的质量, 有可能是 local 下行也可能是 peer 上行引入的.

说明:

  1. 网络质量的评估是综合了jitter和延时,丢包率等信息给出的。

  2. onAudioQuality 是评估音频接收质量的,delay和lost是准的,quality的分级就是简单根据lost。所以基本客户可以使用这个delay和lost自己看音频质量的。

  3. 同样可以参考onLocalVideoStats 和 onRemoteVideoStats来监控本地和远端的视频质量。

  4. 主播上行延迟是 onRtcStats 回调中的 RtcStats::lastmileDelay

主播上行丢包率目前还没有回调给出. 2.4.1版本计划透明出该数据.

目前 onNetworkQuality 的上行网络质量打分, 可以在一定程度上反映主播的上行视频质量, 因为该上行网络质量打分参考了当前视频发送码率, 网络延迟和上行丢包率.

以下为实际网络传输过程中的产生的端到端延迟(毫秒)和丢包(%), 连麦和观众模式都可用:

端到端音频传输延迟: onRemoteAudioTransportStats: delay

端到端音频传输丢包率: onRemoteAudioTransportStats: lost

端到端视频传输延迟: onRemoteVideoTransportStats: delay

端到端视频传输丢包率: onRemoteVideoTransportStats: lost

以下为接近嘴到耳的音频延迟, 连麦和观众模式都可用:

端到端接近嘴到耳延迟: onRemoteAudioStats: networkTransportDelay + jitterBufferDelay

这两个延迟求和的结果接近音频主观嘴到耳延迟, 比嘴到耳延时少了发送端音频采样编码延迟和接收端解码播放延迟.

由于音视频同步, 在音频没有 disable 或 mute 的情况下也可使用该延迟作为视频主观体验延迟.

常见网络相关的问题 FAQ

  1. onLastmileQuality和onNetworkQuality的区别:
    答:

onLastmileQuality是进入频道前检测网络状况的,

onNetworkQuality是可以报告当前网络上下行质量的

网络质量报告回调 (onLastmileQuality)

public void onLastmileQuality(int quality);

报告本地用户的网络质量。当你调用 enableLastmileTest 之后,该回调函数每 2 秒触发一次。

频道内网络质量报告回调 (onNetworkQuality)

public void onNetworkQuality(uid_t uid, int txQuality, int rxQuality)

该回调定期触发,向 APP 报告频道内用户当前的上行、下行网络质量。

  1. onNetworkQuality你们是怎么判断质量的,难道不是依据数据么?

答: 我们没有回调测实时的上下行网络速率。

如果需要知道网络上下行质量就用onNetworkQuality。

如果需要当前通话的统计回调(比如发送字节,发送码率,音频码率等)就用onRtcStats()这个回调。

这个接口 的上行网络质量打分, 可以在一定程度上反映主播的上行视频质量, 因为该上行网络质量打分参考了当前视频发送码率, 网络延迟和上行丢包率。

所以,如果你一定要看一下当前网络上下行质量,可以在通话中既调onNetWorkQuality来反应网络质量报告,也可以调onRtcStats()来统计当前通话的回调来显示具体的通话中的统计值(比如发送字节,发送码率,音频码率等)

  1. 返回的qualityBAD=4、qualityVBAD=5、qualityDOWN=6,,这些level,对应的网速是多少呢?

答: 这些level是通过onNetworkQuality接口返回的吧,上行是通过发送码率,丢包率,延迟和网络抖动计算,下行是通过丢包率,延迟和网络抖动计算。

首先,网络质量问题,尤其是无线信号lastmile的质量问题对用户通常是不可见的。你并不能从空气中的信号看出来质量好不好,wifi和4G/3G/2G的信号强度也常常不能代表网络质量的好坏,甚至经常误导你。比如非常典型的,你离WiFi路由器很近,所以信号强度很好,可是你的WiFi路由器可能会是用户太多过载的,或者是其他用户消耗了太多带宽从而拥塞的。你的4G基站即便信号强度很好,也偶尔会过载,比如大型活动现场,或者是被干扰的或是拥塞的。所以很多时候,用户认为他的网络质量是好的,是基于粗略的经验性判断。

这个接口 的上行网络质量打分, 可以在一定程度上反映主播的上行视频质量, 因为该上行网络质量打分参考了当前视频发送码率, 网络延迟和上行丢包率。跟直观的网络强不强,网速怎么样不是必然的直接等同的。

声网提供的网络检测的工具及说明:

Mac: http://agora-download.oss-cn-beijing.aliyuncs.com/sdk%2Frelease%2Fagora-network-tools-1.0.3-mac.zip

Windows: http://agora-download.oss-cn-beijing.aliyuncs.com/sdk%2Frelease%2Fagora-network-tools-1.0.3.2-win.zip

(Windows须额外安装winpcap:https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe。 如果在windows上运行失败,请先检查安装Visual C++ Redistributable Packages for Visual Studio 2013)

2赞