在对音视频质量要求较高的场景下,需要在通话前进行检测,以确保设备的运转状态良好、设备与声网平台之间的网络状态正常。 此操作能够提前识别并排除潜在的故障,从而改善用户体验。
本文介绍如何在 app 中实施网络和设备检测。
在通信场景中,可通过检测了解网络状态。 例如,简单发送一条空消息以查看目标地址是否存在。
进行网络检测时需要重点关注以下指标:
进行设备检测可以保证设备获取的音频在经过网络传输后可以正常播放。 首先,声网会从设备的麦克风获取音频,然后将其发送到声网平台,并定义一个等待时间(例如:5 秒)。 等待时间过后,声网平台将音频发送回设备,并在设备扬声器中播放。 然后,你可以判断音频的质量是否良好。
声网建议你先进行设备测试,然后进行网络检测。
SDK 提供了StartEchoTest
方法,用于测试网络连接和音频设备(例如麦克风和扬声器)是否正常工作。
SDK 提供了 StartLastmileProbeTest
方法,用于在加入频道前检测 last mile 网络并返回有关网络质量的统计信息,包括往返时延、丢包率和网络带宽。
在进行 last mile 检测时,视频 SDK 根据视频配置文件调整实际比特率。
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。 有关详细信息,请参考实现视频通话或实现视频直播。
请参考以下步骤在 app 中实施通话前检测。
测试系统的音频设备和网络连接是否正常,请参考以下步骤。
StartEchoTest
。 你需要在该方法中设置 intervalInSeconds
参数来通知 SDK 何时上报本次测试的结果。 取值范围为 [2~10],默认值为 10(单位:秒)。StopEchoTest
停止测试,再调用 JoinChannel
加入频道。请参考以下示例代码来实现该功能。
// 开始回声测试。
// 只有主播才能调用 StartEchoTest。
RtcEngine.StartEchoTest(2);
// 等待并检查是否可以听到自己的声音回放。
// 停止回声测试。
// 必须调用 StopEchoTest 结束回声测试。否则,你将无法进行另一次回声测试或加入频道。
RtcEngine.StopEchoTest();
测试本地音频录制设备(如麦克风)是否正常工作,请参考以下步骤。
StartRecordingDeviceTest
,并将 indicationInterval
参数设置为触发回调的时间间隔。OnAudioVolumeIndication
回调中报告 uid
= 0 及设备的音量信息。indicationInterval
参数设置到大于 200 毫秒,最小不得少于 10 毫秒,否则会收不到 OnAudioVolumeIndication
回调。// 创建 IRtcEngine 对象
RtcEngine = Agora.Rtc.RtcEngine.CreateAgoraRtcEngine();
UserEventHandler handler = new UserEventHandler(this);
RtcEngineContext context = new RtcEngineContext(_appID, 0,
CHANNEL_PROFILE_TYPE.CHANNEL_PROFILE_LIVE_BROADCASTING,
AUDIO_SCENARIO_TYPE.AUDIO_SCENARIO_DEFAULT);
// 初始化 IRtcEngine
RtcEngine.Initialize(context);
// 设置监听回调
RtcEngine.InitEventHandler(handler);
// 获取 IAudioDeviceManager 对象
IAudioDeviceManager audioDeviceManager = RtcEngine.GetAudioDeviceManager();
// 开启本地音频录制测试
audioDeviceManager.StartRecordingDeviceTest(100);
class UserEventHandler : IRtcEngineEventHandler
{
// 实现音频音量回调接口
public override void OnAudioVolumeIndication(RtcConnection connection, AudioVolumeInfo[] speakers, uint speakerNumber, int totalVolume)
{
}
}
测试本地音频播放设备(如外放设备)是否正常工作,请参考以下步骤。
StartPlaybackDeviceTest
,并将 testAudioFilePath
参数设置为待播放的音频文件的绝对路径。OnAudioVolumeIndication
回调,报告 uid
= 1 及播放设备的音量信息。RtcEngine = Agora.Rtc.RtcEngine.CreateAgoraRtcEngine();
UserEventHandler handler = new UserEventHandler(this);
RtcEngineContext context = new RtcEngineContext(_appID, 0,
CHANNEL_PROFILE_TYPE.CHANNEL_PROFILE_LIVE_BROADCASTING,
AUDIO_SCENARIO_TYPE.AUDIO_SCENARIO_DEFAULT);
RtcEngine.Initialize(context);
// 设置监听回调
RtcEngine.InitEventHandler(handler);
// 测试本地音频播放设备
IAudioDeviceManager audioDeviceManager = RtcEngine.GetAudioDeviceManager();
audioDeviceManager.StartPlaybackDeviceTest("/User/hello.mp3");
class UserEventHandler : IRtcEngineEventHandler
{
// 实现音频音量回调接口
public override void OnAudioVolumeIndication(RtcConnection connection, AudioVolumeInfo[] speakers, uint speakerNumber, int totalVolume)
{
}
}
测试本地音频设备回路是否正常,请参考以下步骤。
StartAudioDeviceLoopbackTest
,并将 indicationInterval
参数设置为触发回调的时间间隔。OnAudioVolumeIndication
回调,分别报告音频采集设备(uid
= 0)和音频播放设备(uid
= 1)的音量信息。StopAudioDeviceLoopbackTest
停止录制设备测试。indicationInterval
参数设置到大于 200 毫秒,最小不得少于 10 毫秒,否则会收不到 OnAudioVolumeIndication
回调。RtcEngine = Agora.Rtc.RtcEngine.CreateAgoraRtcEngine();
UserEventHandler handler = new UserEventHandler(this);
RtcEngineContext context = new RtcEngineContext(_appID, 0,
CHANNEL_PROFILE_TYPE.CHANNEL_PROFILE_LIVE_BROADCASTING,
AUDIO_SCENARIO_TYPE.AUDIO_SCENARIO_DEFAULT);
RtcEngine.Initialize(context);
// 设置监听回调
RtcEngine.InitEventHandler(handler);
// 测试本地音频设备回路是否正常
IAudioDeviceManager audioDeviceManager = RtcEngine.GetAudioDeviceManager();
audioDeviceManager.StartAudioDeviceLoopbackTest(100);
// 完成测试后调用 StopAudioDeviceLoopbackTest 停止录制设备测试。
audioDeviceManager.StopAudioDeviceLoopbackTest();
class UserEventHandler : IRtcEngineEventHandler
{
// 实现音频音量回调接口
public override void OnAudioVolumeIndication(RtcConnection connection, AudioVolumeInfo[] speakers, uint speakerNumber, int totalVolume)
{
}
}
请参考以下步骤进行网络检测。
在加入频道或切换用户角色之前,调用 StartLastmileProbeTest
启动网络检测。 你需要在此方法中设置你预期的上行和下行比特率。
调用该方法后,SDK 将返回以下两个回调:
OnLastmileQuality
:在调用 StartLastmileProbeTest
2 秒后返回。 该回调通过打分反馈上下行网络质量,更贴近主观感受。OnLastmileProbeResult
:在调用 StartLastmileProbeTest
30 秒后返回。 该回调提了网络质量的实时统计数据,更加客观。获取网络质量统计信息后,调用 StopLastmileProbeTest
停止网络检测。
RtcEngine = Agora.Rtc.RtcEngine.CreateAgoraRtcEngine();
UserEventHandler handler = new UserEventHandler(this);
RtcEngineContext context = new RtcEngineContext(_appID, 0,
CHANNEL_PROFILE_TYPE.CHANNEL_PROFILE_LIVE_BROADCASTING,
AUDIO_SCENARIO_TYPE.AUDIO_SCENARIO_DEFAULT);
RtcEngine.Initialize(context);
// 设置监听回调
RtcEngine.InitEventHandler(handler);
// 开始 Last-mile 网络检测
RtcEngine.StartLastmileProbeTest(new LastmileProbeConfig());
// 结束网络检测。在测试结束前,声网建议不要调用其他 API 方法
RtcEngine.StopLastmileProbeTest();
class UserEventHandler : IRtcEngineEventHandler
{
// 开始 Last-mile 网络检测后,约 2 秒后发生该回调
public override void OnLastmileQuality(int quality)
{
}
// 开始 Last-mile 网络检测后,约 30 秒后发生该回调
public override void OnLastmileProbeResult(LastmileProbeResult result)
{
}
}
介绍本文中使用方法的更多信息。