Released: 2026-06-24 Updated: 2026-07-01
Summary: Breaking changes include 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, and new callbacks for subsession status changes that trigger when users join or leave subsessions. Adds a pre-connection flow to accelerate session joins, machine-answer detection for PSTN call-outs, and comprehensive audio QoS statistics including jitter buffer metrics and concealment data. Additional improvements include user failover status tracking, expanded command channel payload limits (now 1024 bytes), removal of annotation interfaces and XMPP command channel, and API naming consistency updates for audio configuration methods.
Breaking Changes
-
Support the I420Limited and I420Full color ranges for the external video source.
-
Add a new field
externalVideoSourceDataFormattoZoomVideoSDKSessionContext(zoom_video_sdk_def.h).struct ZoomVideoSDKSessionContext { // ... FrameDataFormat externalVideoSourceDataFormat; // ... } -
Remove the last parameter
FrameDataFormat formatfromsendVideoFrame(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; };
-
-
Joining or leaving a subsession now triggers the
onSubSessionStatusChangedandonSessionLeavecallbacks inIZoomVideoSDKDelegate(zoom_video_sdk_delegate_interface.h).-
New callbacks in
IZoomVideoSDKDelegate.class IZoomVideoSDKDelegate { public: virtual void onSubSessionStatusChanged(ZoomVideoSDKSubSessionStatus status, IVideoSDKVector<ISubSessionKit*>* pSubSessionKitList) = 0; virtual void onSessionLeave(ZoomVideoSDKSessionLeaveReason eReason) = 0; }; -
New enumeration values in
ZoomVideoSDKSessionLeaveReason.typedef enum { /** User leaves current session because joining a subsession. */ ZoomVideoSDKSessionLeaveReason_JoinSubsession, /** User leaves current session because returning to the main session. */ ZoomVideoSDKSessionLeaveReason_ReturnToMainSession, }ZoomVideoSDKSessionLeaveReason;
-
Added
-
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.h.struct 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,
-
-
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 PhoneStatus(zoom_video_sdk_phone_helper_interface.h).enum PhoneStatus { // ... /** Call was answered by machine. */ PhoneStatus_AnsweredByMachine, // ... }; -
New member in
struct InvitePhoneUserInfo.struct InvitePhoneUserInfo { // ... /** InvitePhoneUserInfo, true: Enable machine-answer detection for this callout. */ bool bDetectMachine; // ... };
-
-
Support user failover status change.
-
New callback in
IZoomVideoSDKDelegate(zoom_video_sdk_delegate_interface.h).class IZoomVideoSDKDelegate { public: // ... virtual void onUserFailoverStatusChanged(IZoomVideoSDKUser* pUser, bool bInFailover) = 0; // ... }; -
New interface in
IZoomVideoSDKUser(zoom_video_sdk_user_helper_interface.h).class IZoomVideoSDKUser { public: // ... virtual bool isInFailover() = 0; // ... };
-
-
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
-
Remove the annotation interface file; annotation-related external interfaces are now disabled via Linux build macros.
-
Remove the xmpp command channel and remove the xmpp library from the SDK release package.
-
Increase the command channel payload size limit to 1024.
-
Rename several SDK APIs for naming consistency.
- Rename
isMicOriginalInputEnabletoisMicOriginalInputEnabled. - Rename
isHighFidelityMusicModeEnabletoisHighFidelityMusicModeEnabled. - Rename
isEchoCancellationEnabletoisEchoCancellationEnabled. - Rename
isStereoAudioEnabletoisStereoAudioEnabled. - Rename
isFileTransferEnabletoisFileTransferEnabled.
- Rename