通话中质量监测
更新时间: 2024/08/05 15:02:55
在通话场景中,开发者经常需要了解当前通话的通话质量、设备状态等信息,监测通话的整体体验;也可将部分质量数据在 UI 层面展示给用户,使用户能够及时了解当前通话的整体质量。
NERTC SDK 支持将关键的音视频状况、网络状况、设备状态的相关指标实时回调给 APP 应用层,应用层可以将收到的数据进行展示或统计。
上下行网络质量同步
onNetworkQuality 回调向您同步当前通话中每个成员的上下行网络质量。
- 上行网络质量打分基于实际发送码率、上行网络丢包率、平均往返时延和上行网络抖动计算。
- 下行网络质量打分基于下行网络丢包率、平均往返时延和下行网络抖动计算。
注意:
- 每隔 2 秒您会收到房间内所有用户的网络质量同步。
- 实际发送码率与目标发送码率的比值越高,该网络下的通话质量越好,该网络质量打分越高。
统计信息同步
onRtcStats 回调向您同步本地通话统计信息。其中包含通话时长、当前通话房间中的人数、当前系统的 CPU 使用率、当前 App 的 CPU 使用率等重要数据。
参数 | 描述 |
cpuAppUsage、cpuTotalUsage | App 的 CPU 使用率和系统的 CPU 使用率。 |
memoryAppUsageRatio、memoryAppUsageInKBytes、memoryTotalUsageRatio | 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 | 本地上行/下行视频实际丢包数。 |
音频质量同步
本地音频流统计信息同步
onLocalAudioStat 回调向您同步本地设备发送音频流的统计信息。包括当前通话声道数(单声道或双声道)、发送音频的采样率和发送音频的码率。SDK 会每隔 2 秒自动触发本回调。
参数 | 描述 |
---|---|
numChannels | 当前采集的声道数。 |
sentSampleRate | 统计周期内本地上行音频采样率,单位为 Hz。 |
sentBitrate | 统计周期内发送码率的平均值,单位为 Kbps。 |
lossRate | 特定时间内的音频丢包率。 |
rtt | 平均往返时延(RTT)。 |
volume | 音量,范围为 0 ~ 100。 |
远端音频流统计信息同步
onRemoteAudioStats 回调向您同步当前通话中每个远端用户音频流的统计信息。包括每个远端用户发送的音频流质量、声道数等信息。每隔 2 秒您会收到房间内所有远端用户的网络质量同步。
参数 | 描述 |
uid | 用户 ID,指定是哪个用户的音频流。 |
receivedBitrate | 统计周期内接收到的码率平均值,单位为 Kbps。 |
totalFrozenTime | 远端用户在加入房间后发生音频卡顿的累计时长 (ms)。一个统计周期内,音频丢帧率达到 4% 即记为一次音频卡顿。 |
frozenRate | 远端用户下行音频平均卡顿率。其值为远端用户在加入房间后发生音频卡顿的累计时长占音频总有效时长的百分比。 |
audioLossRate | 统计周期内的远端音频流的丢帧率。 |
volume | 音量,范围为 0 ~ 100。 |
视频质量同步
本地视频流统计信息同步
onLocalVideoStat 回调向您同步本地设备发送视频流的统计信息。您可以了解视频编码宽/高等信息。SDK 会每隔 2 秒自动触发本回调。
如果您此前调用 enableDualStreamMode 方法开启双流模式,则本回调描述本地设备发送的视频大流的统计信息。
参数 | 描述 |
layerType | 视频流通道类型。 1:主流;2:辅流。 |
width | 视频编码宽度,单位为 px。 |
height | 视频编码高度,单位为 px。 |
captureFrameRate | 视频采集帧率,单位为 fps。 |
renderFrameRate | 视频渲染帧率,单位为 fps。 |
encoderOutputFrameRate | 编码帧率,单位为 fps。 |
sentFrameRate | 实际发送帧率,单位为 fps,不包含丢包后重传视频等的发送帧率。 |
sendBitrate | 实际发送码率,单位为 Kbps,不包含丢包后重传视频等的发送码率。 |
targetBitrate | 当前编码器的目标编码码率,单位为 Kbps,该码率为 SDK 根据当前网络状况预估的一个值。 |
encoderBitrate | 编码器实际编码码率,单位为 Kbps。 |
encoderName | 视频编码器名字。 |
远端视频流统计信息同步
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 | 视频编码器名字。 |
实现方式
- 使用接口
addEngineMediaStatsObserver:
添加 media 统计信息观测器,实现代理方法中相应的接口,即可收到对应回调。 - 调用
- (int)removeEngineMediaStatsObserver:(id<NERtcEngineMediaStatsObserver>)observer
,删除相关 media 统计信息观测器。 - 调用
- (int)cleanupEngineMediaStatsObserver
,清空所有 media 统计信息观测器。
示例代码
objc// 添加添加 media 统计信息观测者
NERtcEngine *coreEngine = [NERtcEngine sharedEngine];
[coreEngine addEngineMediaStatsObserver:<#observer#>];
//////
/**
observer.m 信息观测者实现代理方法
*/
- (void)onRtcStats:(NERtcStats *)stat {
// 当前通话统计回调
}
- (void)onLocalAudioStat:(NERtcAudioSendStats *)stat {
// 本地音频流统计信息回调
}
- (void)onRemoteAudioStats:(NSArray<NERtcAudioRecvStats*> *)stats {
// 本地音频流统计信息回调
}
- (void)onLocalVideoStat:(NERtcVideoSendStats *)stat {
// 本地视频流统计信息回调
}
- (void)onRemoteVideoStats:(NSArray<NERtcVideoRecvStats*> *)stats {
// 通话中远端视频流的统计信息回调
}
- (void)onNetworkQuality:(NSArray<NERtcNetworkQualityStats *> *)stats {
// 通话中每个用户的网络上下行质量同步回调
}
API参考
方法 | 事件描述 |
---|---|
addEngineMediaStatsObserver | 添加 media 统计信息观测器 |
removeEngineMediaStatsObserver | 删除 media 统计信息观测器 |
cleanupEngineMediaStatsObserver | 清空 media 统计信息观测器 |
事件 | 事件描述 |
---|---|
onRemoteAudioStats | 通话中远端音频流的统计信息回调 |
onRtcStats | 当前通话统计回调 |
onNetworkQuality | 通话中每个用户的网络上下行质量同步回调 |
onLocalAudioStat | 本地音频流统计信息回调 |
onLocalVideoStat | 本地视频流统计信息回调 |
onRemoteVideoStats | 通话中远端视频流的统计信息回调 |
此文档是否对你有帮助?