Service quality

You can use service quality callbacks to notify users about video, audio, and screen sharing quality during a session and unstable network conditions. You can also use these to measure or show latency, FPS, and resolution. Zoom Video SDK optimizes the FPS and resolution to the current device and network capabilities to optimize a good, smooth experience.

Additionally, you can build network strength indicators for your users or a real-time statistics dashboard of video, audio, and screen share quality. This is similar to how Zoom Meetings shares diagnostic information.

If you want near real time analytics to quickly diagnose and resolve network disruptions, consider purchasing a Quality of Service Subscription (QSS) plan to use our QSS API and webhooks for Video SDK.

Network status

The ZoomVideoSDKNetworkStatus enum includes literals representing the network status.

class NetworkStatus {
  static const None = 'ZoomVideoSDKNetwork_None';
  static const Good = 'ZoomVideoSDKNetwork_Good';
  static const Normal = 'ZoomVideoSDKNetwork_Normal';
  static const Bad = 'ZoomVideoSDKNetwork_Bad';
}

To get a network status change callback, there must be at least two users in the session with their video on. You can use the network status returned from the callback to create an icon to show the current network quality.

final networkStatusChangeListener =
      eventListener.addListener(EventType.onUserVideoNetworkStatusChanged, (data) async {
        data = data as Map;
        ZoomVideoSdkUser? networkUser =
        ZoomVideoSdkUser.fromJson(jsonDecode(data['user']));
        if (data['status'] == NetworkStatus.Bad) {
          //Do something
        }
      });

Video quality

The ZoomVideoSdkSession class provides a getVideoStatisticsInfo() function, which returns a ZoomVideoSdkSessionVideoStatisticsInfo object, which provides both sent and received video quality data. See the code snippet and SDK reference for details.

To receive this data, there must be at least two users sending or transmitting video to the session.

ZoomVideoSdkSessionVideoStatisticsInfo? videoInfo = await zoom.session.getVideoStatisticsInfo();
      videoInfo?.recvFps;
      videoInfo?.recvJitter;
      videoInfo?.recvLatency;
      videoInfo?.recvFrameHeight;
      videoInfo?.recvFrameWidth;
      videoInfo?.recvPacketLossAvg;
      videoInfo?.recvPacketLossMax;
      videoInfo?.sendFps;
      videoInfo?.sendJitter;
      videoInfo?.sendLatency;
      videoInfo?.sendFrameHeight;
      videoInfo?.sendFrameWidth;
      videoInfo?.sendPacketLossAvg;
      videoInfo?.sendPacketLossMax;

Audio quality

The ZoomVideoSdkSession class provides a getAudioStatisticsInfo() function, which returns a ZoomVideoSdkSessionAudioStatisticsInfo object, which provides both sent and received audio quality data. See the code snippet and SDK reference for details.

To receive this data, there must be at least two users actively sending audio to the session.

ZoomVideoSdkSessionAudioStatisticsInfo? audioInfo = await zoom.session.getAudioStatisticsInfo();
      audioInfo?.recvFrequency;
      audioInfo?.recvJitter;
      audioInfo?.recvLatency;
      audioInfo?.recvPacketLossAvg;
      audioInfo?.recvPacketLossMax;
      audioInfo?.sendFrequency;
      audioInfo?.sendJitter;
      audioInfo?.sendLatency;
      audioInfo?.sendPacketLossAvg;
      audioInfo?.sendPacketLossMax;

Screen sharing quality

The ZoomVideoSdkSession class provides a getShareStatisticsInfo() function, which returns a ZoomVideoSdkSessionShareStatisticsInfo object, which provides both sent and received screen sharing quality data. See the code snippet and SDK reference for details.

To receive this data, there must be at least two users in the session, with at one sharing their screen.

ZoomVideoSdkSessionShareStatisticsInfo? shareInfo = await zoom.session.getShareStatisticsInfo();
      shareInfo?.recvFps;
      shareInfo?.recvJitter;
      shareInfo?.recvLatency;
      shareInfo?.recvFrameHeight;
      shareInfo?.recvFrameWidth;
      shareInfo?.recvPacketLossAvg;
      shareInfo?.recvPacketLossMax;
      shareInfo?.sendFps;
      shareInfo?.sendJitter;
      shareInfo?.sendLatency;
      shareInfo?.sendFrameHeight;
      shareInfo?.sendFrameWidth;
      shareInfo?.sendPacketLossAvg;
      shareInfo?.sendPacketLossMax;