在对质量要求高的场景下,进行通话前检测可以帮助提前识别并排查问题,保证实时通信体验。通话前检测通常可以从如下两个角度开展:
声网 SDK 提供了完备的网络探测及设备检测接口,帮助你实现如上功能,保证用户的使用体验。本文介绍如何使用相关 API 实现上述功能。
声网在 GitHub 上提供已实现通话前检测功能的开源示例项目。你可以下载体验或查看其中的源代码。
从 v2.4.0 起,声网 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)可以选择在回调内部结束测试。在测试结束前,声网建议不要调用其他 API 方法
rtcEngine.stopLastmileProbeTest();
}
// (2)也可以选择其他时候结束测试。在测试结束前,声网建议不要调用其他 API 方法
rtcEngine.stopLastmileProbeTest();
从 v2.4.0 起,声网 RTC Native SDK 通过一个 startEchoTest
[2/3] 方法,支持用户在加入频道前启动音频通话回路测试。该测试的目的是测试系统的音频设备(耳麦、扬声器等)和网络连接是否正常。
startEchoTest
[2/3] 方法。调用该方法时,你需要设置一个 intervalInSeconds
参数,表示获取本次测试结果的间隔时间。该参数单位为秒,取值范围为 [2,10],默认值为 10。startEchoTest
[2/3] 方法后,引导用户先说一段话,如果声音在设置的时间间隔后回放出来,且用户能听到自己刚才说的话,则表示系统音频设备和网络连接都是正常的。stopEchoTest
方法停止检测,然后你可以调用 joinChannel
加入频道。// 开启回声测试。10 表示 10 秒后播放本次测试录到的声音,获取测试结果
rtcEngine.startEchoTest(10);
// 等待并检查是否可以听到自己的声音回放
// 停止测试
rtcEngine.stopEchoTest();
从 v3.5.2 起,声网 RTC Native 通过 startEchoTest
[3/3] 方法,支持用户在加入频道前启动音视频通话回路测试。该测试的目的是测试系统的音频设备、视频设备、网络连接是否正常。
startEchoTest
[3/3] 方法。调用该方法时,你需要设置 config
参数。startEchoTest
[3/3] 方法后,引导用户发出声音或面对摄像头。如果音频设备和网络连接正常,音频会在约 2 秒后播放出来;如果视频设备和网络连接正常,视频会在约 2 秒后播放出来。stopEchoTest
方法停止检测,然后你可以调用 joinChannel
加入频道。if (!echoTesting) {
SurfaceView surfaceView = RtcEngine.CreateRendererView(getContext());
// Add to the local container
preview.addView(surfaceView, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
EchoTestConfiguration config = new EchoTestConfiguration();
config.enableAudio = true;
config.enableVideo = true;
config.channelId = "randomChannel";
config.view = surfaceView;
engine.startEchoTest(config);
echoTesting = true;
btn_echoVideo.setText(getText(R.string.stop_echo_video_audio_test));
} else {
engine.stopEchoTest();
if(preview.getChildCount() > 0)
{
preview.removeAllViews();
}
echoTesting = false;
btn_echoVideo.setText(getText(R.string.start_echo_video_audio_test));
}
startLastmileProbeTest
进行通话前网络质量探测时,会消耗一定的网络流量。因此调用方法后,声网建议在收到 onLastmileProbeResult
回调之前不要调用其他方法,避免因 API 操作过于频繁导致其他方法无法执行。onLastmileQuality
回调第一次报告的结果有一定概率是 UNKNOWN
, 可通过之后的几次回调获得结果。startEchoTest
。startEchoTest
后必须调用 stopEchoTest
以结束测试,否则不能进行下一次回声测试,也不能加入频道。