通话前网络检测

最近更新时间:2022-09-20 05:17:40

功能描述

anyRTC 提供了通话前网络和设备检测的功能,方便你进行音视频通话时,保证通信顺畅。通话前检测从两个角度开展:

  1. 网络质量检测:通过检测当前网络质量的上下行,从而判断用户当前的网络质量是否良好。

  2. 设备质量检测:检测摄像头是否正常工作、检测音频设备是否正常录音及播放、设置摄像头方向或者切换音频设备(麦克风和扬声器)等。

网络质量探测

RTC SDK 提供 startLastmileProbeTest 方法,可在开始通话前进行网络质量探测,向用户反馈上下行网络的带宽、丢包、网络抖动和往返时延数据。

实现方法

开始前请确保已在项目中实现了基本的音视频通信或直播功能。

参考如下步骤了解相关 API 的工作原理。

  1. 在用户加入频道或上麦前,调用 startLastmileProbeTest 进行网络质量探测。调用该方法时,你需要指定期望的最大上下行码率。
  2. 启用该方法后,SDK 会依次返回如下两个回调:
    • lastmileQuality:约两秒内返回,且每两秒触发一次。该回调通过打分反馈上下行网络质量,更贴近主观感受。
    • lastmileProbeResult:约 30 秒内返回。该回调通过客观数据反馈上下行网络质量,更客观。
  3. 获取到网络质量数据后,调用 stopLastmileProbeTest 停止通话前网络质量探测。

如下是通话前网络质量检测图:

示例代码

你可以参考如下示例代码实现网络质量探测功能。

// Swift
let config = ARLastmileProbeConfig()
// 确认进行上行网络探测
config.probeUplink = true;
// 确认进行下行网络探测
config.probeDownlink = true;
// 期望的最大上行码率,单位为 bps,取值范围 [100000,5000000]
config.expectedUplinkBitrate = 100000;
// 期望的最大下行码率,单位为 bps,取值范围 [100000,5000000]
config.expectedDownlinkBitrate = 100000;

// 调用 startLastmileProbeTest 开启网络探测
rtcKit.startLastmileProbeTest(config)
// Swift
// 调用 startLastmileProbeTest 后 2 秒内,收到 lastmileQuality 回调,了解上下行网络质量。该回调每 2 秒触发一次
func rtcEngine(_ engine: ARtcEngineKit, lastmileQuality quality: ARNetworkQuality) {
    lastmileResultLabel.text = "Quality: \(quality.description())"
}


// 调用 startLastmileProbeTest 后 30 秒内,收到 lastmileProbeResult 回调,了解更细节的网络数据
func rtcEngine(_ engine: ARtcEngineKit, lastmileProbeTest result: ARLastmileProbeResult) {
  // 往返时延
  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)%"

  // 在 lastmileProbeTest 回调中获取网络探测结果数据
  lastmileProbResultLabel.text = [rtt, downlinkBandwidth, downlinkJitter, downlinkLoss, uplinkBandwidth, uplinkJitter, uplinkLoss].joined(separator: "\n")
}
// Swift

// 获取网络探测数据后停止探测。
// 可以选择在 lastmileProbeResult 回调内部结束测试,也可以在其他时候结束测试。结束测试前,anySDK 建议不要调用其他方法
rtcKit.stopLastmileProbeTest()

API 参考