通话数据统计
SDK 通过通话状态数据监听类 IRCRTCStatusReportListener 提供详细数据,上层依据此数据可进行提示,状态判断等处理。
IRCRTCStatusReportListener
监听器提供两个回调方法:
- onConnectionStats :上报音视频统计数据,例如音视频流相关用户数据、音视频流质量数据、网络状态与质量数据等。
- reportLiveAudioStates (要求 SDK 版本 ≧ 5.1.11):上报音频合流中每个主播的音量数据。
注册通话状态数据监听器
通过 RCRTCEngine.getInstance().registerStatusReportListener
方法注册。
通过 RCRTCEngine.getInstance().unregisterStatusReportListener
取消注册。
注册监听器后,上层会收到底层音视频库在音视频通话过程中上报的通话详细数据。上报频率按照 RCRTCConfig#setStatusReportInterval
中指定的时间间隔(默认1秒)。
onConnectionStats
onConnectionStats 回调方法通过 StatusReport 对象上报音视频统计数据。
回调参数 | 类型 | 说明 |
---|---|---|
statusReport | StatusReport | 状态信息的输出,默认每秒输出一次。参见下方 StatusReport 类的说明。 |
-
StatusReport
类说明:StatusReport
属性类型 说明 statusVideoSends HashMap<String, StatusBean> 视频发送状态信息,key 为 streamId。参见下方 StatusBean
类说明。statusAudioSends HashMap<String, StatusBean> 音频发送状态信息,key 为 streamId。 statusVideoRcvs HashMap<String, StatusBean> 视频接收状态信息,key 为 streamId。 statusAudioRcvs HashMap<String, StatusBean> 音频接收状态信息,key 为 streamId。 bitRateSend long 发送码率,单位:kbps bitRateRcv long 接收码率,单位:kbps rtt int 往返延时,单位:ms networkType String 当前使用的网络类型 ipAddress String 本端IP地址 availableReceiveBandwidth String 可用接收宽带 availableSendBandwidth String 可用发送宽带 packetsDiscardedOnSend String 发送端丢包数 -
StatusBean
类说明:StatusBean
属性类型 说明 id String 音/视频流 ID uid String 用户的 UID codecName String 音视频编码格式: H264 / Opus mediaType String 媒体类型:video / audio packetLostRate long 丢包率:取值范围是 0-100 isSend boolean 发送类型,true为发送 frameHeight int 视频高 frameWidth int 视频宽 frameRate int 视频帧率 bitRate long 码率,单位:kbps rtt int 往返延时:ms jitterReceived int 网络抖动, 单位: ms firstReceived int 第一个关键帧是否正常收到 audioLevel String 接收的音频流音量大小 codecImplementationName String 编码方式 plisReceived String (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。
回调参数 | 类型 | 说明 |
---|---|---|
audioStates | List<RCRTCLiveAudioState> | 上报主播音量的数组 |
-
RCRTCLiveAudioState
类说明:RCRTCLiveAudioState
属性类型 说明 userId String 主播用户 Id streamId String 流 Id audioLevel int 音量大小, 0-9 表示音量高低