跳到主要内容

网络探测

SDK 从 5.2.5 版本开始支持该功能。

startNetworkProbe 方法支持用户在加入房间前进行网络质量探测,通过相应的回调将当前网络往返时延、上下行丢包率、网络质量数据返回给上层应用。

提示

请在加入房间前完成网络质量探测。SDK 不支持在音视频通话过程中进行网络质量探测。

设置网络探测事件回调监听

设置网络探测开始事件回调

方法

Dart
RCRTCEngine.onNetworkProbeStarted

返回值

参数描述
code接口结果码
errMsg失败原因

示例代码

Dart
engine.onNetworkProbeStarted = (int code, String? errMsg) {
if (code == 0) {
// 开启网络探测成功
print('开启网络探测成功');
} else {
// 开启网络探测失败
print('开启网络探测失败: $errMsg');
}
};

设置网络探测停止事件回调

方法

Dart
RCRTCEngine.onNetworkProbeStopped

返回值

参数描述
code接口结果码
errMsg失败原因

示例代码

Dart
engine.onNetworkProbeStopped = (int code, String? errMsg) {
if (code == 0) {
// 停止网络探测成功
print('停止网络探测成功');
} else {
// 停止网络探测失败
print('停止网络探测失败: $errMsg');
}
};

设置网络探测完成事件回调

方法

Dart
RCRTCEngine.onNetworkProbeFinished

返回值

参数描述
code接口结果码,0表示正常结束,非0表示探测中断
errMsg失败原因

示例代码

Dart
engine.onNetworkProbeFinished = (int code, String? errMsg) {
if (code == 0) {
// 网络探测正常完成
print('网络探测正常完成');
} else {
// 网络探测中断
print('网络探测中断: $errMsg');
}
};

设置网络探测上行统计事件回调

方法

Dart
RCRTCEngine.onNetworkProbeUpLinkStats

返回值

参数描述
statsRCRTCNetworkProbeStats

示例代码

Dart
engine.onNetworkProbeUpLinkStats = (RCRTCNetworkProbeStats stats) {
// 汇报网络探测上行数据
print('上行带宽: ${stats.bandwidth} kbps');
print('上行丢包率: ${stats.packetLossRate}%');
print('上行网络抖动: ${stats.jitter} ms');
print('上行往返延时: ${stats.rtt} ms');
};

设置网络探测下行统计事件回调

方法

Dart
RCRTCEngine.onNetworkProbeDownLinkStats

返回值

参数描述
statsRCRTCNetworkProbeStats

示例代码

Dart
engine.onNetworkProbeDownLinkStats = (RCRTCNetworkProbeStats stats) {
// 汇报网络探测下行数据
print('下行带宽: ${stats.bandwidth} kbps');
print('下行丢包率: ${stats.packetLossRate}%');
print('下行网络抖动: ${stats.jitter} ms');
print('下行往返延时: ${stats.rtt} ms');
};

开启 RTC 网络探测

加入房间前,调用 startNetworkProbe 开启网络质量探测。开启探测成功后,会回调注册的回调来反馈探测结果。每隔约 2 秒回调一次上下行网络的带宽、丢包、网络抖动和往返时延等数据。

探测总时长约为 30 秒,30 秒后会自动停止探测并触发 onNetworkProbeFinished 回调方法通知上层应用探测结束,此时回调中的 code 值为 0。

方法

Dart
RCRTCEngine.startNetworkProbe();

参数说明

参数类型必填说明
listenerRCRTCNetworkProbeListener网络探测监听器

示例代码

Dart
engine.onNetworkProbeStarted = (int code, String? errMsg) {
if (code == 0) {
// 开启网络探测成功
print('开启网络探测成功');
} else {
// 开启网络探测失败
print('开启网络探测失败: $errMsg');
}
};

// 开启网络探测
engine.startNetworkProbe(this);
提示

在探测自动结束(onNetworkProbeFinished code == 0)前,如调用 joinRoom 或 unInit 等 API 方法会打断当前正在进行的 RTC 网络探测,此时回调中的 code 值不为 0。

停止 RTC 网络探测

开启探测成功约 30 秒后,会自动停止探测,如果不想等待自动结束,可调用 stopNetworkProbe 方法强制停止探测。

方法

Dart
RCRTCEngine.stopNetworkProbe();

示例代码

Dart
// 停止网络探测的回调
engine.onNetworkProbeStopped = (int code, String? errMsg) {
if (code == 0) {
// 停止网络探测成功
print('停止网络探测成功');
} else {
// 停止网络探测失败
print('停止网络探测失败: $errMsg');
}
};

// 停止网络探测
engine.stopNetworkProbe();

完整示例代码

Dart
class NetworkProbeListenerImpl implements RCRTCNetworkProbeListener {


void onNetworkProbeUpLinkStats(RCRTCNetworkProbeStats stats) {
// 汇报网络探测上行数据
print('上行带宽: ${stats.bandwidth} kbps');
print('上行丢包率: ${stats.packetLossRate}%');
print('上行网络抖动: ${stats.jitter} ms');
print('上行往返延时: ${stats.rtt} ms');
}


void onNetworkProbeDownLinkStats(RCRTCNetworkProbeStats stats) {
// 汇报网络探测下行数据
print('下行带宽: ${stats.bandwidth} kbps');
print('下行丢包率: ${stats.packetLossRate}%');
print('下行网络抖动: ${stats.jitter} ms');
print('下行往返延时: ${stats.rtt} ms');
}


void onNetworkProbeFinished(int code, String? errMsg) {
// 网络探测完成 code 为 0 时是正常结束,非 0 为探测中断
if (code == 0) {
print('网络探测正常完成');
} else {
print('网络探测中断: $errMsg');
}
}
}

// 设置网络探测回调监听
engine.onNetworkProbeStarted = (int code, String? errMsg) {
if (code == 0) {
print('开启网络探测成功');
} else {
print('开启网络探测失败: $errMsg');
}
};

engine.onNetworkProbeStopped = (int code, String? errMsg) {
if (code == 0) {
print('停止网络探测成功');
} else {
print('停止网络探测失败: $errMsg');
}
};

engine.onNetworkProbeFinished = (int code, String? errMsg) {
if (code == 0) {
print('网络探测正常完成');
} else {
print('网络探测中断: $errMsg');
}
};

engine.onNetworkProbeUpLinkStats = (RCRTCNetworkProbeStats stats) {
print('上行带宽: ${stats.bandwidth} kbps');
print('上行丢包率: ${stats.packetLossRate}%');
print('上行网络抖动: ${stats.jitter} ms');
print('上行往返延时: ${stats.rtt} ms');
};

engine.onNetworkProbeDownLinkStats = (RCRTCNetworkProbeStats stats) {
print('下行带宽: ${stats.bandwidth} kbps');
print('下行丢包率: ${stats.packetLossRate}%');
print('下行网络抖动: ${stats.jitter} ms');
print('下行往返延时: ${stats.rtt} ms');
};

// 开启网络探测
engine.startNetworkProbe(NetworkProbeListenerImpl());

// 停止网络探测
engine.stopNetworkProbe();