Sensing Network Quality
本文档主要介绍如何感知当前网络的质量。
通话过程中检测网络质量
TRTC 提供了一个叫做 onNetworkQuality 的回调事件,它会每隔两秒钟一次向您汇报当前的网络质量,其参数包括 localQuality 和 remoteQuality 两个部分:
localQuality :代表您当前的网络质量,分为 6 个等级,分别是 Excellent、Good、Poor、Bad、VeryBad 和 Down。
remoteQuality:代表远端用户的网络质量,这是一个素组,素组中的每个元素代表一个远端用户的网络质量。
Quality | 名称 | 说明 |
0 | Unknown | 未感知到 |
1 | Excellent | 当前网络非常好 |
2 | Good | 当前网络比较好 |
3 | Poor | 当前网络一般 |
4 | Bad | 当前网络较差,可能会出现明显的卡顿和通话延迟 |
5 | VeryBad | 当前网络很差,TRTC 只能勉强保持连接,但无法保证通讯质量 |
6 | Down | 当前网络不满足 TRTC 的最低要求,无法进行正常的音视频通话 |
您只需要监听 TRTC 的 onNetworkQuality 并在界面上做相应地提示即可:
// 创建 TRTC 实例const trtcCloud = TRTCCloud.sharedInstance();// 监听 onNetworkQuality 回调并感知当前网络状态的变化const onRtcListener = useCallback((type: TRTCCloudListener, params: any) => {if (type === TRTCCloudListener.onNetworkQuality) {console.log("local user", params.localQuality);params.remoteQuality.forEach((user: any) => {console.log("remote user", "id=" + user.userId + ",quality=" + user.quality);});}}// 注册回调trtcCloud.registerListener(onRtcListener);
通话前检测网络质量
测速的原理

测速的原理是 SDK 向服务器节点发送一批探测包,然后统计回包的质量,并将测速的结果通过回调接口通知出来。
测速的结果将会用于优化 SDK 接下来的服务器选择策略,因此推荐您在用户首次通话前先进行一次测速,这将有助于我们选择最佳的服务器。同时,如果测试结果非常不理想,您可以通过醒目的 UI 提示用户选择更好的网络。
测速的结果(TRTCSpeedTestResult)包含如下几个字段:
字段 | 含义 | 含义说明 |
success | 是否成功 | 本次测试是否成功 |
errMsg | 错误信息 | 带宽测试的详细错误信息 |
ip | 服务器 IP | 测速服务器的 IP |
quality | 网络质量评分 | 通过评估算法测算出的网络质量,loss 越低,rtt 越小,得分也就越高 |
upLostRate | 上行丢包率 | 范围是[0 - 1.0],例如0.3代表每向服务器发送10个数据包,可能有3个会在中途丢失 |
downLostRate | 下行丢包率 | 范围是[0 - 1.0],例如0.2代表从服务器每收取10个数据包,可能有2个会在中途丢失 |
rtt | 网络延时 | 代表 SDK 跟服务器一来一回之间所消耗的时间,这个值越小越好,正常数值在10ms - 100ms 之间 |
availableUpBandwidth | 上行带宽 | 预测的上行带宽,单位为 kbps, -1表示无效值 |
availableDownBandwidth | 下行带宽 | 预测的下行带宽,单位为 kbps, -1表示无效值 |
如何测速
1.通过 TRTCCloud 的
startSpeedTest
功能可以启动测速功能。// 调用 startSpeedTest 开始测速。const trtcCloud = TRTCCloud.sharedInstance();const param: TRTCSpeedTestParams = {expectedDownBandwidth: 10, // 预期的下行带宽(kbps,取值范围: 10 ~ 5000,为 0 时不测试)expectedUpBandwidth: 10, // 预期的上行带宽(kbps,取值范围: 10 ~ 5000,为 0 时不测试)。scene: 1, // 1:延迟测试。2:延迟与带宽测试。3:在线合唱测试。sdkAppId: 0, // 应用标识userId: "", // 用户标识userSig: "", // 用户签名}trtcCloud.startSpeedTest(param);const onRtcListener = useCallback((type: TRTCCloudListener, params: any) => {if (type === TRTCCloudListener.onSpeedTestResult) {console.log('Speed test result:', params);setSpeedTestResult(params);}}
2.测速的结果会通过 onSpeedTestResult 回调函数返回。
// 通过 onSpeedTestResult 回调函数返回结果const trtcCloud = TRTCCloud.sharedInstance();const onRtcListener = useCallback((type: TRTCCloudListener, params: any) => {if (type === TRTCCloudListener.onSpeedTestResult) {console.log('Speed test result:', params);setSpeedTestResult(params);}}trtcCloud.registerListener(onRtcListener);
枚举类型 | 描述 |
availableDownBandwidth | 下行带宽(kbps,-1:无效值)。 |
availableUpBandwidth | 上行带宽(kbps,-1:无效值)。 |
downJitter | 下行数据包抖动(ms),指用户当前网络环境下数据通信的稳定性,该值越小越好,正常数值范围是0ms - 100ms,-1 代表此次测速没有成功测得有效值,一般情况下 WiFi 网络的 Jitter 会比 4G/5G 环境稍大。 |
downLostRate | 下行丢包率,取值范围是 [0 - 1.0],例如 0.2 表示每从服务器收取 10 个数据包可能会在中途丢失 2 个。 |
errMsg | 带宽测试错误信息。 |
ip | 服务器 IP 地址。 |
quality | 内部通过评估算法测算出的网络质量,详情如下: quality = 0: 未定义。 quality = 1: 当前网络非常好。 quality = 2: 当前网络比较好。 quality = 3: 当前网络一般。 quality = 4: 当前网络较差。 quality = 5: 当前网络很差。 quality = 6: 当前网络不满足 TRTC 的最低要求。 |
rtt | 延迟(毫秒),指当前设备到 TRTC 服务器的一次网络往返时间,该值越小越好,正常数值范围是10ms - 100ms。 |
success | 测试是否成功。 |
upJitter | 上行数据包抖动(ms),指用户当前网络环境下数据通信的稳定性,该值越小越好,正常数值范围是0ms - 100ms,-1 代表此次测速没有成功测得有效值,一般情况下 WiFi 网络的 Jitter 会比 4G/5G 环境稍大。 |
upLostRate | 上行丢包率,取值范围是 [0 - 1.0],例如 0.3 表示每向服务器发送 10 个数据包可能会在中途丢失 3 个。 |