2024/10/25 15:25:32
通话前检测
在视频会议、在线教育、互动直播等对通信质量要求高的场景下,进行通话前检测可以帮助提前识别并排查问题,保证实时互动体验。
功能介绍
通话前检测通常可以从设备质量检测和网络质量探测两个角度开展。
- 设备质量检测:包括检测本地麦克风、扬声器以及摄像头是否能正常工作。
- 网络质量探测:可以向用户反馈上下行 last mile 网络的带宽、丢包、网络抖动和往返时延数据,从而判断当前网络状态是否良好。其中,last mile 指的是声网边缘服务器和终端用户设备之间通信的“最后一公里”,last mile 网络质量影响用户发送和接收音视频的流畅度和清晰度。
前提条件
在进行通话前检测之前,请确保你已在 App 中实现了基本的实时音视频功能,且 App 已获取相关设备的使用权限。请参考实现音视频互动。
实现步骤
参考以下步骤在 App 中实现通话前检测。
设备质量检测
设备质量检测的基本流程如下:
SDK 提供了 startEchoTestWithConfig
方法,用于测试网络连接和音视频设备是否正常工作。参考以下步骤实现设备质量检测:
- 在加入频道前,调用
startEchoTestWithConfig
,并在EchoTestConfiguration
中配置测试的对象、频道名和返回测试结果的时间间隔。 - 开始测试后,用户需发出声音或面对摄像头,音频或视频默认会在约 2 秒后播放出来。如果音频播放正常,则表示系统音频设备和用户上下行网络均正常;如果视频播放正常,则表示系统视频设备和用户上下行网络均正常。
- 获得测试结果后,调用
stopEchoTest
停止测试,然后再调用joinChannel
加入频道。
注意
目前,使用 startEchoTest
同时测试音频设备和视频设备可能导致测试结果出现短暂的音画不同步。
请参考以下代码实现设备检测:
Swift
// 测试音频设备
@IBAction func doAudioTest(sender: UIButton) {
let testConfig = AgoraEchoTestConfiguration()
// 设置返回测试结果的时间间隔
testConfig.intervalInSeconds = 10
// 开启音频设备测试
testConfig.enableAudio = true
// 关闭视频设备测试
testConfig.enableVideo = false
// 标识每个测试的频道名
testConfig.channelId = "AudioEchoTest" + "\(Int.random(in: 1...1000))"
// 开始测试音频设备
let ret = agoraKit.startEchoTest(withConfig: testConfig)
}
// 测试视频设备
@IBAction func doVideoTest(_ sender: UIButton) {
let testConfig = AgoraEchoTestConfiguration()
// 设置视频画面的延迟
testConfig.intervalInSeconds = 2
// 关闭音频设备测试
testConfig.enableAudio = false
// 开启视频设备测试
testConfig.enableVideo = true
// 标识每个测试的频道名
testConfig.channelId = "VideoEchoTest" + "\(Int.random(in: 1...1000))"
// 设置用于渲染本地用户视频的视图
testConfig.view = videoCanvasView
// 开始测试视频设备
let ret = agoraKit.startEchoTest(withConfig: testConfig)
}
网络质量探测
网络质量探测的基本流程如下:
SDK 提供了 startLastmileProbeTest
方法,用于在加入频道之前探测 last mile 网络质量,并返回有关网络质量打分和网络质量统计信息。参考以下步骤进行网络质量探测:
- 在加入频道或切换用户角色之前,调用
startLastmileProbeTest
启动网络探测。你需要在LastmileProbeConfig
中设置探测对象和预期最高码率。 - 调用该方法后,SDK 会触发以下回调:
onLastmileQuality
:在调用startLastmileProbeTest
方法两秒后触发。该回调通过打分反馈上下行网络质量,更贴近主观感受。onLastmileProbeResult
:在调用startLastmileProbeTest
方法 30 秒后触发。该回调返回网络状况的实时统计数据,包括丢包率、网络抖动和可用带宽,更加客观。
- 获取网络质量统计信息后,调用
stopLastmileProbeTest
方法停止 last mile 网络检测。
请参考以下代码实现网络质量探测:
Swift
// 创建网络探测配置对象
let config = AgoraLastmileProbeConfig()
// 检测上行网络
config.probeUplink = true;
// 检测下行网络
config.probeDownlink = true;
// 预期的上行比特率 (bps)。取值范围为 [100000,5000000]
config.expectedUplinkBitrate = 100000;
// 预期的下行比特率 (bps)。取值范围为 [100000,5000000]
config.expectedDownlinkBitrate = 100000;
// 开始网络质量探测
agoraKit.startLastmileProbeTest(config)
// 定义回调函数用于接收网络质量统计信息
func rtcEngine(_ engine: AgoraRtcEngineKit, lastmileQuality quality: AgoraNetworkQuality) {
lastmileResultLabel.text = "Quality: \(quality.description())"
}
func rtcEngine(_ engine: AgoraRtcEngineKit, lastmileProbeTest result: AgoraLastmileProbeResult) {
// 往返时延
let rtt = "Rtt: \(result.rtt)ms"
// 下行网络带宽
let downlinkBandWidth = "DownlinkAvailableBandwidth: \(result.downlinkReport.availableBandwidth)Kbps"
// 下行抖动缓冲区
let downlinkJitter = "DownlinkJitter: \(result.downlinkReport.jitter)ms"
// 下行丢包率
let downlinkLoss = "DownlinkLoss: \(result.downlinkReport.packetLossRate)%"
// 上行网络带宽
let uplinkBandwidth = "UplinkAvailableBandwidth: \(result.uplinkReport.availableBandwidth)Kbps"
// 上行抖动缓冲区
let uplinkJitter = "UplinkJitter: \(result.uplinkReport.jitter)ms"
// 上行丢包率
let uplinkLoss = "UplinkLoss: \(result.uplinkReport.packetLossRate)%"
lastmileProbResultLabel.text = [rtt, downlinkBandwidth, downlinkJitter, downlinkLoss,uplinkBandwidth,uplinkJitter,uplinkLoss].joined(separator: "\n")
}
// 停止网络质量探测
agoraKit.stopLastmileProbeTest()
参考信息
检测异常处理建议
在确保 API 正确调用的前提下,遇到检测异常时,声网推荐你参考下表采取措施:
异常现象 | 解决方案 |
---|---|
检测音频设备时听不到声音 |
|
检测视频设备时看不到画面 |
|
检测到上行网络质量不佳(丢包率 > 5%;网络抖动 > 100ms) | |
检测到下行网络质量不佳(丢包率 > 5%;网络抖动 > 100ms) |
示例项目
声网提供了开源的示例项目供你参考,你可以前往下载或查看其中的源代码。
API 参考
-
startEchoTestWithConfig
-
stopEchoTest
-
startLastmileProbeTest
-
stopLastmileProbeTest
-
onLastmileQuality
-
onLastmileProbeResult