# 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](https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0070504). If you want near real time analytics to quickly diagnose and resolve network disruptions, consider purchasing a [Quality of Service Subscription (QSS) plan](https://www.zoom.com/en/services/qss/) to use our [QSS API](/docs/api/qss/#tag/video-sdk-sessions/get/videosdk/sessions/{sessionId}/users/qos_summary) and [webhooks](/docs/api/qss/events/#tag/session) for Video SDK. ## Network status The `onUserVideoNetworkStatusChanged` event listener returns the video network status between you and other users within the session. ```javascript 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. ```javascript 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. ```javascript 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. ```javascript 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. ```javascript 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, }; ```