功能描述
在加入频道或切换角色为主播前,进行网络质量探测,可以判断或预测用户当前的网络状况是否良好,可以满足音频码率或者当前选定的视频属性的目标码率。
在对网络质量要求高的场景下,AR 建议在加入频道前进行探测,保证通信顺畅。
实现方法
开始检测网络质量前,请确保你已在项目中实现了基本的音视频通信或直播功能。
- 在用户加入频道或上麦前,调用
startLastmileProbeTest
进行网络质量探测,向用户反馈上下行网络的带宽、丢包、网络抖动和往返时延。 - 启用该方法后,SDK 会依次返回如下 2 个回调:
onLastmileQuality
:约 2 秒内返回。该回调通过打分反馈上下行网络质量,更贴近主观感受onLastmileProbeResult
:约 30 秒内返回。该回调通过客观数据反馈上下行网络质量,更客观
- 获取到网络质量数据后,调用
stopLastmileProbeTest
停止通话前网络质量探测。
如下是通话前网络质量检测图:
示例代码
参考下文示例代码在你的项目中进行通话前网络质量探测。
LastmileProbeConfig _$LastmileProbeConfigFromJson(Map<String, dynamic> json) {
return LastmileProbeConfig(
json['probeUplink'] as bool,
json['probeDownlink'] as bool,
json['expectedUplinkBitrate'] as int,
json['expectedDownlinkBitrate'] as int,
);
}
Map<String, dynamic> _$LastmileProbeConfigToJson(
LastmileProbeConfig instance) =>
<String, dynamic>{
'probeUplink': instance.probeUplink,
'probeDownlink': instance.probeDownlink,
'expectedUplinkBitrate': instance.expectedUplinkBitrate,
'expectedDownlinkBitrate': instance.expectedDownlinkBitrate,
};
fun mapToLastmileProbeConfig(map: Map<*, *>): LastmileProbeConfig {
return LastmileProbeConfig().apply {
(map["probeUplink"] as? Boolean)?.let { probeUplink = it }
(map["probeDownlink"] as? Boolean)?.let { probeDownlink = it }
(map["expectedUplinkBitrate"] as? Number)?.let { expectedUplinkBitrate = it.toInt() }
(map["expectedDownlinkBitrate"] as? Number)?.let { expectedUplinkBitrate = it.toInt() }
}
}
// 开启回声测试
fun startEchoTest(params: Map<String, *>, callback: Callback)
// 停止测试
fun stopEchoTest(callback: Callback)
开发注意事项
- Last-mile 测试必须在加入通话频道之前。在结束测试之前,anyRTC 不建议调用其他 API 方法。
onLastmileQuality
回调第一次报告的结果有一定概率是 unknown, 可通过之后的几次回调获得结果。- 纯语音产品使用 48 Kbps 的固定探测码率;视频产品会根据当前选定的视频属性调整探测码率。
- 直播场景下,只有角色为主播的用户才能调用
startEchoTest
。 - 调用
startEchoTest
后必须调用stopEchoTest
以结束测试,否则不能进行下一次回声测试,也不能加入频道。