跳到主要内容

通话数据统计

SDK 通过通话状态数据监听类 IRCRTCStatusReportListener 提供详细数据,上层依据此数据可进行提示,状态判断等处理。

IRCRTCStatusReportListener 监听器提供两个回调方法:

  • onConnectionStats :上报音视频统计数据,例如音视频流相关用户数据、音视频流质量数据、网络状态与质量数据等。
  • reportLiveAudioStates (要求 SDK 版本 ≧ 5.1.11):上报音频合流中每个主播的音量数据。

注册通话状态数据监听器

通过 RCRTCEngine.getInstance().registerStatusReportListener 方法注册。

通过 RCRTCEngine.getInstance().unregisterStatusReportListener 取消注册。

注册监听器后,上层会收到底层音视频库在音视频通话过程中上报的通话详细数据。上报频率按照 RCRTCConfig#setStatusReportInterval 中指定的时间间隔(默认1秒)。

onConnectionStats

onConnectionStats 回调方法通过 StatusReport 对象上报音视频统计数据。

回调参数类型说明
statusReportStatusReport状态信息的输出,默认每秒输出一次。参见下方 StatusReport 类的说明
  • StatusReport 类说明

    StatusReport 属性类型说明
    statusVideoSendsHashMap<String, StatusBean>视频发送状态信息,key 为 streamId。参见下方 StatusBean 类说明
    statusAudioSendsHashMap<String, StatusBean>音频发送状态信息,key 为 streamId。
    statusVideoRcvsHashMap<String, StatusBean>视频接收状态信息,key 为 streamId。
    statusAudioRcvsHashMap<String, StatusBean>音频接收状态信息,key 为 streamId。
    bitRateSendlong发送码率,单位:kbps
    bitRateRcvlong接收码率,单位:kbps
    rttint往返延时,单位:ms
    networkTypeString当前使用的网络类型
    ipAddressString本端IP地址
    availableReceiveBandwidthString可用接收宽带
    availableSendBandwidthString可用发送宽带
    packetsDiscardedOnSendString发送端丢包数
  • StatusBean 类说明

    StatusBean 属性类型说明
    idString音/视频流 ID
    uidString用户的 UID
    codecNameString音视频编码格式: H264 / Opus
    mediaTypeString媒体类型:video / audio
    packetLostRatelong丢包率:取值范围是 0-100
    isSendboolean发送类型,true为发送
    frameHeightint视频高
    frameWidthint视频宽
    frameRateint视频帧率
    bitRatelong码率,单位:kbps
    rttint往返延时:ms
    jitterReceivedint网络抖动, 单位: ms
    firstReceivedint第一个关键帧是否正常收到
    audioLevelString接收的音频流音量大小
    codecImplementationNameString编码方式
    plisReceivedString(Picture Loss Indication) PLI请求
  • 代码示例:

    RCRTCEngine.getInstance().registerStatusReportListener(new IRCRTCStatusReportListener() {

    @Override
    public void onConnectionStats(StatusReport statusReport) {
    // 视频接收信息
    for (Map.Entry<String, StatusBean> entry : statusReport.statusVideoRcvs.entrySet()) {
    StatusBean statusBean = entry.getValue();
    //获取userID
    String userId = statusBean.uid;
    //获取视频 宽x高@帧率
    String resolution = statusBean.frameWidth +"x"+statusBean.frameHeight+"@"+statusBean.frameRate;
    //获取码率
    long bitRate = statusBean.bitRate;
    //丢包率
    long lossRate = statusBean.packetLostRate;
    }
    //视频发送信息
    for (Map.Entry<String, StatusBean> entry : statusReport.statusVideoSends.entrySet()) {
    ... 同视频接收,代码省略
    }
    }
    });

reportLiveAudioStates

提示
  • 5.1.11 版本增加了 reportLiveAudioStates 回调方法。
  • 5.1.11 之前的版本,当观众订阅音频合流时只能获取合流的音量而无法单独获取每个主播的音量。

reportLiveAudioStates 回调方法通过 List<RCRTCLiveAudioState> 上报音频合流中各主播的音量。

从 5.1.11 开始,观众订阅音频合流,SDK 会通过 reportLiveAudioStates 方法实时上报音频合流的声音状态。例如当前音频合流由 A B C 三个主播音频流产生,此时 A 在发声,SDK 会通过该方法回调 RCRTCLiveAudioState 类型的数组,数组中包含 A 主播的音量 audioLevel 取值是 0 ~ 9。

回调参数类型说明
audioStatesList<RCRTCLiveAudioState>上报主播音量的数组
  • RCRTCLiveAudioState 类说明:

    RCRTCLiveAudioState 属性类型说明
    userIdString主播用户 Id
    streamIdString流 Id
    audioLevelint音量大小, 0-9 表示音量高低