Released: 2026-06-25 Updated: 2026-07-01
Summary: Breaking changes include upgrading to the VC++ 2022 redistributable runtime, modifications to external video source handling with new I420Limited and I420Full color range support through the externalVideoSourceDataFormat field in ZoomVideoSDKSessionContext, removal of the format parameter from sendVideoFrame, new callbacks for subsession status changes (onSubSessionStatusChanged and onSessionLeave) that trigger when users join or leave subsessions, and API naming consistency updates for audio configuration methods. Adds a pre-connection (two-step join) flow with prepareJoin and commitJoin methods to accelerate session joins, machine-answer detection for PSTN call-outs through PhoneStatus_AnsweredByMachine status and bDetectMachine flag, user failover status tracking, and comprehensive audio QoS statistics including jitter buffer metrics, concealment data, FEC packet information, and audio energy measurements. Additional improvements include expanded command channel payload limits (now 1024 bytes) and adaptation of resume and pause share interfaces to support preprocess share.
Breaking Changes
-
Upgrade the VC++ runtime to the VC++ 2022 redistributable runtime DLLs.
-
Support the I420Limited and I420Full color ranges for the external video source.
-
Remove the last parameter
FrameDataFormat formatfromsendVideoFrameinIZoomVideoSDKVideoSender(zoom_video_sdk_video_source_helper_interface.h)class IZoomVideoSDKVideoSender { public: // ... virtual void sendVideoFrame(char* frameBuffer, int width, int height, int frameLength, int rotation) = 0; // ... }; -
Add a new field
externalVideoSourceDataFormattoZoomVideoSDKSessionContext(zoom_video_sdk_def.h)struct ZoomVideoSDKSessionContext { // ... FrameDataFormat externalVideoSourceDataFormat; // ... }
-
-
Joining or leaving a subsession now triggers the
onSubSessionStatusChangedandonSessionLeavecallbacks inIZoomVideoSDKDelegate(zoom_video_sdk_delegate_interface.h).-
New callback in
IZoomVideoSDKDelegateclass IZoomVideoSDKDelegate { public: virtual void onSubSessionStatusChanged(ZoomVideoSDKSubSessionStatus status, IVideoSDKVector<ISubSessionKit*>* pSubSessionKitList) = 0; }; -
New callback in
IZoomVideoSDKDelegateclass IZoomVideoSDKDelegate { public: virtual void onSessionLeave(ZoomVideoSDKSessionLeaveReason eReason) = 0; }; -
New enumeration values in
ZoomVideoSDKSessionLeaveReasontypedef enum { /** User leaves current session because joining a subsession. */ ZoomVideoSDKSessionLeaveReason_JoinSubsession, /** User leaves current session because returning to the main session. */ ZoomVideoSDKSessionLeaveReason_ReturnToMainSession, }ZoomVideoSDKSessionLeaveReason;
-
-
Rename several audio configuration APIs for naming consistency.
- Rename
isMicOriginalInputEnabletoisMicOriginalInputEnabled. - Rename
isHighFidelityMusicModeEnabletoisHighFidelityMusicModeEnabled. - Rename
isEchoCancellationEnabletoisEchoCancellationEnabled. - Rename
isStereoAudioEnabletoisStereoAudioEnabled. - Rename
isFileTransferEnabletoisFileTransferEnabled.
- Rename
Added
-
Support user failover status change.
-
New callback in
IZoomVideoSDKDelegatevirtual void onUserFailoverStatusChanged(IZoomVideoSDKUser* pUser, bool bInFailover) = 0; -
New interface in
IZoomVideoSDKUservirtual bool isInFailover() = 0;
-
-
Add machine-answer detection for PSTN call-out, so the host can tell whether a call was answered by a person or forwarded to voicemail.
-
New value in
enum PhoneStatusenum PhoneStatus { // ... /** Call was answered by machine. */ PhoneStatus_AnsweredByMachine, } -
New member in
struct InvitePhoneUserInfostruct InvitePhoneUserInfo { // ... /** InvitePhoneUserInfo, true: Enable machine-answer detection for this callout. */ bool bDetectMachine; // ... }
-
-
Add a pre-connection (two-step join) flow to speed up the actual session join.
-
New interfaces in
IZoomVideoSDK(zoom_video_sdk_interface.h)virtual IZoomVideoSDKSession* prepareJoin(ZoomVideoSDKSessionContext& params, ZoomVideoSDKPreJoinParam& preJoinParam) = 0; virtual ZoomVideoSDKErrors commitJoin() = 0; virtual ZoomVideoSDKErrors cancelPrepareJoin() = 0; -
New struct
ZoomVideoSDKPreJoinParaminzoom_video_sdk_def.hstruct ZoomVideoSDKPreJoinParam { unsigned int timeoutInterval = 0; }; -
New error codes in
ZoomVideoSDKErrors(zoom_video_sdk_def.h)ZoomVideoSDKErrors_Session_PreJoin_Not_In_Flow, ZoomVideoSDKErrors_Session_PreJoin_Already_Commit, ZoomVideoSDKErrors_Session_PreJoin_Timeout,
-
-
Provide audio QoS statistics data.
-
New member in
ZoomVideoSDKQOSSendStatistics(zoom_video_sdk_user_helper_interface.h)struct ZoomVideoSDKQOSSendStatistics : ZoomVideoSDKQOSStatistics { /** Total bytes of RTP headers (and padding) sent (send only). */ unsigned int headerBytesSent; }; -
New members in
ZoomVideoSDKQOSRecvStatistics(zoom_video_sdk_user_helper_interface.h)struct ZoomVideoSDKQOSRecvStatistics : ZoomVideoSDKQOSStatistics { /** Total bytes of RTP headers (and padding) received (receive only). */ unsigned long long headerBytesReceived; /** Non-FEC packets discarded by NetEQ (receive only, audio only). */ unsigned int packetsDiscarded; /** Total number of FEC packets received (receive only, audio only). */ unsigned int fecPacketsReceived; /** FEC packets discarded by NetEQ (receive only, audio only). */ unsigned int fecPacketsDiscarded; /** Accumulated current target delay of the jitter buffer, in seconds (receive only, audio only). */ double jitterBufferTargetDelay; /** Accumulated minimum achievable jitter buffer delay, in seconds (receive only, audio only). */ double jitterBufferMinimumDelay; /** Total audio samples generated by NetEQ (receive only, audio only). */ unsigned long long totalSamplesReceived; /** Samples produced by concealment instead of real decode (receive only, audio only). */ unsigned long long concealedSamples; /** Subset of concealedSamples that are silent (receive only, audio only). */ unsigned long long silentConcealedSamples; /** Number of concealment events (receive only, audio only). */ unsigned long long concealmentEvents; /** Samples inserted to slow down playout (deceleration) (receive only, audio only). */ unsigned long long insertedSamplesForDeceleration; /** Samples removed to speed up playout (acceleration) (receive only, audio only). */ unsigned long long removedSamplesForAcceleration; /** Total duration of all audio samples received, in seconds (receive only, audio only). */ double totalSamplesDuration; /** Most recent audio level of the received stream, range [0.0, 1.0] (receive only, audio only). */ double audioLevel; /** Accumulated audio energy (receive only, audio only). */ double totalAudioEnergy; };
-
Changed
- Adapt the resume and pause share interfaces to support preprocess share.
- Increase the command channel payload size limit to 1024.