human: 如何处理七牛云的实时音视频通话质量统计

gpt: [实时音视频](https://developer.qiniu.com/rtc) > 使用指南 > Web >通话质量统计

#  通话质量统计

最近更新时间: 2022-07-14 15:46:38

本文主要介绍 SDK 如何对通话过程中的网络以及音视频的质量进行监控。

# 获取网络质量

在**加入了房间** 并且**已经发布或者订阅了音视频 Track** 后，可通过
[QNRTCClient.getNetworkQuality](https://developer.qiniu.com/rtc/9090/WebQNRTCClient#getNetworkQuality)
接口获取本地网络状态，通过
[QNRTCClient.getUserNetworkQuality](https://developer.qiniu.com/rtc/9090/WebQNRTCClient#getUserNetworkQuality)
获取远端网络状态。

其中，质量等级是基于当前用户通话过程中的网络、丢包以及 RTT 综合评估得出的，获取到的质量等级可参考
[QNNetworkGrade](https://developer.qiniu.com/rtc/9058/WebQNNetworkQuality)。

# 获取音视频媒体数据统计

SDK 中统一通过不同 Track 中的 getStats 方法来获取相关的音视频媒体数据统计，具体来说包含下面四种情况。

第一，本地视频数据统计
[QNLocalVideoTrack.getStats](https://developer.qiniu.com/rtc/9061/WebQNLocalVideoTrack#getStats)，此时获取到
[QNLocalVideoTrackStats](https://developer.qiniu.com/rtc/9051/WebQNLocalVideoTrackStats)
对象，内容如下。

属性| 描述  
---|---  
profile|
当前所统计视频的[质量等级](https://developer.qiniu.com/rtc/9050/WebQNTrackProfile)，profile
说明亦可参考[视频大小流](https://developer.qiniu.com/rtc/9472/video-size-flow-web)文档  
uplinkFrameRate| 本地视频上行的帧率  
uplinkBitrate| 本地视频上行的码率  
uplinkRTT| 本地视频上行的网络延时  
uplinkLostRate| 本地视频上行的丢包率  
  
第二，本地音频数据统计
[QNLocalAudioTrack.getStats](https://developer.qiniu.com/rtc/9089/WebQNLocalAudioTrack#getStats)，此时获取到
[QNLocalAudioTrackStats](https://developer.qiniu.com/rtc/9083/WebQNLocalAudioTrackStats)
对象，内容如下。

属性| 描述  
---|---  
uplinkBitrate| 本地音频上行的码率  
uplinkRTT| 本地音频上行的网络延时  
uplinkLostRate| 本地音频上行的丢包率  
  
第三，远端视频数据统计
[QNRemoteVideoTrack.getStats](https://developer.qiniu.com/rtc/9060/WebQNRemoteVideoTrack#getStats)，此时获取到
[QNRemoteVideoTrackStats](https://developer.qiniu.com/rtc/9380/WebQNRemoteVideoTrackStats)
对象，内容如下。

属性| 描述  
---|---  
profile|
当前订阅的视频的[质量等级](https://developer.qiniu.com/rtc/9050/WebQNTrackProfile)，profile
说明亦可参考[视频大小流](https://developer.qiniu.com/rtc/9472/video-size-flow-web)文档  
downlinkFrameRate| 本地拉取远端视频时下行的帧率  
downlinkBitrate| 本地拉取远端视频时下行的码率  
downlinkLostRate| 本地拉取远端视频时下行的丢包率  
uplinkRTT| 远端视频上行的网络延时  
uplinkLostRate| 远端视频上行的丢包率  
  
第四，远端音频数据统计
[QNRemoteAudioTrack.getStats](https://developer.qiniu.com/rtc/9087/WebQNRemoteAudioTrack#getStats)，此时获取到
[QNRemoteAudioTrackStats](https://developer.qiniu.com/rtc/9093/WebQNRemoteAudioTrackStats)
对象，内容如下。

属性| 描述  
---|---  
downlinkBitrate| 本地拉取远端音频时下行的码率  
downlinkLostRate| 本地拉取远端音频时下行的丢包率  
uplinkRTT| 远端音频上行的网络延时  
uplinkLostRate| 远端音频上行的丢包率  
  
# 通话音量监听

在音频连麦的过程中，我们经常有这种需求，展示当前是谁在发言（比如当某人说话时就在他的麦克风图标上做高亮处理）。为了实现这些需求，我们就需要实时地去获取音频
Track 中正在播放的音频数据。

可以通过定时调用[ QNLocalAudioTrack.getVolumeLevel
](https://developer.qiniu.com/rtc/9089/WebQNLocalAudioTrack#getVolumeLevel)| [
QNRemoteAudioTrack.getVolumeLevel
](https://developer.qiniu.com/rtc/9087/WebQNRemoteAudioTrack#getVolumeLevel)方法来监听房间内用户说话音量。实现的核心代码逻辑如下：

    
    
    // 用户进入房间，发布tracks时，记录当前用户发布出去的tracks
    const publishTracks = xxx;
    // 远端用户发布tracks时，当前用户在订阅远端用户后
    // 把远端用户的track添加到subscribedTracks中
    // 自动订阅远端用户已发布的tracks也需要加入到subscribedTracks中
    const subscribedTracks = xxx;
    // 把是音频的tracks过滤出来
    const audioTracks = [...publishTracks, ...subscribeTracks].filter( track: QNTrack => {
      track.isAudio();
    });
    // 设置定时器，定时执行音频tracks的getVolumeLevel()方法，获取对应track的音量以及处理
    const time = 800;
    setInterval(() => {
      audioTracks.forEach( track: QNLocalAudioTrack | QNRemoteAudioTrack => {
        const volumn = track.getVolumeLevel();
        // ...
        // 前端处理逻辑
        // ...
      })
    }, time);
    

# 示例代码

视频通话数据统计示例可查看 [API-Examples-Web/videoCallStatistics](https://github.com/pili-
engineering/QNRTC-Web/tree/master/API-Examples-Web/videoCallStatistics)

以上内容是否对您有帮助？