# Meeting SDK - Web Embed Zoom meetings in web applications. ## Overview The Zoom Meeting SDK for Web embeds the full Zoom meeting experience into your web application with two view options: Component View and Client View. ## Forum-Derived Hotspots - SharedArrayBuffer / gallery view: [sharedarraybuffer-gallery-view.md](sharedarraybuffer-gallery-view.md) - Joining meeting timeout / browser restriction: [web-timeout-browser-restriction.md](web-timeout-browser-restriction.md) - Performance/CPU guidance: [web-performance-cpu.md](web-performance-cpu.md) - Component View UI customization: [component-view-ui-customization.md](component-view-ui-customization.md) - Component View breakout rooms: [component-view-breakout-rooms.md](component-view-breakout-rooms.md) ## Prerequisites - Meeting SDK credentials from [Marketplace](https://marketplace.zoom.us/) (sign-in required) - SDK Key and Secret - Modern browser (Chrome, Firefox, Safari, Edge) ## View Options | View | Description | Use Case | |------|-------------|----------| | **Component View** | Flexible, embeddable UI components | Custom layouts, React/Vue integration | | **Client View** | Full-page Zoom meeting experience | Quick integration, standard Zoom UI | ## Implementation Approaches | Approach | Technology | Port | View | Best For | |----------|-----------|------|------|----------| | **Components** | React + TypeScript + Vite | 3000 | Component | Modern, flexible integration | | **Local** | React + Webpack + NPM | 9999 | Client | Traditional npm-based setup | | **CDN** | Vanilla JS + CDN | 9999 | Client | Simple, no build tools | ## Installation ### Component View (Recommended) ```bash npm install @zoom/meetingsdk ``` ### Client View (CDN) ```html ``` > **Note:** CDN provides `ZoomMtg` (Client View). For `ZoomMtgEmbedded` (Component View), use npm. ### Auth Endpoint (Required) The Meeting SDK requires a signature from an authentication backend: ```bash # Clone Zoom's auth endpoint sample git clone https://github.com/zoom/meetingsdk-auth-endpoint-sample --depth 1 cd meetingsdk-auth-endpoint-sample cp .env.example .env # Edit .env with your SDK credentials npm install && npm run start ``` ## Quick Start (Component View) ```javascript import ZoomMtgEmbedded from '@zoom/meetingsdk/embedded'; const client = ZoomMtgEmbedded.createClient(); await client.init({ zoomAppRoot: document.getElementById('meetingSDKElement'), language: 'en-US', }); await client.join({ sdkKey: SDK_KEY, signature: signature, meetingNumber: meetingNumber, userName: 'User', password: password, }); ``` ## WebRTC Optimizations Meeting SDK Web uses WebRTC for real-time communication with optimizations for: - HD video (720p/1080p) - Low latency audio - Adaptive bitrate ### Codec Support - H.264 for video - VP8 as fallback - Opus for audio ## HD Video ### Check System Requirements ```javascript // Check browser compatibility const compatibility = client.checkSystemRequirements(); console.log('Video supported:', compatibility.video); console.log('Audio supported:', compatibility.audio); console.log('Screen share supported:', compatibility.screen); ``` ### Check SharedArrayBuffer (Required for HD) ```javascript // SharedArrayBuffer is REQUIRED for 720p, gallery view, virtual background const sabAvailable = typeof SharedArrayBuffer === 'function'; if (!sabAvailable) { console.warn('HD features require SharedArrayBuffer'); console.warn('Enable COOP/COEP headers on your server'); } ``` ### Enable HD in Init ```javascript await client.init({ zoomAppRoot: document.getElementById('meetingSDKElement'), language: 'en-US', // Enable 720p (default true for SDK >= 2.8.0) enableHD: true, // Enable 1080p for webinar attendees (SDK >= 2.9.0) enableFullHD: true, }); ``` ### HD Requirements To enable 720p: 1. Contact Zoom Support to enable on your account 2. Enable "Group HD" in Zoom profile settings 3. SharedArrayBuffer must be available (COOP/COEP headers) 4. Solid internet connection and low CPU usage **Resolution tiers:** - 1:1 calls: Up to 1080p - Small groups (2-4): Up to 720p - Larger meetings: Adaptive **Key limitation:** If a 3rd participant turns video on, quality reverts to standard definition. ## SharedArrayBuffer For optimal performance, configure these headers: ``` Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp ``` ## Event Handling ### Component View Events ```javascript client.on('connection-change', (payload) => { console.log('Connection state:', payload.state); }); client.on('user-added', (payload) => { console.log('User joined:', payload); }); client.on('user-removed', (payload) => { console.log('User left:', payload); }); ``` ### Client View In-Meeting Listeners ```javascript // User events ZoomMtg.inMeetingServiceListener('onUserJoin', (data) => { console.log('User joined:', data); }); ZoomMtg.inMeetingServiceListener('onUserLeave', (data) => { console.log('User left:', data); }); // Waiting room ZoomMtg.inMeetingServiceListener('onUserIsInWaitingRoom', (data) => { console.log('User in waiting room:', data); }); // Meeting status changes ZoomMtg.inMeetingServiceListener('onMeetingStatus', (data) => { console.log('Meeting status:', data); }); ``` ## Common Tasks ### Join Meeting ```javascript await client.join({ sdkKey: SDK_KEY, signature: signature, meetingNumber: meetingNumber, userName: 'User', }); ``` ### Leave Meeting ```javascript client.leaveMeeting(); ``` ## Client View Full Example ```javascript import { ZoomMtg } from '@zoom/meetingsdk'; // Check system requirements console.log(ZoomMtg.checkSystemRequirements()); // Preload WebAssembly for faster init ZoomMtg.preLoadWasm(); ZoomMtg.prepareWebSDK(); // Initialize and join ZoomMtg.init({ leaveUrl: '/meeting-ended', disableCORP: !window.crossOriginIsolated, // Disable if no COOP/COEP success: () => { ZoomMtg.join({ meetingNumber: '123456789', userName: 'User Name', signature: signature, // From auth endpoint userEmail: 'user@example.com', passWord: 'meeting-password', success: (res) => { console.log('Joined meeting'); ZoomMtg.getAttendeeslist({}); ZoomMtg.getCurrentUser({ success: (res) => console.log('Current user:', res.result.currentUser) }); }, error: (err) => console.error('Join error:', err) }); }, error: (err) => console.error('Init error:', err) }); ``` ## China CDN For users in China, use the China-specific CDN: ```javascript // Set before preLoadWasm() ZoomMtg.setZoomJSLib('https://jssdk.zoomus.cn/{VERSION}/lib', '/av'); ``` ## Zoom for Government (ZFG) For government applications, apply for SDK credentials at [ZFG Marketplace](https://marketplace.zoomgov.com/). ### Option 1: ZFG-specific NPM Package ```json { "dependencies": { "@zoom/meetingsdk": "3.11.2-zfg" } } ``` ### Option 2: Configure ZFG Endpoints **Client View:** ```javascript ZoomMtg.setZoomJSLib('https://source.zoomgov.com/{VERSION}/lib', '/av'); ZoomMtg.init({ webEndpoint: 'www.zoomgov.com', }); ``` **Component View:** ```javascript const client = ZoomMtgEmbedded.createClient(); client.init({ assetPath: 'https://source.zoomgov.com/{VERSION}/lib/av', webEndpoint: 'www.zoomgov.com' }); ``` ## Resources - **Official docs**: https://developers.zoom.us/docs/meeting-sdk/web/ - **Component View sample**: https://github.com/zoom/meetingsdk-web-sample - **Client View sample**: https://github.com/zoom/meetingsdk-sample-signature-node.js