通话中质量监听

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

影响通话质量的因素有很多,其中最主要的因素来自网络状况是否稳定,因此网络的带宽、上下行、丢包(网络传输的音视频数据包)都是检测通话中质量好坏的依据。

功能描述

以下所有示例代码中的 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.getLocalAudioStatsIArRTCClient.getLocalVideoStats 方法获取本地发布的音频轨道和视频轨道的统计数据(常见的有丢包率、码率、视频分辨率、音频采样率等),数据说明详见 LocalAudioTrackStatsLocalVideoTrackStats

// 获取本地发布的音频轨道的统计数据
const audioTrackStats = localAudioTrack.getStats();
// 获取本地发布的视频轨道的统计数据
const videoTrackStats = localVideoTrack.getStats();

获取远端用户音视频轨道的统计数据

调用 IArRTCClient.getRemoteAudioStatsIArRTCClient.getRemoteVideoStats 方法获取订阅的远端音频轨道和视频轨道的统计数据(常见的有丢包率、码率、视频分辨率、音频采样率等),数据说明详见 RemoteAudioTrackStatsRemoteVideoTrackStats

// 获取远端用户的音频轨道的统计数据
const audioTrackStats = remoteAudioTrack.getStats();
// 获取远端用户的视频轨道的统计数据
const videoTrackStats = remoteVideoTrack.getStats();

API 参考

开发注意事项

获取统计信息需要先加入频道。