文档中心
ExpressVideoSDK 实时音视频
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 实时音视频
  • 通信能力
  • 通话质量监测

通话质量监测

更新时间:2024-01-12 18:52

功能简介

在使用 ZEGO Express SDK 进行通话中,用户有时会出现网络不好的情况,此时您可以通过相关回调了解当前通话的网络质量和音频/视频信息的变化。

例如,在进行多人音视频通话或者多人唱歌时,我们需要实时显示用户的网络质量,就可以参考本文档实现相应功能。

示例源码下载

请参考 下载示例源码 获取源码。

相关源码请查看 “src/Examples/AdvancedStreaming/StreamMonitoring” 目录下的文件。

前提条件

在监测通话质量之前,请确保:

  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 Server 地址,详情请参考 控制台 - 项目信息。
  • 已在项目中集成 ZEGO Express SDK,并实现了基本的音视频推拉流功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。

基础网络质量报告

您可以通过监听 networkQuality 回调,收到用户(包括您自己)的上下行网络质量。此回调每隔两秒会收到一次,网络质量等级请参考 QualityGrade。

networkQuality 回调逻辑:

  • 您只要推流或者拉流,就能收到自己的网络质量回调。
  • 当您拉取了其他用户推送的音视频流并且该用户在您的房间内时,您才会收到该用户的网络质量回调。
  • 当 “userID” 为 ""(空字符串)时,代表本次是您自己的网络质量,当 “userID” 不为 ""(空字符串)时,代表是房间内其他用户的报告。
  • 可预估远端推流用户的网络情况,如果远端推流用户心跳丢失 1 次,回调其网络质量为 unknown;如果远端推流用户心跳丢失达到 3 次,回调其网络质量为 die。

networkQuality 不适用于使用 CDN 进行直播的场景。

zg.on("networkQuality", (userID, upstreamQuality, downstreamQuality) => {
        console.log("networkQuality", userID, upstreamQuality, downstreamQuality)
})

进阶质量报告

如果上述的基础网络质量报告不能满足您的需求,ZEGO 还提供了更详细的推流质量报告、拉流质量报告以及其他相关信息。

推流质量报告

推流质量报告,是指描述用户把音视频推送到 ZEGO 服务端这个过程的质量报告,包含了采集、编码阶段音视频流的帧率,传输(发送)的音视频流的帧率、码率、延时及丢包率。

您可以通过注册 publishQualityUpdate 接收推流质量回调,推流成功后每隔三秒会收到此回调。可根据 stats(ZegoPublishStats) 参数实时了解推送的音视频流的健康情况。

  • 大多数情况下,您只需关注 video 的 videoQuality 参数 和 audio 的 audioQuality 参数,可通过这两个参数的枚举值来判断推流的综合质量。
  • 如果您想关注更详细的推流质量参数,可以参考 ZegoPublishStats。
zg.on('publishQualityUpdate', (streamId, stats) => {
    console.log('publishQualityUpdate', streamId, stats);
})

推流质量详解

推流质量包括有推流时的视频质量和音频质量,分别是视频码率、音频码率、视频帧率等。

视频质量

推流时的视频质量 ZegoPublishVideoStats 数据的相关参数如下:

参数名称 说明
frameHeight
采集视频高。
frameWidth
采集视频宽。
googCodecName
视频编码格式。
muteState
视轨是否被关闭。
videoBitrate
视频码率,单位为 kbps。
videoFPS
视频编码帧率,单位为 f/s。
videoPacketsLost
视频丢包数。
videoPacketsLostRate
视频丢包率,单位为百分比,范围为 0.0 ~ 1.0。
videoTransferFPS
视频发送帧率,单位为 f/s。
videoQuality
推流视频质量:

  • -1:未知
  • 0:极好
  • 1:好
  • 2:中等  
  • 3:差  
  • 4:极差

音频质量

推流时的音频质量 ZegoPublishAudioStats 的相关参数如下:

参数名称 说明
 audioBitrate
音频码率,单位为 kbps。
audioPacketsLost
音频丢包数。
audioPacketsLostRate
音频丢包率,单位为百分比,范围为 0.0 ~ 1.0。
googCodecName
音频编码格式。
muteState
音轨是否被关闭。
audioFPS
音频帧率,单位为 f/s。
audioQuality
推流音频质量:

  • -1:未知
  • 0:极好
  • 1:好
  • 2:中等
  • 3:差
  • 4:极差

拉流质量报告

拉流质量报告,是指用户拉取播放音视频流这个过程的质量报告,包含了接收的音视频流的帧率、码率、延时和丢包率,解码阶段音视频流的帧率、音视频整体质量。

您可以通过注册 playQualityUpdate 接收拉流质量回调,拉流成功后每隔三秒会收到此回调。开发者可根据 stats(ZegoPlayStats) 参数实时了解拉取的音视频流的健康情况。

  • 大多数情况下,您只需关注 video 的 videoQuality 参数和 audio 的 audioQuality 参数,可通过这两个参数的枚举值来判断拉流的综合质量。
  • 如果您想关注更详细的拉流质量参数,可以参考 ZegoPlayStats。
zg.on('playQualityUpdate', (streamId, stats) => {
    console.log('publishQualityUpdate', streamId, stats);
})

拉流质量详解

拉流质量包括有拉流时的视频质量和音频质量,分别是视频码率、音频码率、视频帧率等。

视频质量

拉流时的视频质量 ZegoPlayVideoStats 数据的相关参数如下:

参数名称 说明
frameHeight
接收视频高。
frameWidth
接收视频宽。
googCodecName
视频编码格式。
muteState
视轨是否被关闭。
videoBitrate
视频码率,单位为 kbps。
videoFPS
视频解码帧率,单位为 f/s。
videoPacketsLost
视频丢包数。
videoPacketsLostRate
视频丢包率,单位为百分比,范围为 0.0 ~ 1.0。
videoTransferFPS
视频接收帧率,单位为 f/s。
videoFramesDecoded
视频解码总大小。
videoFramesDropped
当前实际接收的视频帧丢失数。
videoQuality
拉流视频质量:

  • -1:未知
  • 0:极好
  • 1:好  
  • 2:中等  
  • 3:差  
  • 4:极差

音频质量

拉流时的音频质量 ZegoPlayAudioStats 的相关参数如下:

参数名称 说明
audioBitrate
音频码率,单位为 kbps。
audioJitter
网络抖动。
audioLevel
音量。
audioPacketsLost
丢包数。
audioPacketsLostRate
丢包率,单位为百分比,范围为 0.0 ~ 1.0。
audioSamplingRate
采样率。
muteState
音轨是否被关闭。
audioFPS
音频帧率,单位为 f/s。
audioSendLevel
音频发送能量。
googCodecName
音频编码格式。
audioQuality
拉流音频质量:

  • -1:未知
  • 0:极好
  • 1:好
  • 2:中等
  • 3:差
  • 4:极差

其他信息监测

推流/拉流状态变化通知

推流状态回调

在推流成功后,您可以通过 publisherStateUpdate 获取推流状态变更的通知。

zg.on('publisherStateUpdate', result => {
    console.log('publisherStateUpdate: ', result.streamID, result.state, result);
});

您可以根据回调内的 state 参数是否在 “正在请求推流状态” 来大体判断用户的推流网络情况。state 参数的取值与用户推流状态对应如下:

状态值 说明
NO_PUBLISH
未推流状态,在推流前处于该状态。如果推流过程出现稳态的异常,例如 AppID、AppSign、或 Token 等不正确,或者如果其他用户已经在推送流,推送相同流 ID 的流会失败,都会进入未推流状态。
PUBLISH_REQUESTING
正在请求推流状态,推流操作执行成功后会进入正在请求推流状态,通常通过该状态进行 UI 界面的展示。如果因为网络质量不佳产生的中断,SDK 会进行内部重试,也会回到正在请求推流状态。
PUBLISHING
正在推流状态,进入该状态表明推流已经成功,用户可以正常通信。

拉流状态变更回调

在拉流成功后,开发者可通过 playerStateUpdate 获取拉流状态变更的通知。

zg.on('playerStateUpdate', result => {
        console.warn('playerStateUpdate', result.streamID, result.state);
})

开发者可根据 state 参数是否在 “正在请求拉流状态” 来大体判断用户的拉流网络情况。state 参数的取值与用户拉流状态对应如下:

状态值 说明
NO_PLAY
未拉流状态,在拉流前处于该状态。如果拉流过程出现稳态的异常,例如 AppID、AppSign、或 Token 等不正确,都会进入未拉流状态。
PLAY_REQUESTING
正在请求拉流状态,拉流操作执行成功后会进入正在请求拉流状态,通常通过该状态进行应用界面的展示。如果因为网络质量不佳产生的中断,SDK 会进行内部重试,也会回到正在请求拉流状态。
PLAYING
正在拉流状态,进入该状态表明拉流已经成功,用户可以正常通信。

相关文档

  • 怎么处理视频卡顿问题?
  • 怎么处理音频卡顿问题?
  • 如何理解和使用 SEI(媒体补充增强信息)?
本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈