通话中质量监测

更新时间: 2024/08/05 15:02:55

在通话场景中,开发者经常需要了解当前通话的通话质量、设备状态等信息,监测通话的整体体验;也可将部分质量数据在 UI 层面展示给用户,使用户能够及时了解当前通话的整体质量。

NERTC SDK 支持将关键的音视频状况、网络状况、设备状态的相关指标实时回调给 APP 应用层,应用层可以将收到的数据进行展示或统计。

上下行网络质量同步

onNetworkQuality 回调向您同步当前通话中每个成员的上下行网络质量。

  • 上行网络质量打分基于实际发送码率、上行网络丢包率、平均往返时延和上行网络抖动计算。
  • 下行网络质量打分基于下行网络丢包率、平均往返时延和下行网络抖动计算。

注意

  • 每隔 2 秒您会收到房间内所有用户的网络质量同步。
  • 实际发送码率与目标发送码率的比值越高,该网络下的通话质量越好,该网络质量打分越高。网络质量类型请参考网络质量类型

统计信息同步

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

参数 描述
cpu_app_usage、cpu_idle_usage、cpu_total_usage App 的 CPU 使用率、系统的 CPU 空闲率和系统的 CPU 使用率。
memory_app_usage、memory_app_kbytes、memory_total_usage App的内存使用率、内存使用量、系统的内存使用率
total_duration 通话总时长(秒)。
tx_bytes/rx_bytes 累计发送/接收字节数。
tx_audio_bytes/rx_audio_bytes 音频发送/接收字节数。
tx_video_bytes/rx_video_bytes 视频发送/接收字节数。
tx_audio_kbitrate/rx_audio_kbitrate 音频接收/发送码率,单位为 kbps。
tx_video_kbitrate/rx_video_kbitrate 视频接收/发送码率,单位为 kbps。
up_rtt/down_rtt 上行/下行平均往返时延,单位为毫秒。
tx_audio_packet_loss_rate/rx_audio_packet_loss_rate 本地上行/下行音频实际丢包率。
tx_audio_packet_loss_sum/rx_audio_packet_loss_sum 本地上行/下行音频实际丢包数。
tx_audio_jitter/rx_audio_jitter 本地上行/下行音频抖动计算,单位为毫秒。
tx_video_jitter/rx_video_jitter 本地上行/下行视频抖动计算,单位为毫秒。
tx_video_packet_loss_rate/rx_video_packet_loss_rate 本地上行/下行视频实际丢包率。
tx_video_packet_loss_sum/rx_video_packet_loss_sum 本地上行/下行视频实际丢包数。

音频质量同步

本地音频流统计信息同步

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

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

远端音频流统计信息同步

onRemoteAudioStats 回调向您同步当前通话中每个远端用户音频流的统计信息。包括每个远端用户发送的音频流质量、声道数等信息。每隔 2 秒您会收到房间内所有远端用户的网络质量同步。

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

视频质量同步

本地视频流统计信息同步

onLocalVideoStat(s) 回调向您同步本地设备发送视频流的统计信息。您可以了解视频编码宽/高等信息。SDK 会每隔 2 秒自动触发本回调。

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

参数 描述
layer_type 视频流通道类型。 1:主流;2:辅流。
width 视频编码宽度,单位为 px。
height 视频编码高度,单位为 px。
capture_frame_rate 视频采集帧率,单位为 fps。
render_frame_rate 视频渲染帧率,单位为 fps。
encoder_frame_rate 编码帧率,单位为 fps。
sent_frame_rate 实际发送帧率,单位为 fps,不包含丢包后重传视频等的发送帧率。
sent_bitrate 实际发送码率,单位为 Kbps,不包含丢包后重传视频等的发送码率。
target_bitrate 当前编码器的目标编码码率,单位为 Kbps,该码率为 SDK 根据当前网络状况预估的一个值。
encoder_bitrate 编码器实际编码码率,单位为 Kbps。
codec_name 视频编码器名字。

远端视频流统计信息同步

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

参数 描述
layer_type 视频流通道类型。 1:主流;2:辅流。
width 远端视频编码宽度,单位为 px。
height 远端视频编码高度,单位为 px。
received_bitrate 接收到的码率(Kbps)。
received_frame_rate 接收到的帧率 (fps)。
decoder_frame_rate 解码帧率 (fps)。
render_frame_rate 渲染帧率 (fps)。
packet_loss_rate 远端视频下行丢包率。
total_frozen_time 远端用户加入房间后,其下行视频卡顿累计时长(ms)。
frozen_rate 远端用户加入房间后,其下行视频平均卡顿率,其值为视频卡顿的累计时长占视频总有效时长的百分比。
codec_name 视频编码器名字。

实现方式

  • 注册一个质量观测器(setStatsObserver),主动设置响应回调。
  • 关闭质量监测功能时,传入 null 即可。

示例代码

c++
class StatsObserver : IRtcMediaStatsObserver
{

};

StatsObserver *observer = nullptr;

rtc_engine_->setStatsObserver(observer);

API参考

API 功能描述
setStatsObserver 设置当前通话统计回调

事件 功能描述
onRtcStats 当前通话全局统计回调
onLocalAudioStats 本地音频流统计信息回调
onRemoteAudioStats 通话中远端音频流的统计信息回调
onLocalVideoStats 本地视频流统计信息回调
onRemoteVideoStats 通话中远端音频流的统计信息回调
onNetworkQuality 通话中每个用户的网络上下行质量同步回调
此文档是否对你有帮助?
有帮助
去反馈
  • 上下行网络质量同步
  • 统计信息同步
  • 音频质量同步
  • 本地音频流统计信息同步
  • 远端音频流统计信息同步
  • 视频质量同步
  • 本地视频流统计信息同步
  • 远端视频流统计信息同步
  • 实现方式
  • 示例代码
  • API参考