在对质量要求高的场景下,进行通话前检测可以帮助提前识别并排查问题,保证实时通信体验。通话前检测通常可以从如下两个角度开展:
Agora SDK 提供了完备的网络探测及设备检测接口,帮助你实现如上功能,保证用户的使用体验。本文介绍如何使用相关 API 实现上述功能。
Agora 在 GitHub 上提供已实现通话前检测功能的开源示例项目。你可以下载体验或查看其中的源代码。
从 v2.4.0 起,Agora RTC Native SDK 提供了一个 startLastmileProbeTest
方法,支持用户在加入频道前进行网络质量探测,然后通过回调将当前网络质量的相关数据,包括往返时延、上下行丢包率、上下行网络带宽等返回给 app。
开始前请确保你已在项目中实现了基本的音视频通信或直播功能。详见实现音视频通话或实现互动直播。
startLastmileProbeTest
进行网络质量探测。调用该方法时,你需要指定期望的最大上下行码率。onLastmileQuality
:约 2 秒内返回。该回调通过打分反馈上下行网络质量,更贴近主观感受。onLastmileProbeResult
:约 30 秒内返回。该回调通过客观数据反馈上下行网络质量,更客观。stopLastmileProbeTest
停止通话前网络质量探测。各 API 的调用时序如下图所示:
参考下文示例代码在你的项目中进行通话前网络质量探测。
// 配置一个 LastmileProbeConfig 实例
LastmileProbeConfig config = new LastmileProbeConfig(){};
// 确认探测上行网络质量
config.probeUplink = true;
// 确认探测下行网络质量
config.probeDownlink = true;
// 期望的最高发送码率,单位为 bps,范围为 [100000,5000000]
config.expectedUplinkBitrate = 100000;
// 期望的最高接收码率,单位为 bps,范围为 [100000,5000000]
config.expectedDownlinkBitrate = 100000;
// 加入频道前开始 Last-mile 网络探测
rtcEngine.startLastmileProbeTest(config);
// 位于全局 IRtcEngineEventHandler 中
// 开始 Last-mile 网络探测后,约 2 秒后会发生该回调
public void onLastmileQuality(int quality)
// 位于全局 IRtcEngineEventHandler 中
// 开始 Last-mile 网络探测后,约 30 秒后会发生该回调
public void onLastmileProbeResult(LastmileProbeResult) {
// (1)可以选择在回调内部结束测试。在测试结束前,Agora 建议不要调用其他 API 方法
rtcEngine.stopLastmileProbeTest();
}
// (2)也可以选择其他时候结束测试。在测试结束前,Agora 建议不要调用其他 API 方法
rtcEngine.stopLastmileProbeTest();
从 v2.4.0 起,Agora RTC Native SDK 通过一个 startEchoTest
方法,支持用户在加入频道前,启动通话测试。该测试的目的是测试系统的音频设备(耳麦、扬声器等)和网络连接是否正常。
startEchoTest
方法。调用该方法时,你需要设置一个 intervalInSeconds
参数,表示获取本次测试结果的间隔时间。该参数单位为秒,取值范围为 [2,10],默认值为 10。startEchoTest
方法后,引导用户先说一段话,如果声音在设置的时间间隔后回放出来,且用户能听到自己刚才说的话,则表示系统音频设备和网络连接都是正常的。stopEchoTest
方法停止语音通话检测,然后你可以调用 joinChannel
加入频道。// 开启回声测试。10 表示 10 秒后播放本次测试录到的声音,获取测试结果
rtcEngine.startEchoTest(10);
// 等待并检查是否可以听到自己的声音回放
// 停止测试
rtcEngine.stopEchoTest();
startLastmileProbeTest
进行通话前网络质量探测时,会消耗一定的网络流量。因此调用方法后,Agora 建议在收到 onLastmileProbeResult
回调之前不要调用其他方法,避免因 API 操作过于频繁导致其他方法无法执行。onLastmileQuality
回调第一次报告的结果有一定概率是 UNKNOWN
, 可通过之后的几次回调获得结果。startEchoTest
。startEchoTest
后必须调用 stopEchoTest
以结束测试,否则不能进行下一次回声测试,也不能加入频道。