Zoom video sdk implementation is not working in computers with firewall

Video SDK WebRTC Failure in Restrictive Network Environments (Prison Facilities)

Video SDK Type and Version

  • Package: @zoom/videosdk

  • Version: ^2.2.5

  • Platform: Web (React application)

Description

The Zoom Video SDK fails to initialize in highly restrictive network environments, specifically within prison/correctional facility networks where WebRTC connections are blocked by firewalls. The SDK crashes with the following error:

Error Message

VM5:952 Uncaught TypeError: Cannot destructure property 'shouldUseWebRTC' of 'Pi.getWebRTCCapability(...)' as it is undefined.
    at index-C42V1Njq.js:2303:87776
    at index-C42V1Njq.js:2212:20330
    at c._next (index-C42V1Njq.js:2212:5478)
    ...

Root Cause

The SDK attempts to call getWebRTCCapability() which returns undefined when WebRTC is blocked by the network firewall, causing the application to crash during initialization. The SDK does not gracefully handle environments where WebRTC is unavailable.

Environment Details

  • Network: Facility with strict firewall rules

  • Browser: Chrome/Edge (latest versions)

  • Camera/Microphone: Not being triggered at all due to SDK crash before media device access

How To Reproduce

Steps:

  1. Authentication method: JWT token-based authentication

  2. Network simulation: Test on a network that blocks:

    • WebRTC peer connections
  3. Initialization code:

import ZoomVideo from '@zoom/videosdk';

const client = ZoomVideo.createClient();

// This crashes when WebRTC is blocked
await client.init("en-US", "CDN", {
  patchJsMedia: true,
  enforceMultipleVideos: true,
});

// Attempt to join session
await client.join(sessionName, token, userName);

  1. Error occurs: During client.init() when SDK tries to detect WebRTC capabilities

Browser Console Behavior:

  • No camera/microphone permission prompts appear

  • SDK crashes before reaching media device initialization

  • getWebRTCCapability() returns undefined

  • Application becomes unresponsive

Troubleshooting Routes Already Exhausted

2. Implemented Workarounds (Attempted)

// Added WebSocket endpoint configuration
await client.init("en-US", "CDN", {
  patchJsMedia: true,
  enforceMultipleVideos: true,
  webEndpoint: "zoom.us",  // Added for WebSocket fallback
});

// Added capability detection with error handling
let webRTCCapability = null;
try {
  webRTCCapability = client.checkSystemRequirements();
  console.log("WebRTC Capability:", webRTCCapability);
} catch (error) {
  console.warn("Could not check WebRTC capability:", error);
  // SDK still crashes even with try-catch
}

4. Browser Configuration

  • Tested on multiple browsers (Chrome, Edge)

  • Verified browser supports WebSocket (works fine)

  • Issue persists across all browsers in restrictive networks

Actual Behavior

The SDK:

  1. Crashes with TypeError when getWebRTCCapability() returns undefined

  2. Does not provide a WebSocket fallback option

  3. Completely halts application execution

  4. Does not reach media device access (camera/mic never triggered)

  5. When checked in network tab:

    https://rwcsjc3.sjc.zoom.us/wc/ping/99562723030…. apis like these are showing cancelled.

Questions for Zoom Team

  1. Are there plans to add graceful degradation for restrictive networks?

  2. What is the recommended approach for deploying Video SDK in firewall-restricted environments?

Request

Please provide:

  1. SDK update to handle getWebRTCCapability() returning undefined

  2. Documentation for deploying in restrictive network environments

  3. Timeline for fix if this is a known limitation

Hey @Tarun1

Thanks for your feedback.

Could you help share some problematic session IDs with us for troubleshooting purposes?

Thanks
Vic

Sure, Thanks for the reply!

sessionID: THERAEBK050935

Also, attaching the console error image:

https ://ibb.co/kgDLdF9N

Hi @Tarun1

sessionID: THERAEBK050935

It seems that this is not a valid session ID. You can retrieve it from the web portal under Dashboard → Past Sessions if the session has ended, or get it using the client.getSessionInfo().sessionId method if you are currently in a session.

Thanks
Vic