Files
2026-07-13 12:20:06 +08:00

43 KiB

Zoom Video SDK Windows - API Reference

Source: https://marketplacefront.zoom.us/sdk/custom/windows/


API Hierarchy (5 Levels Deep)

Understanding the SDK requires navigating from the singleton entry point through 5 levels of objects. Start from IZoomVideoSDK and follow return types.

Level 1: Entry Point (Singleton)

CreateZoomVideoSDKObj() → IZoomVideoSDK*
Method Returns Purpose
initialize(params) ZoomVideoSDKErrors Initialize SDK (call once)
joinSession(context) IZoomVideoSDKSession* Join and get session object
leaveSession(end) ZoomVideoSDKErrors Leave or end session
addListener(delegate) void Register event callbacks
getSessionInfo() IZoomVideoSDKSession* Get current session
getVideoHelper() IZoomVideoSDKVideoHelper* Camera/video control
getAudioHelper() IZoomVideoSDKAudioHelper* Mic/speaker control
getShareHelper() IZoomVideoSDKShareHelper* Screen sharing
getChatHelper() IZoomVideoSDKChatHelper* Chat messaging
getUserHelper() IZoomVideoSDKUserHelper* User management
getRecordingHelper() IZoomVideoSDKRecordingHelper* Cloud recording
getCmdChannel() IZoomVideoSDKCmdChannel* Custom signaling

Level 2: Core Helpers & Session

IZoomVideoSDKSession

IZoomVideoSDKSession* session = sdk->getSessionInfo();
Method Returns Purpose
getMyself() IZoomVideoSDKUser* Current user object
getRemoteUsers() IVideoSDKVector<IZoomVideoSDKUser*>* All remote users
getSessionName() const zchar_t* Session name
getSessionID() const zchar_t* Unique session ID
getSessionPassword() const zchar_t* Session password
getSessionHost() IZoomVideoSDKUser* Host user

IZoomVideoSDKVideoHelper

Controls YOUR camera. Does NOT control remote users' video.

Method Returns Purpose
startVideo() ZoomVideoSDKErrors Turn on your camera
stopVideo() ZoomVideoSDKErrors Turn off your camera
rotateMyVideo(rotation) bool Rotate camera output
switchCamera(deviceId) bool Change camera device
getCameraList() IVideoSDKVector<IZoomVideoSDKCameraDevice*>* Available cameras
getNumberOfCameras() uint32_t Camera count
startVideoCanvasPreview(hwnd, aspect, resolution) ZoomVideoSDKErrors Preview your video
stopVideoCanvasPreview(hwnd) ZoomVideoSDKErrors Stop preview

IZoomVideoSDKAudioHelper

Method Returns Purpose
startAudio() ZoomVideoSDKErrors Connect to audio
stopAudio() ZoomVideoSDKErrors Disconnect audio
muteAudio(user) ZoomVideoSDKErrors Mute a user
unmuteAudio(user) ZoomVideoSDKErrors Unmute a user
getMicList() IVideoSDKVector<IZoomVideoSDKMicDevice*>* Available mics
getSpeakerList() IVideoSDKVector<IZoomVideoSDKSpeakerDevice*>* Available speakers
selectMic(deviceId, name) ZoomVideoSDKErrors Select mic
selectSpeaker(deviceId, name) ZoomVideoSDKErrors Select speaker

IZoomVideoSDKShareHelper

Method Returns Purpose
startShareScreen(monitorId) ZoomVideoSDKErrors Share a monitor
startShareWindow(hwnd) ZoomVideoSDKErrors Share a window
stopShare() ZoomVideoSDKErrors Stop sharing
isShareLocked() bool Check if locked
lockShare(lock) ZoomVideoSDKErrors Lock sharing
isOtherSharing() bool Someone else sharing?

Level 3: User & Rendering Objects

IZoomVideoSDKUser

Represents a participant. Get from session->getMyself() or callbacks.

Method Returns Purpose
getUserID() const zchar_t* Unique user ID
getUserName() const zchar_t* Display name
isHost() bool Is session host?
isManager() bool Is manager?
GetVideoCanvas() IZoomVideoSDKCanvas* SDK-rendered video
GetVideoPipe() IZoomVideoSDKRawDataPipe* Raw YUV frames
GetShareCanvas() IZoomVideoSDKCanvas* SDK-rendered share
GetSharePipe() IZoomVideoSDKRawDataPipe* Raw share frames
getVideoStatus() ZoomVideoSDKVideoStatus Video on/off state
getAudioStatus() ZoomVideoSDKAudioStatus Audio mute state

IZoomVideoSDKCanvas (SDK Rendering)

Let the SDK render video directly to your HWND. Recommended for most apps.

Method Returns Purpose
subscribeWithView(hwnd, aspect, resolution) ZoomVideoSDKErrors Start rendering to HWND
unSubscribeWithView(hwnd) ZoomVideoSDKErrors Stop rendering
setAspectMode(aspect) ZoomVideoSDKErrors Change aspect ratio
setResolution(resolution) ZoomVideoSDKErrors Change resolution

IZoomVideoSDKRawDataPipe (Raw YUV Access)

Get raw YUV420 frames for custom processing.

Method Returns Purpose
subscribe(resolution, delegate) ZoomVideoSDKErrors Start receiving frames
unSubscribe(delegate) ZoomVideoSDKErrors Stop receiving
getVideoStatus() ZoomVideoSDKVideoStatus Check if video is on

IZoomVideoSDKShareAction

Received in onUserShareStatusChanged callback. Controls remote share subscription.

Method Returns Purpose
subscribe() ZoomVideoSDKErrors Subscribe to share
unSubscribe() ZoomVideoSDKErrors Unsubscribe
subscribeWithView(hwnd, aspect) ZoomVideoSDKErrors Render share to HWND
unSubscribeWithView(hwnd) ZoomVideoSDKErrors Stop rendering
getShareCanvas() IZoomVideoSDKCanvas* Get share canvas
getSharePipe() IZoomVideoSDKRawDataPipe* Get raw share pipe
getShareType() ZoomVideoSDKShareType Screen/window/etc

Level 4: Devices, Chat & Callbacks

IZoomVideoSDKCameraDevice

Method Returns
getDeviceId() const zchar_t*
getDeviceName() const zchar_t*
isSelectedDevice() bool

IZoomVideoSDKMicDevice / IZoomVideoSDKSpeakerDevice

Method Returns
getDeviceId() const zchar_t*
getDeviceName() const zchar_t*
isSelectedDevice() bool

IZoomVideoSDKChatHelper

Method Returns Purpose
sendChatToAll(message) ZoomVideoSDKErrors Broadcast message
sendChatToUser(user, message) ZoomVideoSDKErrors Private message
canChatMessageBeDeleted(msgId) bool Check delete permission
deleteChatMessage(msgId) ZoomVideoSDKErrors Delete a message

IZoomVideoSDKChatMessage

Received in onChatNewMessageNotify callback.

Method Returns
getMessageID() const zchar_t*
getSendUser() IZoomVideoSDKUser*
getReceiverUser() IZoomVideoSDKUser*
getContent() const zchar_t*
getTimeStamp() time_t
isChatToAll() bool
isSelfSend() bool

IZoomVideoSDKRawDataPipeDelegate

Implement this to receive raw YUV frames.

class MyVideoRenderer : public IZoomVideoSDKRawDataPipeDelegate {
    void onRawDataFrameReceived(YUVRawDataI420* data) override {
        // Process frame
    }
    void onRawDataStatusChanged(RawDataStatus status) override {
        // Handle on/off
    }
};

Level 5: Raw Data & Utilities

YUVRawDataI420

Video frame in YUV420 format (I420).

Method Returns Purpose
GetYBuffer() char* Y plane (luminance)
GetUBuffer() char* U plane (chrominance)
GetVBuffer() char* V plane (chrominance)
GetStreamWidth() unsigned int Frame width
GetStreamHeight() unsigned int Frame height
GetRotation() unsigned int 0, 90, 180, 270
GetTimeStamp() unsigned long long Frame timestamp
CanAddRef() / AddRef() / Release() - Reference counting

AudioRawData

PCM audio samples (16-bit signed).

Method Returns Purpose
GetBuffer() char* PCM sample buffer
GetBufferLen() unsigned int Buffer size (bytes)
GetSampleRate() unsigned int Sample rate (Hz)
GetChannelNum() unsigned int 1=mono, 2=stereo

IZoomVideoSDKUserHelper

Admin actions on users.

Method Returns Purpose
removeUser(user) bool Kick user from session
makeHost(user) bool Transfer host role
makeManager(user) bool Promote to manager
revokeManager(user) bool Demote manager
changeName(user, name) bool Rename user

IZoomVideoSDKCmdChannel

Custom signaling (max 60 messages/second).

Method Returns Purpose
sendCommand(user, command) ZoomVideoSDKErrors Send to one user
sendCommandToAll(command) ZoomVideoSDKErrors Broadcast to all

IVirtualBackgroundItem

Method Returns
getImageFilePath() const zchar_t*
getImageName() const zchar_t*
getType() ZoomVideoSDKVirtualBackgroundDataType
isSelected() bool

Critical Timing Rules

⚠️ CRITICAL: Subscribe in onUserVideoStatusChanged, NOT onUserJoin

WRONG (causes Error 2 - Internal_Error):

void onUserJoin(IZoomVideoSDKUserHelper* helper, IVideoSDKVector<IZoomVideoSDKUser*>* userList) {
    for (int i = 0; i < userList->GetCount(); i++) {
        IZoomVideoSDKUser* user = userList->GetItem(i);
        // ERROR: Video may not be ready yet!
        user->GetVideoCanvas()->subscribeWithView(hwnd, aspect, resolution);
    }
}

CORRECT:

void onUserVideoStatusChanged(IZoomVideoSDKVideoHelper* helper, 
                               IVideoSDKVector<IZoomVideoSDKUser*>* userList) {
    IZoomVideoSDKUser* myself = sdk->getSessionInfo()->getMyself();
    
    for (int i = 0; i < userList->GetCount(); i++) {
        IZoomVideoSDKUser* user = userList->GetItem(i);
        if (user == myself) continue;  // Skip self
        
        // Check if video is actually on
        IZoomVideoSDKRawDataPipe* pipe = user->GetVideoPipe();
        if (pipe) {
            ZoomVideoSDKVideoStatus status = pipe->getVideoStatus();
            if (status.isOn) {
                // NOW it's safe to subscribe
                IZoomVideoSDKCanvas* canvas = user->GetVideoCanvas();
                canvas->subscribeWithView(hwnd, aspect, resolution);
            }
        }
    }
}

Video Status Structure

struct ZoomVideoSDKVideoStatus {
    bool isOn;      // true = video is transmitting
    bool hasSource; // true = camera is available
};
  • isOn == true → Safe to subscribe
  • isOn == false → Unsubscribe or skip
  • hasSource == false → User has no camera

Subscribe Fail Reasons (onVideoCanvasSubscribeFail)

enum ZoomVideoSDKSubscribeFailReason {
    ZoomVideoSDKSubscribeFailReason_None = 0,
    ZoomVideoSDKSubscribeFailReason_HasSubscribe1080POr720P = 1,
    ZoomVideoSDKSubscribeFailReason_HasSubscribeTwo720P = 2,
    ZoomVideoSDKSubscribeFailReason_HasSubscribeExceededLimit = 3,
    ZoomVideoSDKSubscribeFailReason_HasSubscribeTwoShare = 4,
    ZoomVideoSDKSubscribeFailReason_HasSubscribeVideo1080POr720PAndOneShare = 5,
    ZoomVideoSDKSubscribeFailReason_TooFrequentCall = 6
};

Handling TooFrequentCall: Add Sleep(200) between subscribe calls.

SDK Error Codes Quick Reference

Code Name Common Cause
0 Success -
1 Wrong_Usage Calling method in wrong state
2 Internal_Error Video not ready, subscribe too early
7 Invalid_Parameter NULL pointer, bad HWND
8 Call_Too_Frequently Need Sleep() between calls

Two Rendering Approaches

Approach Interface When to Use
Canvas API IZoomVideoSDKCanvas::subscribeWithView(HWND) Standard apps, best quality
Raw Data Pipe IZoomVideoSDKRawDataPipe::subscribe(delegate) Custom processing, effects, recording
// SDK renders directly to your window - no YUV conversion needed
IZoomVideoSDKCanvas* canvas = user->GetVideoCanvas();
canvas->subscribeWithView(hwnd, ZoomVideoSDKVideoAspect_PanAndScan, ZoomVideoSDKResolution_Auto);

Raw Data Pipe (Advanced)

// You receive YUV420 frames and must render them yourself
class MyRenderer : public IZoomVideoSDKRawDataPipeDelegate {
    void onRawDataFrameReceived(YUVRawDataI420* data) override {
        // Convert YUV to RGB, then render with GDI/DirectX/OpenGL
    }
};

IZoomVideoSDKRawDataPipe* pipe = user->GetVideoPipe();
pipe->subscribe(ZoomVideoSDKResolution_720P, myRenderer);

Complete Class List

Core SDK

Class Description
IZoomVideoSDK Main singleton object - session creation, callbacks, features
IZoomVideoSDKSession Session information interface
IZoomVideoSDKDelegate Event callbacks for session events
IZoomVideoSDKUser User object interface
IZoomVideoSDKUserHelper User management helper

Raw Data Interfaces

Class Description
AudioRawData Audio raw data handler (PCM 16-bit)
YUVRawDataI420 YUV raw data handler (I420 format)
YUVProcessDataI420 YUV processing data
IZoomVideoSDKRawDataPipe Video/share raw data pipe
IZoomVideoSDKRawDataPipeDelegate Video/share raw data sink
IYUVRawDataI420Converter I420 YUV converter

Virtual Devices

Class Description
IZoomVideoSDKVirtualAudioMic Virtual audio microphone for injection
IZoomVideoSDKVirtualAudioSpeaker Virtual audio speaker
IZoomVideoSDKVideoSource Video source for injection
IZoomVideoSDKVideoSourcePreProcessor Video preprocessing
IZoomVideoSDKShareSource Share source for injection
IZoomVideoSDKSharePreprocessor Share preprocessing

Senders

Class Description
IZoomVideoSDKAudioSender Audio raw data sender
IZoomVideoSDKVideoSender Video raw data sender
IZoomVideoSDKShareSender Share raw data sender
IZoomVideoSDKShareAudioSender Share audio sender
IZoomVideoSDKShareAudioSource Share audio source

Helpers

Class Description
IZoomVideoSDKAudioHelper Audio controls
IZoomVideoSDKVideoHelper Video/camera controls
IZoomVideoSDKShareHelper Screen sharing
IZoomVideoSDKChatHelper Chat messaging
IZoomVideoSDKRecordingHelper Cloud recording
IZoomVideoSDKLiveStreamHelper RTMP live streaming
IZoomVideoSDKLiveTranscriptionHelper Live transcription
IZoomVideoSDKPhoneHelper Phone dial-out
IZoomVideoSDKCmdChannel Command channel
IZoomVideoSDKCRCHelper CRC helper
IZoomVideoSDKWhiteboardHelper Whiteboard
IZoomVideoSDKAnnotationHelper Annotations
IZoomVideoSDKNetworkConnectionHelper Network connection
IZoomVideoSDKSubSessionHelper Subsession helper
IZoomVideoSDKSubSessionManager Subsession manager
IZoomVideoSDKRTMSHelper Real-time media streams
IZoomVideoSDKIncomingLiveStreamHelper Incoming live stream

Settings Helpers

Class Description
IZoomVideoSDKAudioSettingHelper Audio settings
IZoomVideoSDKVideoSettingHelper Video settings
IZoomVideoSDKShareSettingHelper Share settings
IZoomVideoSDKTestAudioDeviceHelper Audio device testing

Devices

Class Description
IZoomVideoSDKCameraDevice Camera device
IZoomVideoSDKMicDevice Microphone device
IZoomVideoSDKSpeakerDevice Speaker device
IVirtualBackgroundItem Virtual background item

Streaming

Class Description
IZoomVideoSDKBroadcastStreamingController Broadcast controller
IZoomVideoSDKBroadcastStreamingViewer Broadcast viewer
IZoomVideoSDKBroadcastStreamingAudioCallback Broadcast audio callback
IZoomVideoSDKBroadcastStreamingVideoCallback Broadcast video callback

Session & Messages

Class Description
IZoomVideoSDKChatMessage Chat message
ILiveTranscriptionLanguage Transcription language
ILiveTranscriptionMessageInfo Transcription message
IZoomVideoSDKSessionDialInNumberInfo Dial-in info
IZoomVideoSDKPhoneSupportCountryInfo Phone country info

Subsessions

Class Description
ISubSessionKit Subsession kit
ISubSessionUser Subsession user
ISubSessionUserHelpRequestHandler Help request handler
IZoomVideoSDKSubSessionParticipant Subsession participant

File Transfer

Class Description
IZoomVideoSDKFileTransferBaseInfo File transfer base info
IZoomVideoSDKSendFile Send file interface
IZoomVideoSDKReceiveFile Receive file interface

Handlers

Class Description
IZoomVideoSDKPasswordHandler Password handler
IZoomVideoSDKRecordingConsentHandler Recording consent
IZoomVideoSDKCameraControlRequestHandler Camera control requests
IZoomVideoSDKRemoteCameraControlHelper Remote camera control
IZoomVideoSDKProxySettingHandler Proxy settings
IZoomVideoSDKSSLCertificateInfo SSL certificate info

Canvas & Actions

Class Description
IZoomVideoSDKCanvas Video/share canvas
IZoomVideoSDKShareAction Share action
IMonitorListBuilder Monitor list builder

Utilities

Class Description
IVideoSDKVector SDK vector collection

Structures

Initialization

struct ZoomVideoSDKInitParams {
    const zchar_t* domain;              // Required: L"https://zoom.us"
    bool enableLog;                      // Enable logging
    const zchar_t* logFilePrefix;        // Log file prefix
    ZoomVideoSDKRawDataMemoryMode videoRawDataMemoryMode;
    ZoomVideoSDKRawDataMemoryMode shareRawDataMemoryMode;
    ZoomVideoSDKRawDataMemoryMode audioRawDataMemoryMode;
    bool enableIndirectRawdata;          // Indirect raw data access
    ZoomVideoSDKExtendParams* extendParams; // Extended parameters
};

struct ZoomVideoSDKExtendParams {
    const zchar_t* speakerTestFilePath;
    // Additional extended parameters
};

Session Context

struct ZoomVideoSDKSessionContext {
    const zchar_t* sessionName;          // Required
    const zchar_t* sessionPassword;      // Optional
    const zchar_t* userName;             // Required
    const zchar_t* token;                // Required: JWT token
    unsigned int sessionIdleTimeoutMins; // 0 = never timeout, default 40
    bool autoLoadMutliStream;            // Auto-load multiple streams
    
    ZoomVideoSDKVideoOption videoOption;
    ZoomVideoSDKAudioOption audioOption;
    
    IZoomVideoSDKVideoSource* externalVideoSource;
    IZoomVideoSDKVirtualAudioMic* virtualAudioMic;
    IZoomVideoSDKVirtualAudioSpeaker* virtualAudioSpeaker;
    IZoomVideoSDKVideoSourcePreProcessor* preProcessor;
};

struct ZoomVideoSDKVideoOption {
    bool localVideoOn;                   // Start with video on
};

struct ZoomVideoSDKAudioOption {
    bool connect;                        // Connect to audio
    bool mute;                           // Start muted
};

Statistics

struct ZoomVideoSDKSessionAudioStatisticInfo {
    int frequency;
    int latency;
    int Jitter;
    float packetLossAvg;
    float packetLossMax;
};

struct ZoomVideoSDKSessionASVStatisticInfo {
    int frame_width;
    int frame_height;
    int fps;
    int latency;
    int Jitter;
    float packetLossAvg;
    float packetLossMax;
};

// Aliases
typedef ZoomVideoSDKSessionASVStatisticInfo _SessionASVStatisticInfo;
typedef ZoomVideoSDKSessionAudioStatisticInfo _SessionAudioStatisticInfo;

struct ZoomVideoSDKVideoStatisticInfo {
    int width;
    int height;
    int fps;
    int bps;
};

struct ZoomVideoSDKShareStatisticInfo {
    int width;
    int height;
    int fps;
    int bps;
};

Video/Audio Status

struct ZoomVideoSDKVideoStatus {
    bool isOn;
    bool hasSource;
};

struct ZoomVideoSDKAudioStatus {
    bool isMuted;
    bool isAudioConnected;
    ZoomVideoSDKAudioType audioType;
};

struct VideoSourceCapability {
    unsigned int width;
    unsigned int height;
    unsigned int frame;  // FPS
};

Live Streaming

struct ZoomVideoSDKLiveStreamParams {
    const zchar_t* streamUrl;           // RTMP URL
    const zchar_t* streamKey;           // Stream key
    const zchar_t* broadcastUrl;        // Broadcast URL
};

struct ZoomVideoSDKLiveStreamSetting {
    // Live stream settings
};

struct IncomingLiveStreamStatus {
    // Incoming stream status
};

Share

struct ZoomVideoSDKShareOption {
    bool isWithDeviceAudio;
    bool isOptimizeForSharedVideo;
};

struct ZoomVideoSDKShareCursorData {
    int x;
    int y;
    // Cursor information
};

struct ZoomVideoSDKSharePreprocessParam {
    // Preprocessing parameters
};

File Transfer

struct FileTransferProgress {
    unsigned long long transferredSize;
    unsigned long long totalSize;
    float percentage;
};

struct ZoomVideoSDKFileStatus {
    // File transfer status
};

Misc

struct ZoomVideoSDKViewSize {
    int width;
    int height;
};

struct tagVideoPreferenceSetting {
    // Video preference settings
};

struct tagProxySettings {
    // Proxy configuration
};

struct InvitePhoneUserInfo {
    const zchar_t* countryCode;
    const zchar_t* phoneNumber;
    const zchar_t* displayName;
};

struct ZoomVideoSDKSteamingJoinContext {
    // Streaming join context
};

IZoomVideoSDK (Main Interface)

class IZoomVideoSDK {
public:
    // Lifecycle
    virtual ZoomVideoSDKErrors initialize(ZoomVideoSDKInitParams& params) = 0;
    virtual ZoomVideoSDKErrors cleanup() = 0;
    
    // Session management
    virtual IZoomVideoSDKSession* joinSession(ZoomVideoSDKSessionContext& params) = 0;
    virtual ZoomVideoSDKErrors leaveSession(bool end) = 0;
    virtual IZoomVideoSDKSession* getSessionInfo() = 0;
    virtual bool isInSession() = 0;
    
    // Listeners
    virtual void addListener(IZoomVideoSDKDelegate* listener) = 0;
    virtual void removeListener(IZoomVideoSDKDelegate* listener) = 0;
    
    // Helpers
    virtual IZoomVideoSDKAudioHelper* getAudioHelper() = 0;
    virtual IZoomVideoSDKVideoHelper* getVideoHelper() = 0;
    virtual IZoomVideoSDKUserHelper* getUserHelper() = 0;
    virtual IZoomVideoSDKShareHelper* getShareHelper() = 0;
    virtual IZoomVideoSDKRecordingHelper* getRecordingHelper() = 0;
    virtual IZoomVideoSDKLiveStreamHelper* getLiveStreamHelper() = 0;
    virtual IZoomVideoSDKChatHelper* getChatHelper() = 0;
    virtual IZoomVideoSDKCmdChannel* getCmdChannel() = 0;
    virtual IZoomVideoSDKPhoneHelper* getPhoneHelper() = 0;
    virtual IZoomVideoSDKLiveTranscriptionHelper* getLiveTranscriptionHelper() = 0;
    virtual IZoomVideoSDKCRCHelper* getCRCHelper() = 0;
    virtual IZoomVideoSDKWhiteboardHelper* getWhiteboardHelper() = 0;
    virtual IZoomVideoSDKSubSessionHelper* getSubSessionHelper() = 0;
    virtual IZoomVideoSDKRTMSHelper* getRealTimeMediaStreamsHelper() = 0;
    virtual IZoomVideoSDKIncomingLiveStreamHelper* getIncomingLiveStreamHelper() = 0;
    
    // Settings
    virtual IZoomVideoSDKAudioSettingHelper* getAudioSettingHelper() = 0;
    virtual IZoomVideoSDKVideoSettingHelper* getVideoSettingHelper() = 0;
    virtual IZoomVideoSDKShareSettingHelper* getShareSettingHelper() = 0;
    virtual IZoomVideoSDKTestAudioDeviceHelper* GetAudioDeviceTestHelper() = 0;
    virtual IZoomVideoSDKNetworkConnectionHelper* getNetworkConnectionHelper() = 0;
    
    // Utilities
    virtual const zchar_t* getSDKVersion() = 0;
    virtual const zchar_t* exportLog() = 0;
    virtual ZoomVideoSDKErrors cleanAllExportedLogs() = 0;
};

Factory Functions

// Create SDK object
IZoomVideoSDK* CreateZoomVideoSDKObj();

// Destroy SDK object
void DestroyZoomVideoSDKObj();

IZoomVideoSDKDelegate (Callbacks)

class IZoomVideoSDKDelegate {
public:
    // Session callbacks
    virtual void onSessionJoin() = 0;
    virtual void onSessionLeave() = 0;
    virtual void onSessionLeave(ZoomVideoSDKSessionLeaveReason eReason) = 0;
    virtual void onError(ZoomVideoSDKErrors errorCode, int detailErrorCode) = 0;
    virtual void onSessionNeedPassword(IZoomVideoSDKPasswordHandler* handler) = 0;
    virtual void onSessionPasswordWrong(IZoomVideoSDKPasswordHandler* handler) = 0;
    
    // User callbacks
    virtual void onUserJoin(IZoomVideoSDKUserHelper* pUserHelper,
                           IVideoSDKVector<IZoomVideoSDKUser*>* userList) = 0;
    virtual void onUserLeave(IZoomVideoSDKUserHelper* pUserHelper,
                            IVideoSDKVector<IZoomVideoSDKUser*>* userList) = 0;
    virtual void onUserHostChanged(IZoomVideoSDKUserHelper* pUserHelper,
                                  IZoomVideoSDKUser* pUser) = 0;
    virtual void onUserManagerChanged(IZoomVideoSDKUser* pUser) = 0;
    virtual void onUserNameChanged(IZoomVideoSDKUser* pUser) = 0;
    
    // Video callbacks
    virtual void onUserVideoStatusChanged(IZoomVideoSDKVideoHelper* pVideoHelper,
                                         IVideoSDKVector<IZoomVideoSDKUser*>* userList) = 0;
    virtual void onSpotlightVideoChanged(IZoomVideoSDKVideoHelper* pVideoHelper,
                                        IVideoSDKVector<IZoomVideoSDKUser*>* userList) = 0;
    
    // Audio callbacks
    virtual void onUserAudioStatusChanged(IZoomVideoSDKAudioHelper* pAudioHelper,
                                         IVideoSDKVector<IZoomVideoSDKUser*>* userList) = 0;
    virtual void onUserActiveAudioChanged(IZoomVideoSDKAudioHelper* pAudioHelper,
                                         IVideoSDKVector<IZoomVideoSDKUser*>* list) = 0;
    
    // Raw audio callbacks
    virtual void onMixedAudioRawDataReceived(AudioRawData* data_) = 0;
    virtual void onOneWayAudioRawDataReceived(AudioRawData* data_,
                                             IZoomVideoSDKUser* pUser) = 0;
    virtual void onSharedAudioRawDataReceived(AudioRawData* data_) = 0;
    
    // Share callbacks
    virtual void onUserShareStatusChanged(IZoomVideoSDKShareHelper* pShareHelper,
                                         IZoomVideoSDKUser* pUser,
                                         IZoomVideoSDKShareAction* pShareAction) = 0;
    virtual void onShareContentChanged(IZoomVideoSDKShareHelper* pShareHelper,
                                      IZoomVideoSDKUser* pUser,
                                      IZoomVideoSDKShareAction* pShareAction) = 0;
    virtual void onFailedToStartShare(IZoomVideoSDKShareHelper* pShareHelper,
                                     IZoomVideoSDKUser* pUser) = 0;
    virtual void onShareContentSizeChanged(IZoomVideoSDKShareHelper* pShareHelper,
                                          IZoomVideoSDKUser* pUser,
                                          IZoomVideoSDKShareAction* pShareAction) = 0;
    
    // Chat callbacks
    virtual void onChatNewMessageNotify(IZoomVideoSDKChatHelper* pChatHelper,
                                       IZoomVideoSDKChatMessage* messageItem) = 0;
    virtual void onChatMsgDeleteNotification(IZoomVideoSDKChatHelper* pChatHelper,
                                            const zchar_t* msgID,
                                            ZoomVideoSDKChatMessageDeleteType deleteBy) = 0;
    virtual void onChatPrivilegeChanged(IZoomVideoSDKChatHelper* pChatHelper,
                                       ZoomVideoSDKChatPrivilegeType privilege) = 0;
    
    // Command channel callbacks
    virtual void onCommandReceived(IZoomVideoSDKUser* sender, const zchar_t* strCmd) = 0;
    virtual void onCommandChannelConnectResult(bool isSuccess) = 0;
    
    // Recording callbacks
    virtual void onCloudRecordingStatus(RecordingStatus status,
                                       IZoomVideoSDKRecordingConsentHandler* pHandler) = 0;
    virtual void onUserRecordingConsent(IZoomVideoSDKUser* pUser) = 0;
    virtual void onHostAskUnmute() = 0;
    
    // Live stream callbacks
    virtual void onLiveStreamStatusChanged(IZoomVideoSDKLiveStreamHelper* pLiveStreamHelper,
                                          ZoomVideoSDKLiveStreamStatus status) = 0;
    
    // Live transcription callbacks
    virtual void onLiveTranscriptionStatus(ZoomVideoSDKLiveTranscriptionStatus status) = 0;
    virtual void onOriginalLanguageMsgReceived(ILiveTranscriptionMessageInfo* messageInfo) = 0;
    virtual void onLiveTranscriptionMsgInfoReceived(ILiveTranscriptionMessageInfo* messageInfo) = 0;
    virtual void onLiveTranscriptionMsgError(ILiveTranscriptionLanguage* spokenLanguage,
                                            ILiveTranscriptionLanguage* transcriptLanguage) = 0;
    
    // Phone callbacks
    virtual void onInviteByPhoneStatus(PhoneStatus status, PhoneFailedReason reason) = 0;
    virtual void onCalloutJoinSuccess(IZoomVideoSDKUser* pUser, const zchar_t* phoneNumber) = 0;
    
    // Camera control callbacks
    virtual void onCameraControlRequestResult(IZoomVideoSDKUser* pUser, bool isApproved) = 0;
    virtual void onCameraControlRequestReceived(IZoomVideoSDKUser* pUser,
                                               ZoomVideoSDKCameraControlRequestType requestType,
                                               IZoomVideoSDKCameraControlRequestHandler* handler) = 0;
    
    // Remote control callbacks
    virtual void onRemoteControlStatus(IZoomVideoSDKUser* pUser,
                                      IZoomVideoSDKShareAction* pShareAction,
                                      ZoomVideoSDKRemoteControlStatus status) = 0;
    virtual void onRemoteControlRequestReceived(IZoomVideoSDKUser* pUser,
                                               IZoomVideoSDKShareAction* pShareAction,
                                               IZoomVideoSDKRemoteControlRequestHandler* handler) = 0;
    virtual void onRemoteControlServiceInstallResult(bool bSuccess) = 0;
    
    // Multi-camera callbacks
    virtual void onMultiCameraStreamStatusChanged(ZoomVideoSDKMultiCameraStreamStatus status,
                                                 IZoomVideoSDKUser* pUser,
                                                 IZoomVideoSDKRawDataPipe* pVideoPipe) = 0;
    
    // Device callbacks
    virtual void onMicSpeakerVolumeChanged(unsigned int micVolume,
                                          unsigned int speakerVolume) = 0;
    virtual void onAudioDeviceStatusChanged(ZoomVideoSDKAudioDeviceType type,
                                           ZoomVideoSDKAudioDeviceStatus status) = 0;
    virtual void onTestMicStatusChanged(ZoomVideoSDK_TESTMIC_STATUS status) = 0;
    virtual void onSelectedAudioDeviceChanged() = 0;
    virtual void onCameraListChanged() = 0;
    
    // Network callbacks
    virtual void onUserVideoNetworkStatusChanged(ZoomVideoSDKNetworkStatus status,
                                                IZoomVideoSDKUser* pUser) = 0;
    virtual void onProxyDetectComplete() = 0;
    virtual void onProxySettingNotification(IZoomVideoSDKProxySettingHandler* handler) = 0;
    virtual void onSSLCertVerifiedFailNotification(IZoomVideoSDKSSLCertificateInfo* info) = 0;
    
    // CRC callbacks
    virtual void onCallCRCDeviceStatusChanged(ZoomVideoSDKCRCCallStatus status) = 0;
    
    // Canvas callbacks
    virtual void onVideoCanvasSubscribeFail(ZoomVideoSDKSubscribeFailReason fail_reason,
                                           IZoomVideoSDKUser* pUser, void* handle) = 0;
    virtual void onShareCanvasSubscribeFail(IZoomVideoSDKUser* pUser, void* handle,
                                           IZoomVideoSDKShareAction* pShareAction) = 0;
    
    // Annotation callbacks
    virtual void onAnnotationHelperCleanUp(IZoomVideoSDKAnnotationHelper* helper) = 0;
    virtual void onAnnotationPrivilegeChange(IZoomVideoSDKUser* pUser,
                                            IZoomVideoSDKShareAction* pShareAction) = 0;
    virtual void onAnnotationHelperActived(void* handle) = 0;
    
    // File transfer callbacks
    virtual void onSendFileStatus(IZoomVideoSDKSendFile* file,
                                 const FileTransferStatus& status) = 0;
    virtual void onReceiveFileStatus(IZoomVideoSDKReceiveFile* file,
                                    const FileTransferStatus& status) = 0;
    
    // Misc callbacks
    virtual void onVideoAlphaChannelStatusChanged(bool isAlphaModeOn) = 0;
    
    // Incoming live stream callbacks
    virtual void onBindIncomingLiveStreamResponse(bool bSuccess, const zchar_t* strStreamKeyID) = 0;
    virtual void onUnbindIncomingLiveStreamResponse(bool bSuccess, const zchar_t* strStreamKeyID) = 0;
    virtual void onIncomingLiveStreamStatusResponse(bool bSuccess,
                                                    IVideoSDKVector<IncomingLiveStreamStatus>* list) = 0;
    virtual void onStartIncomingLiveStreamResponse(bool bSuccess, const zchar_t* strStreamKeyID) = 0;
    virtual void onStopIncomingLiveStreamResponse(bool bSuccess, const zchar_t* strStreamKeyID) = 0;
};

Raw Data Interfaces

AudioRawData

class AudioRawData {
public:
    virtual char* GetBuffer() = 0;           // PCM 16-bit buffer
    virtual unsigned int GetBufferLen() = 0; // Buffer length in bytes
    virtual unsigned int GetSampleRate() = 0;// Sample rate (Hz)
    virtual unsigned int GetChannelNum() = 0;// Channels (1=mono, 2=stereo)
    virtual unsigned long long GetTimeStamp() = 0;
};

YUVRawDataI420

class YUVRawDataI420 {
public:
    virtual char* GetYBuffer() = 0;
    virtual char* GetUBuffer() = 0;
    virtual char* GetVBuffer() = 0;
    virtual char* GetAlphaBuffer() = 0;      // Optional alpha channel
    virtual char* GetBuffer() = 0;           // Full YUV buffer
    virtual unsigned int GetBufferLen() = 0;
    virtual unsigned int GetStreamWidth() = 0;
    virtual unsigned int GetStreamHeight() = 0;
    virtual unsigned int GetRotation() = 0;  // 0, 90, 180, 270
    virtual unsigned long long GetSourceID() = 0;
    virtual unsigned long long GetTimeStamp() = 0;
    virtual bool IsLimitedI420() = 0;
    
    // Reference counting
    virtual bool CanAddRef() = 0;
    virtual bool AddRef() = 0;
    virtual int Release() = 0;
};

IZoomVideoSDKRawDataPipeDelegate

class IZoomVideoSDKRawDataPipeDelegate {
public:
    virtual void onRawDataFrameReceived(YUVRawDataI420* data) = 0;
    virtual void onRawDataStatusChanged(RawDataStatus status) = 0;
};

enum RawDataStatus {
    RawData_On,
    RawData_Off
};

Virtual Device Interfaces

IZoomVideoSDKVirtualAudioMic

class IZoomVideoSDKVirtualAudioMic {
public:
    virtual void onMicInitialize(IZoomVideoSDKAudioSender* sender) = 0;
    virtual void onMicStartSend() = 0;
    virtual void onMicStopSend() = 0;
    virtual void onMicUninitialized() = 0;
};

class IZoomVideoSDKAudioSender {
public:
    virtual ZoomVideoSDKErrors Send(char* data,
                                   unsigned int dataLength,
                                   int sampleRate) = 0;
};

IZoomVideoSDKVirtualAudioSpeaker

class IZoomVideoSDKVirtualAudioSpeaker {
public:
    virtual void onVirtualSpeakerMixedAudioReceived(AudioRawData* data_) = 0;
    virtual void onVirtualSpeakerOneWayAudioReceived(AudioRawData* data_,
                                                    IZoomVideoSDKUser* pUser) = 0;
    virtual void onVirtualSpeakerSharedAudioReceived(AudioRawData* data_) = 0;
};

IZoomVideoSDKVideoSource

class IZoomVideoSDKVideoSource {
public:
    virtual void onInitialize(IZoomVideoSDKVideoSender* sender,
                             IVideoSDKVector<VideoSourceCapability>* supportCapList,
                             VideoSourceCapability& suggestCap) = 0;
    virtual void onPropertyChange(IVideoSDKVector<VideoSourceCapability>* supportCapList,
                                 VideoSourceCapability suggestCap) = 0;
    virtual void onStartSend() = 0;
    virtual void onStopSend() = 0;
    virtual void onUninitialized() = 0;
};

class IZoomVideoSDKVideoSender {
public:
    virtual ZoomVideoSDKErrors sendVideoFrame(char* frameBuffer,
                                             int width, int height,
                                             int frameLength,
                                             int rotation) = 0;
    // Alternative with Y, U, V planes
    virtual ZoomVideoSDKErrors sendVideoFrame(char* yBuffer, char* uBuffer, char* vBuffer,
                                             int width, int height,
                                             int frameLength,
                                             int rotation) = 0;
};

IZoomVideoSDKShareSource

class IZoomVideoSDKShareSource {
public:
    virtual void onShareSendStarted(IZoomVideoSDKShareSender* pSender) = 0;
    virtual void onShareSendStopped() = 0;
};

class IZoomVideoSDKShareSender {
public:
    virtual ZoomVideoSDKErrors sendShareFrame(char* frameBuffer,
                                             int width, int height,
                                             int frameLength) = 0;
    virtual ZoomVideoSDKErrors sendShareFrame(char* yBuffer, char* uBuffer, char* vBuffer,
                                             int width, int height,
                                             int frameLength,
                                             int rotation) = 0;
};

Enumerations

ZoomVideoSDKErrors

enum ZoomVideoSDKErrors {
    ZoomVideoSDKErrors_Success = 0,
    ZoomVideoSDKErrors_Wrong_Usage = 1,
    ZoomVideoSDKErrors_Internal_Error = 2,
    ZoomVideoSDKErrors_Uninitialize = 3,
    ZoomVideoSDKErrors_Memory_Error = 4,
    ZoomVideoSDKErrors_Load_Module_Error = 5,
    ZoomVideoSDKErrors_UnLoad_Module_Error = 6,
    ZoomVideoSDKErrors_Invalid_Parameter = 7,
    ZoomVideoSDKErrors_Call_Too_Frequently = 8,
    ZoomVideoSDKErrors_No_Impl = 9,
    ZoomVideoSDKErrors_Dont_Support_Feature = 10,
    ZoomVideoSDKErrors_Unknown = 100,
    
    // Auth errors (1000+)
    ZoomVideoSDKErrors_Auth_Error = 1001,
    ZoomVideoSDKErrors_Auth_Empty_Key_or_Secret = 1002,
    ZoomVideoSDKErrors_Auth_Wrong_Key_or_Secret = 1003,
    ZoomVideoSDKErrors_Auth_DoesNot_Support_SDK = 1004,
    ZoomVideoSDKErrors_Auth_Disable_SDK = 1005,
    
    // Session errors (3000+)
    ZoomVideoSDKErrors_Session_Join_Failed = 3001,
    ZoomVideoSDKErrors_Session_No_Rights = 3002,
    ZoomVideoSDKErrors_Session_Already_In_Progress = 3003,
    ZoomVideoSDKErrors_Session_Dont_Support_SessionType = 3004,
    ZoomVideoSDKErrors_Session_Reconnecting = 3005,
    ZoomVideoSDKErrors_Session_Disconnecting = 3006,
    ZoomVideoSDKErrors_Session_Not_Started = 3007,
    ZoomVideoSDKErrors_Session_Need_Password = 3008,
    ZoomVideoSDKErrors_Session_Password_Wrong = 3009,
    ZoomVideoSDKErrors_Session_Remote_DB_Error = 3010,
    ZoomVideoSDKErrors_Session_Invalid_Param = 3011,
    
    // Audio/Video errors
    ZoomVideoSDKErrors_Session_Audio_Error = 4001,
    ZoomVideoSDKErrors_Session_Audio_No_Microphone = 4002,
    ZoomVideoSDKErrors_Session_Video_Error = 5001,
    ZoomVideoSDKErrors_Session_Video_Device_Error = 5002,
    
    // Share errors
    ZoomVideoSDKErrors_Session_Share_Error = 6001,
    ZoomVideoSDKErrors_Session_Share_Module_Not_Ready = 6002,
    ZoomVideoSDKErrors_Session_Share_You_Are_Not_Sharing = 6003,
    ZoomVideoSDKErrors_Session_Share_Type_Is_Not_Support = 6004,
    ZoomVideoSDKErrors_Session_Share_Internal_Error = 6005,
    
    ZoomVideoSDKErrors_Dont_Support_Multi_Stream_Video_User = 7001,
};

Resolution Options

enum ZoomVideoSDKResolution {
    ZoomVideoSDKResolution_90P,
    ZoomVideoSDKResolution_180P,
    ZoomVideoSDKResolution_360P,
    ZoomVideoSDKResolution_720P,
    ZoomVideoSDKResolution_1080P
};

Recording Status

enum RecordingStatus {
    Recording_Start,
    Recording_Stop,
    Recording_Pause,
    Recording_Connecting,
    Recording_DiskFull
};

Memory Mode

enum ZoomVideoSDKRawDataMemoryMode {
    ZoomVideoSDKRawDataMemoryModeStack,
    ZoomVideoSDKRawDataMemoryModeHeap
};

Session Leave Reason

enum ZoomVideoSDKSessionLeaveReason {
    ZoomVideoSDKSessionLeaveReason_EndByHost,
    ZoomVideoSDKSessionLeaveReason_HostEndForAll,
    ZoomVideoSDKSessionLeaveReason_KickedByHost,
    ZoomVideoSDKSessionLeaveReason_Timeout,
    ZoomVideoSDKSessionLeaveReason_SessionIdleTimeout,
    ZoomVideoSDKSessionLeaveReason_Default
};

Live Transcription Status

enum ZoomVideoSDKLiveTranscriptionStatus {
    ZoomVideoSDKLiveTranscription_Status_Stop,
    ZoomVideoSDKLiveTranscription_Status_Start
};

Network Status

enum ZoomVideoSDKNetworkStatus {
    ZoomVideoSDKNetworkStatus_Good,
    ZoomVideoSDKNetworkStatus_Normal,
    ZoomVideoSDKNetworkStatus_Poor,
    ZoomVideoSDKNetworkStatus_Bad,
    ZoomVideoSDKNetworkStatus_Connecting
};

Essential Headers

// Core headers
#include "zoom_video_sdk_api.h"              // CreateZoomVideoSDKObj, DestroyZoomVideoSDKObj
#include "zoom_video_sdk_interface.h"        // IZoomVideoSDK
#include "zoom_video_sdk_delegate_interface.h" // IZoomVideoSDKDelegate
#include "zoom_video_sdk_def.h"              // Structures, enums
#include "zoom_video_sdk_platform.h"         // Platform definitions
#include "zoom_sdk_raw_data_def.h"           // Raw data types

// Helper headers
#include "helpers/zoom_video_sdk_user_helper_interface.h"
#include "helpers/zoom_video_sdk_audio_helper_interface.h"
#include "helpers/zoom_video_sdk_video_helper_interface.h"
#include "helpers/zoom_video_sdk_share_helper_interface.h"
#include "helpers/zoom_video_sdk_chat_helper_interface.h"
#include "helpers/zoom_video_sdk_recording_helper_interface.h"
#include "helpers/zoom_video_sdk_livestream_helper_interface.h"
#include "helpers/zoom_video_sdk_livetranscription_helper_interface.h"
#include "helpers/zoom_video_sdk_cmd_channel_interface.h"
#include "helpers/zoom_video_sdk_phone_helper_interface.h"
#include "helpers/zoom_video_sdk_audio_send_rawdata_interface.h"
#include "helpers/zoom_video_sdk_video_source_helper_interface.h"

// Message interfaces
#include "zoom_video_sdk_chat_message_interface.h"
#include "zoom_video_sdk_session_info_interface.h"

// Namespace
using namespace ZOOM_VIDEO_SDK_NAMESPACE;
// Or use macro
USING_ZOOM_VIDEO_SDK_NAMESPACE

Additional Resources