跳到主要内容

通话数据统计

音视频通话过程中,底层音视频库会按照 RCRTCEngineSetup#statsReportInterval 中指定的时间间隔(默认1秒)上报通话的详细数据,上层依据此数据可进行提示,状态判断等处理。

设置通话数据统计监听

方法

Dart
RCRTCEngine.setStatsListener();

参数说明

参数类型必填说明
listenerRCRTCStatsListener统计监听器,传 null 表示取消监听

示例代码

Dart
/// 设置状态监听回调
engine.setStatsListener(StatsListenerImpl());

/// 取消状态监听回调
engine.setStatsListener(null);

统计回调详细说明

网络状态统计回调

方法

Dart
RCRTCStatsListener.onNetworkStats();

参数说明

参数类型描述
statsRCRTCNetworkStats网络状态信息

示例代码

Dart

void onNetworkStats(RCRTCNetworkStats stats) {
// 网络状态信息
print('网络类型: ${stats.type}');
print('IP地址: ${stats.ip}');
print('发送码率: ${stats.sendBitrate} kbps');
print('接收码率: ${stats.receiveBitrate} kbps');
print('往返延时: ${stats.rtt} ms');
}

本地音频统计回调

方法

Dart
RCRTCStatsListener.onLocalAudioStats();

参数说明

参数类型描述
statsRCRTCLocalAudioStats音频发送状态信息

示例代码

Dart

void onLocalAudioStats(RCRTCLocalAudioStats stats) {
// 音频发送状态信息
print('音频编码类型: ${stats.codec}');
print('音频码率: ${stats.bitrate} kbps');
print('音频音量: ${stats.volume}');
print('音频丢包率: ${stats.packageLostRate}%');
print('音频往返延时: ${stats.rtt} ms');
}

本地视频统计回调

方法

Dart
RCRTCStatsListener.onLocalVideoStats();

参数说明

参数类型描述
statsRCRTCLocalVideoStats视频发送状态信息

示例代码

Dart

void onLocalVideoStats(RCRTCLocalVideoStats stats) {
// 视频发送状态信息
print('视频流类型: ${stats.tiny ? "小流" : "大流"}');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}

本地自定义视频统计回调

方法

Dart
RCRTCStatsListener.onLocalCustomVideoStats();

参数说明

参数类型描述
tagString自定义视频资源 TAG
statsRCRTCLocalVideoStats自定义视频资源发送状态信息

示例代码

Dart

void onLocalCustomVideoStats(String tag, RCRTCLocalVideoStats stats) {
// 自定义视频发送状态信息
print('自定义视频TAG: $tag');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}

远端音频统计回调

方法

Dart
RCRTCStatsListener.onRemoteAudioStats();

参数说明

参数类型描述
userIdString远端用户 ID
statsRCRTCRemoteAudioStats音频接收质量状态信息

示例代码

Dart

void onRemoteAudioStats(String userId, RCRTCRemoteAudioStats stats) {
// 音频接收状态信息
print('远端用户ID: $userId');
print('音频编码类型: ${stats.codec}');
print('音频码率: ${stats.bitrate} kbps');
print('音频音量: ${stats.volume}');
print('音频丢包率: ${stats.packageLostRate}%');
print('音频往返延时: ${stats.rtt} ms');
}

远端视频统计回调

方法

Dart
RCRTCStatsListener.onRemoteVideoStats();

参数说明

参数类型描述
userIdString远端用户 ID
statsRCRTCRemoteVideoStats视频接收质量状态信息

示例代码

Dart

void onRemoteVideoStats(String userId, RCRTCRemoteVideoStats stats) {
// 视频接收状态信息
print('远端用户ID: $userId');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}

合流音频统计回调

方法

Dart
RCRTCStatsListener.onLiveMixAudioStats();

参数说明

参数类型描述
statsRCRTCRemoteAudioStats合流音频接收质量状态信息

示例代码

Dart

void onLiveMixAudioStats(RCRTCRemoteAudioStats stats) {
// 合流音频接收状态信息
print('合流音频编码类型: ${stats.codec}');
print('合流音频码率: ${stats.bitrate} kbps');
print('合流音频音量: ${stats.volume}');
print('合流音频丢包率: ${stats.packageLostRate}%');
print('合流音频往返延时: ${stats.rtt} ms');
}

合流成员音频统计回调

方法

Dart
RCRTCStatsListener.onLiveMixMemberAudioStats();

参数说明

参数类型描述
userIdString远端用户 ID
volumeint远端用户音量

示例代码

Dart

void onLiveMixMemberAudioStats(String userId, int volume) {
// 合流成员音频状态信息
print('合流成员用户ID: $userId');
print('合流成员音量: $volume');
}

合流视频统计回调

方法

Dart
RCRTCStatsListener.onLiveMixVideoStats();

参数说明

参数类型描述
statsRCRTCRemoteVideoStats合流视频接收质量状态信息

示例代码

Dart

void onLiveMixVideoStats(RCRTCRemoteVideoStats stats) {
// 合流视频接收状态信息
print('合流视频编码类型: ${stats.codec}');
print('合流视频码率: ${stats.bitrate} kbps');
print('合流视频帧率: ${stats.fps} fps');
print('合流视频分辨率: ${stats.width}x${stats.height}');
print('合流视频丢包率: ${stats.packageLostRate}%');
print('合流视频往返延时: ${stats.rtt} ms');
}

远端自定义视频统计回调

方法

Dart
RCRTCStatsListener.onRemoteCustomVideoStats();

参数说明

参数类型描述
userIdString远端用户 ID
tagString远端自定义视频资源 TAG
statsRCRTCRemoteVideoStats自定义视频资源接收质量状态信息

示例代码

Dart

void onRemoteCustomVideoStats(String userId, String tag, RCRTCRemoteVideoStats stats) {
// 自定义视频接收状态信息
print('远端用户ID: $userId');
print('自定义视频TAG: $tag');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}

统计数据结构说明

RCRTCNetworkStats 网络状态信息

属性类型说明
typeRCRTCNetworkType网络类型,未知/WIFI/移动网络
ipStringIP 地址
sendBitrateint发送码率,单位:kbps
receiveBitrateint接收码率,单位:kbps
rttint往返延时,单位:ms

RCRTCLocalAudioStats 本地音频统计

属性类型说明
codecRCRTCAudioCodecType编码类型,PCMU/OPUS
bitrateint码率,单位:kbps
volumeint音量
packageLostRateint丢包率:取值范围是 0-100
rttint往返延时,单位:ms

RCRTCLocalVideoStats 本地视频统计

属性类型说明
tinybool小流标记,true 小流,false 大流
codecRCRTCVideoCodecType编码类型,H264
bitrateint码率,单位:kbps
fpsint视频帧率
widthint视频宽度
heightint视频高度
packageLostRateint丢包率:取值范围是 0-100
rttint往返延时,单位:ms

RCRTCRemoteAudioStats 远端音频统计

属性类型说明
codecRCRTCAudioCodecType编码类型,PCMU/OPUS
bitrateint码率,单位:kbps
volumeint音量
packageLostRateint丢包率:取值范围是 0-100
rttint往返延时,单位:ms

RCRTCRemoteVideoStats 远端视频统计

属性类型说明
codecRCRTCVideoCodecType编码类型,H264
bitrateint码率,单位:kbps
fpsint视频帧率
widthint视频宽度
heightint视频高度
packageLostRateint丢包率:取值范围是 0-100
rttint往返延时,单位:ms

完整示例代码

Dart
class StatsListenerImpl implements RCRTCStatsListener {


void onNetworkStats(RCRTCNetworkStats stats) {
// 网络状态信息
print('网络类型: ${stats.type}');
print('IP地址: ${stats.ip}');
print('发送码率: ${stats.sendBitrate} kbps');
print('接收码率: ${stats.receiveBitrate} kbps');
print('往返延时: ${stats.rtt} ms');
}


void onLocalAudioStats(RCRTCLocalAudioStats stats) {
// 音频发送状态信息
print('音频编码类型: ${stats.codec}');
print('音频码率: ${stats.bitrate} kbps');
print('音频音量: ${stats.volume}');
print('音频丢包率: ${stats.packageLostRate}%');
print('音频往返延时: ${stats.rtt} ms');
}


void onLocalVideoStats(RCRTCLocalVideoStats stats) {
// 视频发送状态信息
print('视频流类型: ${stats.tiny ? "小流" : "大流"}');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}


void onLocalCustomAudioStats(String tag, RCRTCLocalAudioStats stats) {
// 暂时无回调
}


void onLocalCustomVideoStats(String tag, RCRTCLocalVideoStats stats) {
// 自定义视频发送状态信息
print('自定义视频TAG: $tag');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}


void onRemoteAudioStats(String userId, RCRTCRemoteAudioStats stats) {
// 音频接收状态信息
print('远端用户ID: $userId');
print('音频编码类型: ${stats.codec}');
print('音频码率: ${stats.bitrate} kbps');
print('音频音量: ${stats.volume}');
print('音频丢包率: ${stats.packageLostRate}%');
print('音频往返延时: ${stats.rtt} ms');
}


void onRemoteVideoStats(String userId, RCRTCRemoteVideoStats stats) {
// 视频接收状态信息
print('远端用户ID: $userId');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}


void onLiveMixAudioStats(RCRTCRemoteAudioStats stats) {
// 合流音频接收状态信息
print('合流音频编码类型: ${stats.codec}');
print('合流音频码率: ${stats.bitrate} kbps');
print('合流音频音量: ${stats.volume}');
print('合流音频丢包率: ${stats.packageLostRate}%');
print('合流音频往返延时: ${stats.rtt} ms');
}


void onLiveMixMemberAudioStats(String userId, int volume) {
// 合流成员音频状态信息
print('合流成员用户ID: $userId');
print('合流成员音量: $volume');
}


void onLiveMixVideoStats(RCRTCRemoteVideoStats stats) {
// 合流视频接收状态信息
print('合流视频编码类型: ${stats.codec}');
print('合流视频码率: ${stats.bitrate} kbps');
print('合流视频帧率: ${stats.fps} fps');
print('合流视频分辨率: ${stats.width}x${stats.height}');
print('合流视频丢包率: ${stats.packageLostRate}%');
print('合流视频往返延时: ${stats.rtt} ms');
}


void onRemoteCustomAudioStats(String userId, String tag, RCRTCRemoteAudioStats stats) {
// 暂时无回调
}


void onRemoteCustomVideoStats(String userId, String tag, RCRTCRemoteVideoStats stats) {
// 自定义视频接收状态信息
print('远端用户ID: $userId');
print('自定义视频TAG: $tag');
print('视频编码类型: ${stats.codec}');
print('视频码率: ${stats.bitrate} kbps');
print('视频帧率: ${stats.fps} fps');
print('视频分辨率: ${stats.width}x${stats.height}');
print('视频丢包率: ${stats.packageLostRate}%');
print('视频往返延时: ${stats.rtt} ms');
}

}

/// 设置状态监听回调
engine.setStatsListener(StatsListenerImpl());

/// 取消状态监听回调
engine.setStatsListener(null);