影响通话质量的因素有很多,其中最主要的因素来自网络状况是否稳定,因此网络的带宽、上下行、丢包(网络传输的音视频数据包)都是检测通话中质量好坏的依据。
功能描述
以下所有示例代码中的 rtcClient
是指通过 ArRTC.createClient
创建的本地客户端对象。
anyRTC Web SDK 通过以下统计数据作为依据来检测通话质量:
- 当前会话的统计数据
- 本地轨道的统计数据
- 远端轨道的统计数据
- 本地用户的上下行网络质量统计数据
实现方法
获取本地上下行网络质量
本地用户加入频道后,通过 ArRTCClient.on
监听 network-quality 回调来获取本地用户的上下行网络质量。该回调每 2 秒触发一次,返回的质量参数包括:
downlinkNetworkQuality
:下行网络质量。uplinkNetworkQuality
:上行网络质量。
质量等级对照表如下:
质量等级 | 说明 |
---|---|
0 | 网络质量未知。 |
1 | 网络质量极好。 |
2 | 用户主观感觉和极好差不多,但码率可能略低于极好。 |
3 | 用户主观感受有瑕疵但不影响沟通。 |
4 | 勉强能沟通但不顺畅。 |
5 | 网络质量非常差,基本不能沟通。 |
6 | 完全无法沟通。 |
推荐使用此 API 来展示本地用户的网络状态
rtcClient.on("network-quality", (stats) => {
// 质量状态
const oType = [
"质量未知",
"质量极好",
"用户主观感觉和极好差不多,但码率可能略低于极好",
"用户主观感受有瑕疵但不影响沟通",
"勉强能沟通但不顺畅",
"网络质量非常差,基本不能沟通",
"网络连接断开,完全无法沟通",
];
console.log("上行网络质量", oType[stats.uplinkNetworkQuality]);
console.log("下行网络质量", oType[stats.downlinkNetworkQuality]);
});
获取当前会话的统计数据
调用 ArRTCClient.getRTCStats 方法获取与当前会话相关的统计数据。数据说明详见 ArRTCStats。
const stats = rtcClient.getRTCStats();
获取本地音视频轨道的统计数据
调用 IArRTCClient.getLocalAudioStats 和 IArRTCClient.getLocalVideoStats 方法获取本地发布的音频轨道和视频轨道的统计数据(常见的有丢包率、码率、视频分辨率、音频采样率等),数据说明详见 LocalAudioTrackStats 和 LocalVideoTrackStats。
// 获取本地发布的音频轨道的统计数据
const audioTrackStats = localAudioTrack.getStats();
// 获取本地发布的视频轨道的统计数据
const videoTrackStats = localVideoTrack.getStats();
获取远端用户音视频轨道的统计数据
调用 IArRTCClient.getRemoteAudioStats 和 IArRTCClient.getRemoteVideoStats 方法获取订阅的远端音频轨道和视频轨道的统计数据(常见的有丢包率、码率、视频分辨率、音频采样率等),数据说明详见 RemoteAudioTrackStats 和 RemoteVideoTrackStats。
// 获取远端用户的音频轨道的统计数据
const audioTrackStats = remoteAudioTrack.getStats();
// 获取远端用户的视频轨道的统计数据
const videoTrackStats = remoteVideoTrack.getStats();
API 参考
- network-quality
- ArRTCClient.getRTCStats
- ArRTCStats
- IArRTCClient.getLocalAudioStats
- IArRTCClient.getLocalVideoStats
- LocalAudioTrackStats
- LocalVideoTrackStats
- IArRTCClient.getRemoteAudioStats
- IArRTCClient.getRemoteVideoStats
- RemoteAudioTrackStats
- RemoteVideoTrackStats
开发注意事项
获取统计信息需要先加入频道。