Skill 126 · Zoom Meeting SDK Windows
Subchapter 126.7
concepts/singleton-hierarchy.mdMarkdown20 KBView on GitHub
The Zoom Windows Meeting SDK uses a service locator pattern - a tree of singletons where you navigate from root services down to specific features. You don’t construct objects; you traverse to them.
You want to... You navigate to...
─────────────────────────────────────────────────────
Mute audio IMeetingService → IMeetingAudioController
Create breakout rooms IMeetingService → IMeetingBOController → IBOCreator
Control remote camera IMeetingService → IMeetingVideoController → IMeetingCameraHelper
Start live stream IMeetingService → IMeetingLiveStreamController
Add Q&A questions IMeetingService → IMeetingQAController
Enable interpretation IMeetingService → IMeetingInterpretationController
Batch invite contacts IAuthService → INotificationServiceHelper → IPresenceHelper → IBatchRequestContactHelperLevel 0: Global Factory Functions (zoom_sdk.h)
│
├─► Level 1: IAuthService
│ ├─► Level 2: IDirectShareServiceHelper [LEAF]
│ └─► Level 2: INotificationServiceHelper
│ └─► Level 3: IPresenceHelper
│ └─► Level 4: IBatchRequestContactHelper [LEAF - MAX DEPTH]
│
├─► Level 1: IMeetingService
│ │
│ │ ══════════════════════════════════════════════════════════════
│ │ CROSS-PLATFORM CONTROLLERS (All platforms)
│ │ ══════════════════════════════════════════════════════════════
│ │
│ ├─► Level 2: IMeetingVideoController
│ │ ├─► Level 3: IMeetingCameraHelper [LEAF]
│ │ ├─► Level 3: ISetVideoOrderHelper [LEAF - Windows]
│ │ └─► Level 3: ICameraController [LEAF - Windows]
│ │
│ ├─► Level 2: IMeetingAudioController [LEAF]
│ ├─► Level 2: IMeetingShareController [LEAF]
│ ├─► Level 2: IMeetingChatController [LEAF]
│ ├─► Level 2: IMeetingRecordingController [LEAF]
│ ├─► Level 2: IMeetingParticipantsController [LEAF]
│ ├─► Level 2: IMeetingWaitingRoomController [LEAF]
│ ├─► Level 2: IMeetingWebinarController [LEAF]
│ ├─► Level 2: IMeetingRawArchivingController [LEAF]
| Controller | Getter Method | Purpose |
|---|---|---|
IMeetingVideoController | GetMeetingVideoController() | Video on/off, spotlight, pin, virtual background |
IMeetingAudioController | GetMeetingAudioController() | Mute/unmute, VoIP, audio device selection |
IMeetingShareController | GetMeetingShareController() | Screen/app sharing, share settings |
IMeetingChatController | GetMeetingChatController() | In-meeting chat, file transfer |
IMeetingRecordingController | GetMeetingRecordingController() | Local/cloud recording control |
IMeetingParticipantsController | GetMeetingParticipantsController() | User list, rename, remove, roles |
IMeetingWaitingRoomController | GetMeetingWaitingRoomController() | Admit/deny users, waiting room settings |
IMeetingWebinarController | GetMeetingWebinarController() | Webinar-specific controls, panelists |
IMeetingRawArchivingController | GetMeetingRawArchivingController() | Raw archiving for compliance |
IMeetingReminderController | GetMeetingReminderController() | Meeting reminders and notifications |
IMeetingEncryptionController | GetInMeetingEncryptionController() | E2E encryption status |
IMeetingConfiguration | GetMeetingConfiguration() | Meeting behavior configuration |
IMeetingBOController | GetMeetingBOController() | Breakout rooms (has Level 3 helpers) |
IMeetingAICompanionController | GetMeetingAICompanionController() | AI Companion features (has Level 3 helpers) |
IListFactory | GetListFactory() | Factory for creating SDK list objects |
| Controller | Getter Method | Purpose |
|---|---|---|
IMeetingUIController | GetUIController() | SDK UI window control, toolbar customization |
IAnnotationController | GetAnnotationController() | Drawing/annotation on shared content |
IMeetingRemoteController | GetMeetingRemoteController() | Remote control of shared content |
IMeetingH323Helper | GetH323Helper() | H.323/SIP room system integration |
IMeetingPhoneHelper | GetMeetingPhoneHelper() | PSTN dial-in/dial-out |
IMeetingLiveStreamController | GetMeetingLiveStreamController() | YouTube/Facebook/custom RTMP streaming |
IClosedCaptionController | GetMeetingClosedCaptionController() | Closed captions, live transcription |
IZoomRealNameAuthMeetingHelper | GetMeetingRealNameAuthController() | China real-name authentication |
IMeetingQAController | GetMeetingQAController() | Webinar Q&A feature |
IMeetingInterpretationController | GetMeetingInterpretationController() | Language interpretation channels |
IMeetingSignInterpretationController | GetMeetingSignInterpretationController() | Sign language interpretation |
IEmojiReactionController | GetMeetingEmojiReactionController() | Emoji reactions (👍 🎉 etc.) |
IMeetingAANController | GetMeetingAANController() | Advanced Audio Networking |
ICustomImmersiveController | GetMeetingImmersiveController() | Immersive view/scenes (has Level 3 helper) |
IMeetingWhiteboardController | GetMeetingWhiteboardController() | Collaborative whiteboard |
IMeetingDocsController | GetMeetingDocsController() | In-meeting document sharing |
IMeetingPollingController | GetMeetingPollingController() | Polls and quizzes |
IMeetingRemoteSupportController | GetMeetingRemoteSupportController() | Remote support features |
IMeetingIndicatorController | GetMeetingIndicatorController() | UI indicators and status |
IMeetingProductionStudioController | GetMeetingProductionStudioController() | Production studio/broadcast features |
| Level | When | Example |
|---|---|---|
| Level 1 | App startup, before joining | CreateMeetingService(), CreateAuthService() |
| Level 2 | After joining meeting, for features | meetingService->GetMeetingAudioController() |
| Level 3 | For specialized sub-features | boController->GetBOCreatorHelper() |
| Level 4 | For batch/bulk operations | boCreator->GetBatchCreateBOHelper() |
Every feature follows the same 3-step pattern:
// Step 1: Navigate to the controller (singleton)
IMeetingAudioController* audioCtrl = meetingService->GetMeetingAudioController();
// Step 2: Register event listener (observer pattern)
audioCtrl->SetEvent(new MyAudioEventListener());
// Step 3: Call methods
audioCtrl->MuteAudio(userId, true);// Get controller
IMeetingAudioController* audioCtrl = meetingService->GetMeetingAudioController();
// Use it
audioCtrl->JoinVoip();
audioCtrl->MuteAudio(0, true); // 0 = self// Navigate: Level 1 → Level 2 → Level 3
IMeetingBOController* boCtrl = meetingService->GetMeetingBOController();
IBOCreator* creator = boCtrl->GetBOCreatorHelper();
// Use it
creator->CreateBreakoutRoom(L"Room 1");
creator->AssignUserToBO(strUserID, strBOID);// Navigate: Level 1 → Level 2 → Level 3 → Level 4
IMeetingBOController* boCtrl = meetingService->GetMeetingBOController();
IBOCreator* creator = boCtrl->GetBOCreatorHelper();
IBatchCreateBOHelper* batch = creator->GetBatchCreateBOHelper();
// Use it (transaction pattern)
batch->CreateBOTransactionBegin();
batch->AddNewBoToList(L"Room 1");
batch->AddNewBoToList(L"Room 2");
batch->AddNewBoToList(L"Room 3");
batch->CreateBoTransactionCommit(); // Creates all 3 at once| Depth | Design Purpose |
|---|---|
| Level 1 (Services) | Lifecycle management - created once, destroyed at cleanup |
| Level 2 (Controllers) | Feature grouping - one controller per domain |
| Level 3 (Helpers) | Role-based access - different helpers for host vs attendee |
| Level 4 (Batch) | Performance optimization - bulk ops instead of N individual calls |
Controllers return nullptr if not in meeting:
// WRONG - cached before meeting joined
IMeetingAudioController* audioCtrl = meetingService->GetMeetingAudioController();
meetingService->Join(joinParam);
audioCtrl->MuteAudio(0, true); // audioCtrl might be nullptr!
// RIGHT - get after joining
meetingService->Join(joinParam);
// ... wait for MEETING_STATUS_INMEETING callback ...
IMeetingAudioController* audioCtrl = meetingService->GetMeetingAudioController();
if (audioCtrl) {
audioCtrl->MuteAudio(0, true);
}After joining/leaving meeting, get controllers again - previous pointers may be invalid.
Some helpers only available for hosts:
IBOCreator* creator = boCtrl->GetBOCreatorHelper();
if (creator) {
// Only hosts get a valid creator
creator->CreateBreakoutRoom(L"Room 1");
}Level 4 helpers exist specifically for performance:
// SLOW - 10 individual calls
for (int i = 0; i < 10; i++) {
creator->CreateBreakoutRoom(roomNames[i]);
}
// FAST - 1 batch call
IBatchCreateBOHelper* batch = creator->GetBatchCreateBOHelper();
batch->CreateBOTransactionBegin();
for (int i = 0; i < 10; i++) {
batch->AddNewBoToList(roomNames[i]);
}
batch->CreateBoTransactionCommit();| Path | Use Case |
|---|---|
IMeetingService → IMeetingBOController → IBOCreator → IBatchCreateBOHelper | Bulk breakout room creation |
IAuthService → INotificationServiceHelper → IPresenceHelper → IBatchRequestContactHelper | Bulk contact operations |
| Feature | Navigation Path |
|---|---|
| Audio control | IMeetingService → GetMeetingAudioController() |
| Video control | IMeetingService → GetMeetingVideoController() |
| Screen sharing | IMeetingService → GetMeetingShareController() |
| Chat | IMeetingService → GetMeetingChatController() |
| Recording | IMeetingService → GetMeetingRecordingController() |
| Participants | IMeetingService → GetMeetingParticipantsController() |
| Waiting room | IMeetingService → GetMeetingWaitingRoomController() |
| Breakout rooms | IMeetingService → GetMeetingBOController() → GetBO*Helper() |
| AI Companion | IMeetingService → GetMeetingAICompanionController() |
| AI Smart Summary | IMeetingService → GetMeetingAICompanionController() → GetMeetingAICompanionSmartSummaryHelper() |
| AI Query | IMeetingService → GetMeetingAICompanionController() → GetMeetingAICompanionQueryHelper() |
| Remote camera | IMeetingService → GetMeetingVideoController() → GetMeetingCameraHelper() |
| Video order (gallery) | IMeetingService → GetMeetingVideoController() → GetSetVideoOrderHelper() |
| Local camera device | IMeetingService → GetMeetingVideoController() → GetMyCameraController() |
| Feature | Navigation Path |
|---|---|
| Live streaming | IMeetingService → GetMeetingLiveStreamController() |
| Q&A (webinars) | IMeetingService → GetMeetingQAController() |
| Interpretation | IMeetingService → GetMeetingInterpretationController() |
| Sign language | IMeetingService → GetMeetingSignInterpretationController() |
| Closed captions | IMeetingService → GetMeetingClosedCaptionController() |
| Annotations | IMeetingService → GetAnnotationController() |
| Annotations (Custom UI) | IMeetingService → GetAnnotationController() → GetCustomizedAnnotationController() |
| Emoji reactions | IMeetingService → GetMeetingEmojiReactionController() |
| Polling | IMeetingService → GetMeetingPollingController() |
| Whiteboard | IMeetingService → GetMeetingWhiteboardController() |
| Docs | IMeetingService → GetMeetingDocsController() |
| H.323/SIP | IMeetingService → GetH323Helper() |
| Phone dial-in/out | IMeetingService → GetMeetingPhoneHelper() |
| Remote control | IMeetingService → GetMeetingRemoteController() |
| Immersive view | IMeetingService → GetMeetingImmersiveController() |
| UI control | IMeetingService → GetUIController() |
| Feature | Navigation Path |
|---|---|
| Audio settings | ISettingService → GetAudioSettings() |
| Video settings | ISettingService → GetVideoSettings() |
| Recording settings | ISettingService → GetRecordingSettings() |
| Share settings | ISettingService → GetShareSettings() |
| Presence/contacts | IAuthService → GetNotificationServiceHelper() → GetPresenceHelper() |
| Deprecated | Replacement |
|---|---|
IMeetingSmartSummaryController | Use IMeetingAICompanionController |
IMeetingSmartSummaryHelper | Use IMeetingAICompanionSmartSummaryHelper via GetMeetingAICompanionSmartSummaryHelper() |
| Category | Count | Platform |
|---|---|---|
| Cross-platform controllers | 15 | Windows, macOS, Linux |
| Windows-only controllers | 20 | Windows only (#if defined(WIN32)) |
| Total | 35 | — |
Note: When developing cross-platform apps, use
#if defined(WIN32)guards around Windows-only controller access.
TL;DR: The hierarchy is your navigation map. Start at a service, drill down to the feature you need, then call methods. Deeper levels = more specialized operations. Windows has 20 additional controllers not available on other platforms.