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 onUserVideoNetworkStatusChanged event listener returns the video network status between you and other users within the session.

export enum NetworkStatus {
  None = 'ZoomVideoSDKNetwork_None',
  Good = 'ZoomVideoSDKNetwork_Good',
  Normal = 'ZoomVideoSDKNetwork_Normal',
  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.

const networkStatusChangeListener = zoom.addListener(
    EventType.onUserVideoNetworkStatusChanged,
    async ({user, status}: {user: ZoomVideoSdkUser; status: NetworkStatus}) => {
      const networkUser: ZoomVideoSdkUser = new ZoomVideoSdkUser(user);
      if (status == NetworkStatus.Bad) {
        //Something related to bad network quality
      }
    }
);

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.

const videoInfo = await zoom.session.getVideoStatisticsInfo();
// Here's an example videoInfo return object
videoInfo = {
    recvFps: 11,
    recvFrameHeight: 160,
    recvFrameWidth: 90,
    recvJitter: 7,
    recvLatency: 15,
    recvPacketLossAvg: 0,
    recvPacketLossMax: 0,
    sendFps: 0,
    sendFrameHeight: 0,
    sendFrameWidth: 0,
    sendJitter: 0,
    sendLatency: 0,
    sendPacketLossAvg: 0,
    sendPacketLossMax: 0,
};

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.

const audioInfo = await zoom.session.getAudioStatisticsInfo();
// Here's an example audioInfo return object
audioInfo = {
    recvFrequency: 0,
    recvJitter: 0,
    recvLatency: 0,
    recvPacketLossAvg: 0,
    recvPacketLossMax: 0,
    sendFrequency: 32,
    sendJitter: 12,
    sendLatency: 33,
    sendPacketLossAvg: 1.2000000476837158,
    sendPacketLossMax: 1.899999976158142,
};

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.

const shareInfo =
    await RNZoomVideoSdkSessionStatisticsInfo.getShareStatisticsInfo();
// Here's an example shareInfo return object
shareInfo = {
    recvFps: 0,
    recvFrameHeight: 0,
    recvFrameWidth: 0,
    recvJitter: 0,
    recvLatency: 0,
    recvPacketLossAvg: 0,
    recvPacketLossMax: 0,
    sendFps: 0,
    sendFrameHeight: 0,
    sendFrameWidth: 0,
    sendJitter: 0,
    sendLatency: 0,
    sendPacketLossAvg: 0,
    sendPacketLossMax: 0,
};