# Video SDK - Web Build custom video experiences in the browser with Zoom Video SDK. ## Overview The Zoom Video SDK for Web enables fully customized video applications using Zoom's infrastructure. You control the UI, branding, and user experience. ## Prerequisites - Video SDK credentials from [Marketplace](https://marketplace.zoom.us/) (sign-in required) - SDK Key and Secret - Modern browser (Chrome, Firefox, Safari, Edge) ## Installation ### NPM (Recommended) ```bash npm install @zoom/videosdk ``` ### CDN (Fallback Strategy) > **Note**: Some networks/ad blockers can block `source.zoom.us`. Prefer allowlisting the domain in managed environments. If you need a fallback, consider mirroring/self-hosting only if permitted and you can keep versions in sync. ```bash # Download SDK locally curl "https://source.zoom.us/videosdk/zoom-video-1.12.0.min.js" -o public/js/zoom-video-sdk.min.js ``` ```html ``` **Note:** Remember to update your local copy when new SDK versions are released. ## Quick Start ### NPM Usage (Bundler) ```javascript import ZoomVideo from '@zoom/videosdk'; const client = ZoomVideo.createClient(); await client.init('en-US', 'Global', { patchJsMedia: true }); await client.join(topic, signature, userName, password); // CRITICAL: getMediaStream() ONLY works AFTER join() const stream = client.getMediaStream(); await stream.startVideo(); await stream.startAudio(); ``` ### CDN Usage (No Bundler) ```javascript // CDN exports as WebVideoSDK, NOT ZoomVideo // Must use .default property const ZoomVideo = WebVideoSDK.default; const client = ZoomVideo.createClient(); await client.init('en-US', 'Global', { patchJsMedia: true }); await client.join(topic, signature, userName, password); // CRITICAL: getMediaStream() ONLY works AFTER join() const stream = client.getMediaStream(); await stream.startVideo(); await stream.startAudio(); ``` ### ES Module with CDN (Race Condition) When using `