通话中质量监测

更新时间: 2024/09/18 16:26:13

在通话场景中,开发者经常需要了解当前通话的通话质量、设备状态等信息,监测通话的整体体验;也可将部分质量数据在 UI 层面展示给用户,使用户能够及时了解当前通话的整体质量。NERTC SDK 支持将关键的音视频状况、网络状况、设备状态的相关指标实时回调给 APP 应用层,应用层可以将收到的数据进行展示或统计。

例如,在进行多人连麦时,您可以展示用户的实时网络质量,如下图所示。

文本

功能介绍

NERTC SDK 提供注册质量监测观测器 IMediaStatsObserver 的接口与相关回调方法,支持在通话中实时同步并返回质量数据,包括上下行网络质量、本地通话统计信息、本地和远端的音视频流统计信息等。

实现方法

调用 SetStatsObserver 方法注册质量观测器,主动设置相应回调,回调名称与返回的质量数据信息的对应关系如下表所示。

回调 统计信息
OnNetworkQuality 上下行网络质量同步
OnRtcStats 统计信息同步
OnLocalAudioStatsOnRemoteAudioStats 音频质量同步
OnLocalVideoStatsOnRemoteVideoStats 视频质量同步

若您需要关闭质量监测功能,传入 null 即可。

示例代码如下:

C#//定义统计信息上报监听类
public class MediaStatsObserver : IMediaStatsObserver
{
    public void OnLocalAudioStats(object channelOrEngine, RtcAudioSendStats stats)
    {
        //TODO:
    }

    public void OnLocalVideoStats(object channelOrEngine, RtcVideoSendStats stats)
    {
        //TODO:
    }

    public void OnNetworkQuality(object channelOrEngine, RtcNetworkQualityInfo[] infos)
    {
        //TODO:
    }

    public void OnRemoteAudioStats(object channelOrEngine, RtcAudioRecvStats[] stats)
    {
        //TODO:
    }

    public void OnRemoteVideoStats(object channelOrEngine, RtcVideoRecvStats[] stats)
    {
        //TODO:
    }

    public void OnRtcStats(object channelOrEngine, RtcStats stats)
    {
        //TODO:
    }
}
private void setMediaStatsObserver()
{
    //设置统计上报数据回调
    int result = rtcEngine.SetStatsObserver(new MediaStatsObserver());
    if (result != (int)RtcErrorCode.kNERtcNoError)
    {
        //失败
    }

    //如果不再需要取消监听
    rtcEngine.SetStatsObserver(null);
}

上下行网络质量同步

OnNetworkQuality 回调以数组的形式向您同步当前通话中每个成员的上下行网络质量。

  • 上行网络质量打分基于实际发送码率、上行网络丢包率、平均往返时延和上行网络抖动计算。
  • 下行网络质量打分基于下行网络丢包率、平均往返时延和下行网络抖动计算。
  • 每隔 2 秒您会收到房间内所有用户的网络质量同步。
  • 实际发送码率与目标发送码率的比值越高,该网络下的通话质量越好,该网络质量打分越高。

RtcNetworkQualityInfo 数组中各参数的说明如下表所示。

参数 参数说明
uid 用户 ID,指定是哪个用户的网络质量统计。
txQuality 该用户的上行网络质量。
rxQuality 该用户的下行网络质量。

其中网络质量 RtcNetworkQualityType 的各枚举值如下表所示。

枚举值 说明
kNERtcNetworkQualityUnknown 当前网络质量未知。
kNERtcNetworkQualityExcellent 当前网络质量极好。
kNERtcNetworkQualityGood 当前网络状态不错。
kNERtcNetworkQualityPoor 当前网络状态一般。
kNERtcNetworkQualityBad 当前网络状态比较差,可能出现卡顿和网络延迟。
kNERtcNetworkQualityVeryBad 当前网络状态非常差,无法保证正常的通话质量。
kNERtcNetworkQualityDown 完全无法沟通。

统计信息同步

OnRtcStats 回调向您同步本地通话统计信息。其中包含通话时长、当前通话房间中的人数、当前系统的 CPU 使用率、当前 App 的 CPU 使用率等重要数据。

参数 参数说明
cpuAppUsage、cpuIdleUsage、cpuTotalUsage App 的 CPU 使用率、系统的 CPU 空闲率和系统的 CPU 使用率。
memoryAppUsage、memoryAppKbytes、memoryTotalUsage App 的内存使用率、内存使用量、系统的内存使用率
totalDuration 通话总时长,单位为秒。
txBytes/rxBytes 累计发送/接收字节数。
txAudioBytes/rxAudioBytes 音频发送/接收字节数。
txVideoBytes/rxVideoBytes 视频发送/接收字节数。
txAudioKbitrate/rxAudioKbitrate 音频接收/发送码率,单位为 Kbps。
txVideoKbitrate/rxVideoKbitrate 视频接收/发送码率,单位为 Kbps。
upRtt/downRtt 上行/下行平均往返时延,单位为毫秒。
txAudioPacketLossRate/rxAudioPacketLossRate 本地上行/下行音频实际丢包率。
txAudioPacketLossSum/rxAudioPacketLossSum 本地上行/下行音频实际丢包数。
txAudioJitter/rxAudioJitter 本地上行/下行音频抖动计算,单位为毫秒。
txVideoJitter/rxVideoJitter 本地上行/下行视频抖动计算,单位为毫秒。
txVideoPacketLossRate/rxVideoPacketLossRate 本地上行/下行视频实际丢包率。
txVideoPacketLossSum/rxVideoPacketLossSum 本地上行/下行视频实际丢包数。

音频质量同步

本地音频流统计信息同步

OnLocalAudioStats 回调向您同步本地设备发送音频流的统计信息,包括当前通话声道数(单声道或双声道)、发送音频的采样率和发送音频的码率。SDK 会每隔 2 秒自动触发本回调。

参数 参数说明
numChannels 当前采集的声道数。
sentSampleRate 统计周期内本地上行音频采样率,单位为 Hz。
sentBitrate 统计周期内发送码率的平均值,单位为 Kbps。
audioLossRate 特定时间内的音频丢包率。
rtt 平均往返时延(RTT)。
volume 音量,取值范围为 0 ~ 100。

远端音频流统计信息同步

OnRemoteAudioStats 回调向您同步当前通话中每个远端用户音频流的统计信息,包括每个远端用户发送的音频流质量、声道数等信息。SDK 会每隔 2 秒自动触发本回调。

参数 参数说明
uid 用户 ID,指定是哪个用户的音频流。
receivedBitrate 统计周期内接收到的码率平均值,单位为 Kbps。
totalFrozenTime 远端用户在加入房间后发生音频卡顿的累计时长,单位为毫秒。一个统计周期内,音频丢帧率达到 4% 即记为一次音频卡顿。
frozenRate 远端用户下行音频平均卡顿率。其值为远端用户在加入房间后发生音频卡顿的累计时长占音频总有效时长的百分比。
audioLossRate 统计周期内的远端音频流的丢帧率。
volume 音量,取值范围为 0 ~ 100。

视频质量同步

本地视频流统计信息同步

OnLocalVideoStats 回调向您同步本地设备发送视频流的统计信息,包括视频编码宽/高等信息。SDK 会每隔 2 秒自动触发本回调。

若您此前调用 EnableDualStreamMode 方法开启了双流模式,则本回调描述本地设备发送的视频大流的统计信息。

参数 参数说明
layerType 视频流通道类型。
  • 1:主流。
  • 2:辅流。
  • width 视频编码宽度,单位为 px。
    height 视频编码高度,单位为 px。
    captureFrameRate 视频采集帧率,单位为 fps。
    renderFrameRate 视频渲染帧率,单位为 fps。
    encoderFrameRate 编码帧率,单位为 fps。
    sentFrameRate 实际发送帧率,单位为 fps,不包含丢包后重传视频等的发送帧率。
    sentBitrate 实际发送码率,单位为 Kbps,不包含丢包后重传视频等的发送码率。
    targetBitrate 当前编码器的目标编码码率,单位为 Kbps,该码率为 SDK 根据当前网络状况预估的一个值。
    encoderBitrate 编码器实际编码码率,单位为 Kbps。
    codecName 视频编码器的名称。

    远端视频流统计信息同步

    OnRemoteVideoStats 回调向您同步当前通话中每个远端用户/主播的视频流的统计信息,包括每个远端用户的视频宽/高等其他参数信息。SDK 会每隔 2 秒自动触发本回调。

    参数 参数说明
    layerType 视频流通道类型。
  • 1:主流。
  • 2:辅流。
  • width 远端视频编码宽度,单位为 px。
    height 远端视频编码高度,单位为 px。
    receivedBitrate 接收到的码率,单位为 Kbps。
    receivedFrameRate 接收到的帧率,单位为 fps。
    decoderFrameRate 解码帧率,单位为 fps。
    renderFrameRate 渲染帧率,单位为 fps。
    packetLossRate 远端视频下行丢包率。
    totalFrozenTime 远端用户加入房间后,其下行视频卡顿累计时长,单位为毫秒。
    frozenRate 远端用户加入房间后,其下行视频平均卡顿率,其值为视频卡顿的累计时长占视频总有效时长的百分比。
    codecName 视频编码器的名称。
    此文档是否对你有帮助?
    有帮助
    去反馈
    • 功能介绍
    • 实现方法
    • 上下行网络质量同步
    • 统计信息同步
    • 音频质量同步
    • 本地音频流统计信息同步
    • 远端音频流统计信息同步
    • 视频质量同步
    • 本地视频流统计信息同步
    • 远端视频流统计信息同步