实时音视频

  • 实时音视频 > 使用指南 > Web >通话质量统计

    通话质量统计

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

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

    获取网络质量

    加入了房间并且已经发布或者订阅了音视频 Track 后,可通过 QNRTCClient.getNetworkQuality 接口获取本地网络状态,通过 QNRTCClient.getUserNetworkQuality 获取远端网络状态。

    其中,质量等级是基于当前用户通话过程中的网络、丢包以及 RTT 综合评估得出的,获取到的质量等级可参考 QNNetworkGrade

    获取音视频媒体数据统计

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

    第一,本地视频数据统计 QNLocalVideoTrack.getStats,此时获取到 QNLocalVideoTrackStats 对象,内容如下。

    属性描述
    profile当前所统计视频的质量等级,profile 说明亦可参考视频大小流文档
    uplinkFrameRate本地视频上行的帧率
    uplinkBitrate本地视频上行的码率
    uplinkRTT本地视频上行的网络延时
    uplinkLostRate本地视频上行的丢包率

    第二,本地音频数据统计 QNLocalAudioTrack.getStats,此时获取到 QNLocalAudioTrackStats 对象,内容如下。

    属性描述
    uplinkBitrate本地音频上行的码率
    uplinkRTT本地音频上行的网络延时
    uplinkLostRate本地音频上行的丢包率

    第三,远端视频数据统计 QNRemoteVideoTrack.getStats,此时获取到 QNRemoteVideoTrackStats 对象,内容如下。

    属性描述
    profile当前订阅的视频的质量等级,profile 说明亦可参考视频大小流文档
    downlinkFrameRate本地拉取远端视频时下行的帧率
    downlinkBitrate本地拉取远端视频时下行的码率
    downlinkLostRate本地拉取远端视频时下行的丢包率
    uplinkRTT远端视频上行的网络延时
    uplinkLostRate远端视频上行的丢包率

    第四,远端音频数据统计 QNRemoteAudioTrack.getStats,此时获取到 QNRemoteAudioTrackStats 对象,内容如下。

    属性描述
    downlinkBitrate本地拉取远端音频时下行的码率
    downlinkLostRate本地拉取远端音频时下行的丢包率
    uplinkRTT远端音频上行的网络延时
    uplinkLostRate远端音频上行的丢包率

    通话音量监听

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

    可以通过定时调用 QNLocalAudioTrack.getVolumeLevel | QNRemoteAudioTrack.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

    以上内容是否对您有帮助?
  • Qvm free helper
    Close