通话质量统计
本文主要介绍 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