通话中质量监测
声网 Web SDK 支持获取以下统计数据来检测通话质量:
- Last mile 上下行网络质量
- 当前通话的统计数据
- 本地轨道的统计数据
- 远端轨道的统计数据
- 频道内的异常事件
点击在线体验试用通话中质量监测功能。
前提条件
开始前,请确保你已参考快速开始在你的项目中实现基本的实时音视频功能。
实现方法
获取 Last mile 上下行网络质量
Last mile 是指你的设备到声网边缘服务器的网络。
本地用户加入频道后,SDK 会每 2 秒触发一次 AgoraRTCClient.on("network-quality")
回调报告本地用户的上下行 Last mile 网络质量打分。
你还可以通过 AgoraRTCClient.getRemoteNetworkQuality
方法获取本地订阅的所有远端用户的上下行 Last mile 网络质量打分。
质量打分对照表如下:
分数 | 说明 |
---|---|
0 | 网络质量未知。 |
1 | 网络质量极好。 |
2 | 用户主观感觉和极好差不多,但码率可能略低于极好。 |
3 | 用户主观感受有瑕疵但不影响沟通。 |
4 | 勉强能沟通但不顺畅。 |
5 | 网络质量非常差,基本不能沟通。 |
6 | 完全无法沟通。 |
client.on("network-quality", (stats) => {
console.log("downlinkNetworkQuality", stats.downlinkNetworkQuality);
console.log("uplinkNetworkQuality", stats.uplinkNetworkQuality);
});
const remoteNetworkQuality = client.getRemoteNetworkQuality();
获取当前通话的统计数据
调用 AgoraRTCClient.getRTCStats
方法获取与当前通话的统计数据,数据说明详见 AgoraRTCStats
。
const clientStats = client.getRTCStats();
获取本地音视频轨道的统计数据
调用 AgoraRTCClient.getLocalAudioStats
和 AgoraRTCClient.getLocalVideoStats
方法分别获取本地发布的音频轨道和视频轨道的统计数据。数据说明详见 LocalAudioTrackStats
和 LocalVideoTrackStats
。
const localStats = {
video: client.getLocalVideoStats(),
audio: client.getLocalAudioStats()
};
获取远端音视频轨道的统计数据
调用 AgoraRTCClient.getRemoteAudioStats
和 AgoraRTCClient.getRemoteVideoStats
方法获取订阅的远端音频轨道和远端视频轨道的统计数据。其中,你可参考下图理解 end2EndDelay
、receiveDelay
和 transportDelay
字段,其他数据说明详见 RemoteAudioTrackStats
和 RemoteVideoTrackStats
。
字段 | 描述 |
---|---|
end2EndDelay | 端到端延时(毫秒),从远端采集音频或视频到本地播放音频或视频的延时。图中阶段 1 + 2 + 3 + 4 + 5 + 6。 |
receiveDelay | 接收音频延时(毫秒),从远端发送音频或视频到本地播放音频或视频的延时,图中阶段 2 + 3 + 4 + 5 + 6。 |
transportDelay | 传输延时(毫秒),从远端发送音频或视频到本地接收音频或视频的延时。图中阶段 2 + 3 + 4。 |
const remoteTracksStats = {
video: client.getRemoteVideoStats()[uid],
audio: client.getRemoteAudioStats()[uid]
};
关注频道内的异常事件
SDK 通过 AgoraRTCClient.on("exception")
回调报告频道内的异常事件。异常事件不是错误,但是往往会引起通话质量问题。发生异常事件后,如果恢复正常,也会收到该回调。该回调返回:
code
:事件码。msg
:提示消息。uid
:发生异常或恢复的用户 UID。
client.on("exception", function(evt) {
console.log(evt.code, evt.msg, evt.uid);
})
每个异常事件都有对应的恢复事件,详见下表:
开发注意事项
上述所有方法必须在成功加入频道之后调用。