通话前检测
在对音视频质量要求较高的场景下,需要在通话前进行检测,以确保设备的运转状态良好、设备与声网平台之间的网络状态正常。此操作能够提前识别并排除潜在的故障,从而改善用户体验。
本文介绍如何在 App 中实施网络和设备检测。
技术原理
在通信场景中,可通过检测了解网络状态。例如,简单发送一条空消息以查看目标地址是否存在。
进行网络检测时需要重点关注以下指标:
- 带宽:通常以 bit/s 为单位,表示信息传输的最大速率
- 吞吐量:信息传输的实际速率
- 时延:信息从发送方到接收方所需要的时间,包括接收方的解码时间,以及每一个网络节点进行数据处理的时间
- 抖动:接收方收到数据包的延迟变化
- 错误率:以百分比或分数表示损坏的信息占发送信息总数的比例
进行设备检测可以保证设备获取的音频在经过网络传输后可以正常播放。首先,声网会从设备的麦克风获取音频,然后将其发送到声网平台,并定义一个等待时间(例如:5 秒)。等待时间过后,声网平台将音频发送回设备,并在设备扬声器中播放。然后,你可以判断音频的质量是否良好。
声网建议你先进行设备测试,然后进行网络检测。
设备检测
SDK 提供了StartEchoTest
方法,用于测试网络连接和音频设备(例如麦克风和扬声器)是否正常工作。
网络检测
SDK 提供了 StartLastmileProbeTest
方法,用于在加入频道前检测 last mile 网络并返回有关网络质量的统计信息,包括往返时延、丢包率和网络带宽。
在进行 last mile 检测时,实时互动 SDK 根据视频配置文件调整实际比特率。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
实现方法
请参考以下步骤在 App 中实施通话前检测。
设备检测
在开始通话前,你可以通过如下方式进行设备检测。
语音通话检测
本小节介绍如何调用 StartEchoTest
和 StopEchoTest
开始/停止语音通话回路测试。
开始语音通话检测
-
创建 UMG
创建一个 Button (按钮) 控件,命名为 Btn_StartEchoTest,你可以点击按钮开始语音通话回路测试。如下图所示: -
绑定 UI 事件
创建 Bind Event to On Clicked 节点,分别连接 Btn_StartEchoTest 控件和 OnStartEchoTestClicked 回调。当你按下按钮开始语音通话测试时,触发 OnStartEchoTestClicked 回调。如下图所示: -
实现 UI 事件
创建 OnStartEchoTestClicked 回调函数。触发该回调后,调用 Start Echo Test 方法开始语音通话检测。当回声测试开始后,引导用户说一句话,如果在设置的时间间隔后回放录音,则表示音频设备和网络连接正常。在本示例中,配置 Start Echo Test 的 Config 参数如下:- 默认勾选 Enable Audio,即开启音频设备检测。
- 取消勾选 Enable Video,即关闭视频设备检测。
- 传入 Token 和 Channel Id (频道名)。
- Interval In Seconds 默认设置为 2,即每隔 2 秒上报一次音频通话回路的测试结果。
停止语音通话检测
-
创建 UMG
创建一个 Button (按钮) 控件,命名为 Btn_StopEchoTest,你可以点击按钮停止语音通话回路测试。如下图所示: -
绑定 UI 事件
创建 Bind Event to On Clicked 节点,分别连接 Btn_StopEchoTest 控件和 OnStopEchoTestClicked 回调。当你按下按钮停止语音通话测试时,会触发 OnStopEchoTestClicked 回调。如下图所示: -
实现 UI 事件
创建 OnStoptEchoTestClicked 回调函数。获得测试结果后,你可以按下停止按钮触发该回调,调用 Stop Echo Test 方法停止语音通话检测。如下图所示:
音频录制设备检测
测试本地音频录制设备(如麦克风)是否正常工作,请参考以下步骤。
- 调用
StartRecordingDeviceTest
,并将indicationInterval
参数设置为触发回调的时间间隔。 - 引导用户说一句话,SDK 会在
FOnAudioVolumeIndication
回调中报告uid
= 0 及设备的音量信息。 - 完成测试后,调用
StopRecordingDeviceTest
停止录制设备测试。
建议将 indicationInterval
参数设置到大于 200 毫秒,最小不得少于 10 毫秒,否则会收不到 FOnAudioVolumeIndication
回调。
音频播放设备检测
测试本地音频播放设备(如外放设备)是否正常工作,请参考以下步骤。
- 调用
StartPlaybackDeviceTest
,并将testAudioFilePath
参数设置为待播放的音频文件的绝对路径。 - 如果能听到声音,说明播放设备能正常工作。SDK 会触发一次
FOnAudioVolumeIndication
回调,报告uid
= 1 及播放设备的音量信息。 - 完成测试后,调用
StopPlaybackDeviceTest
停止播放设备测试。
音频设备回路检测
测试本地音频设备回路是否正常,请参考以下步骤。
- 调用
StartAudioDeviceLoopbackTest
,并将indicationInterval
参数设置为触发回调的时间间隔。 - 引导用户说一句话,麦克风会采集声音然后用扬声器播放,同时 SDK 会返回两个
FOnAudioVolumeIndication
回调,分别报告音频采集设备(uid
= 0)和音频播放设备(uid
= 1)的音量信息。 - 完成测试后,调用
StopAudioDeviceLoopbackTest
停止录制设备测试。
建议将 indicationInterval
参数设置到大于 200 毫秒,最小不得少于 10 毫秒,否则会收不到 FOnAudioVolumeIndication
回调。
网络检测
请参考以下步骤进行网络检测。
- 在加入频道或切换用户角色之前,调用
StartLastmileProbeTest
启动网络检测。你需要在此方法中设置你预期的上行和下行比特率。 - 调用该方法后,SDK 将返回以下两个回调:
FOnLastmileQuality
:在调用StartLastmileProbeTest
2 秒后返回。该回调通过打分反馈上下行网络质量,更贴近主观感受。FOnLastmileProbeResult
:在调用StartLastmileProbeTest
30 秒后返回。该回调提了网络质量的实时统计数据,更加客观。
- 获取网络质量统计信息后,调用
StopLastmileProbeTest
停止网络检测。
参考信息
示例项目
声网提供了开源的示例项目供你参考,你可以前往下载或查看其中的源代码。