Released: 2026-03-26 Updated: 2026-08-26
Summary: Adds detailed QoS statistics for Web SDK consistency, multi-language telephony “welcome” messages, and AI-friendly API documentation. It establishes Ubuntu 20 as the new minimum for Linux support. Additionally, a breaking change ensures that the cleanup function returns a specific error code when called during an active session.
Important notes
- Starting from version 2.5.5, the Linux SDK only supports Ubuntu 20 (u20) and later.
- AI-Friendly Documentation
- This SDK release ships AI-friendly API documentation in a structured, machine-readable format to help developers and AI-assisted workflows discover and understand the Zoom Video SDK public APIs faster. For more information, see Using AI assistants with the Video SDK.
Breaking Changes
- Add new error code for the
cleanupfunction to returnZoomVideoSDKErrors_Cannot_Call_Cleanup_In_Sessionwhen it’s called during a session.- New enum in
ZoomVideoSDKErrors.
typedef enum { ...... ZoomVideoSDKErrors_Cannot_Call_Cleanup_In_Session = 7700, }ZoomVideoSDKErrors; - New enum in
Added
-
New user QoS statistics data to be consistent with web SDK.
- Add new enum
ZoomVideoSDKStatisticsDirection.
typedef enum { ZoomVideoSDKStatisticsDirection_Send = 0, ZoomVideoSDKStatisticsDirection_Receive = 1, } ZoomVideoSDKStatisticsDirection;- Add new struct
ZoomVideoSDKQOSStatistics.
struct ZoomVideoSDKQOSStatistics { /** * @brief Direction of statistics (send or receive). */ ZoomVideoSDKStatisticsDirection direction; /** * @brief Timestamp of the statistics. */ unsigned int timestamp; /** * @brief Name of the codec. Valid only during callback. For video/share: "h264", "av1". For audio: "silk", "opus", "pcm", "G722", "G729". */ const zchar_t* codecName; /** * @brief Round-trip time in milliseconds. */ unsigned int rtt; /** * @brief Jitter in milliseconds. */ unsigned int jitter; /** * @brief Frame width (sent or received per direction). */ unsigned int width; /** * @brief Frame height (sent or received per direction). */ unsigned int height; /** * @brief Frame rate in FPS (sent or received per direction). */ unsigned int fps; /** * @brief Bits per second. */ unsigned int bps; /** * @brief Bits per frame. Same as bps for backward compatibility. * @deprecated Use ZoomVideoSDKQOSStatistics::bps instead. */ int bpf; /** * @brief Total bytes transferred (sent or received per direction). */ unsigned int bytesTransferred; /** * @brief Number of packets lost during transmission. */ unsigned int packetsLost; /** * @brief Total number of packets transferred (sent or received per direction). */ unsigned int packetsTransferred; /** * @brief Network quality level. */ ZoomVideoSDKNetworkStatus networkLevel; /** * @brief Statistics type (Audio, Video, or Share). */ ZoomVideoSDKDataType statisticsType; /** * @brief Average packet loss ratio in per thousand (e.g. 100 means 10%). */ unsigned int avg_loss; /** * @brief Maximum packet loss ratio in per thousand (e.g. 100 means 10%). */ unsigned int max_loss; /** * @brief Estimated bandwidth in bps. */ unsigned int bandwidth; ZoomVideoSDKQOSStatistics() { reset(); } void reset() { direction = ZoomVideoSDKStatisticsDirection_Send; timestamp = 0; codecName = nullptr; rtt = 0; jitter = 0; width = 0; height = 0; fps = 0; bps = 0; bpf = 0; bytesTransferred = 0; packetsLost = 0; packetsTransferred = 0; networkLevel = ZoomVideoSDKNetwork_None; statisticsType = ZoomVideoSDKDataType_Unknown; avg_loss = 0; max_loss = 0; bandwidth = 0; } };- Add new struct
ZoomVideoSDKQOSSendStatistics.
struct ZoomVideoSDKQOSSendStatistics : ZoomVideoSDKQOSStatistics { /** * @brief Width of the input frame (send only). */ unsigned int frameWidthInput; /** * @brief Height of the input frame (send only). */ unsigned int frameHeightInput; /** * @brief Frame rate of input (send only). */ unsigned int frameRateInput; /** * @brief Total bytes sent. */ unsigned int bytesSent; /** * @brief Total number of packets sent. */ unsigned int packetsSent; /** * @brief Total packet send delay in milliseconds (send only). */ unsigned int totalPacketSendDelay; /** * @brief Total time spent encoding in milliseconds (send only). */ unsigned int totalEncodeTime; /** * @brief Total number of frames encoded (send only). */ unsigned int framesEncoded; ZoomVideoSDKQOSSendStatistics() { ZoomVideoSDKQOSStatistics::direction = ZoomVideoSDKStatisticsDirection_Send; reset(); } void reset() { ZoomVideoSDKQOSStatistics::reset(); direction = ZoomVideoSDKStatisticsDirection_Send; frameWidthInput = 0; frameHeightInput = 0; frameRateInput = 0; bytesSent = 0; packetsSent = 0; totalPacketSendDelay = 0; totalEncodeTime = 0; framesEncoded = 0; } };- Add new struct
ZoomVideoSDKQOSRecvStatistics.
struct ZoomVideoSDKQOSRecvStatistics : ZoomVideoSDKQOSStatistics { /** * @brief Total bytes received (receive only). */ unsigned int bytesReceived; /** * @brief Total number of packets received (receive only). */ unsigned int packetsReceived; /** * @brief Estimated playout timestamp (receive only). */ unsigned int estimatedPlayoutTimestamp; /** * @brief Total time spent decoding in milliseconds (receive only). */ unsigned int totalDecodeTime; /** * @brief Total number of frames decoded (receive only). */ unsigned int framesDecoded; /** * @brief Jitter buffer delay in milliseconds (receive only). */ unsigned int jitterBufferDelay; /** * @brief Number of samples emitted from jitter buffer (receive only). */ unsigned int jitterBufferEmittedCount; ZoomVideoSDKQOSRecvStatistics() { ZoomVideoSDKQOSStatistics::direction = ZoomVideoSDKStatisticsDirection_Receive; reset(); } void reset() { ZoomVideoSDKQOSStatistics::reset(); direction = ZoomVideoSDKStatisticsDirection_Receive; bytesReceived = 0; packetsReceived = 0; estimatedPlayoutTimestamp = 0; totalDecodeTime = 0; framesDecoded = 0; jitterBufferDelay = 0; jitterBufferEmittedCount = 0; } };- Add new struct
ZoomVideoSDKVideoStatisticInfo.
struct ZoomVideoSDKVideoStatisticInfo : ZoomVideoSDKQOSStatistics { /** @brief Gets the video network status. Same as \link ZoomVideoSDKQOSStatistics::networkLevel \endlink. * @deprecated Use ZoomVideoSDKQOSStatistics::networkLevel instead. */ ZoomVideoSDKNetworkStatus videoNetworkStatus; ZoomVideoSDKVideoStatisticInfo() { reset(); } void reset() { ZoomVideoSDKQOSStatistics::reset(); videoNetworkStatus = ZoomVideoSDKNetwork_None; } };- Add new struct
ZoomVideoSDKShareStatisticInfo.
struct ZoomVideoSDKShareStatisticInfo : ZoomVideoSDKQOSStatistics { /** @brief Gets the share network status. Same as \link ZoomVideoSDKQOSStatistics::networkLevel \endlink. * @deprecated Use ZoomVideoSDKQOSStatistics::networkLevel instead. */ ZoomVideoSDKNetworkStatus shareNetworkStatus; ZoomVideoSDKShareStatisticInfo() { reset(); } void reset() { ZoomVideoSDKQOSStatistics::reset(); shareNetworkStatus = ZoomVideoSDKNetwork_None; } };- Add new callback in
IZoomVideoSDKDelegate.
virtual void onQOSStatisticsReceived(const ZoomVideoSDKQOSStatistics& statistics, IZoomVideoSDKUser* pUser) = 0; - Add new enum
-
Add support for multiple languages versions of telephony “welcome” message.
-
Add new class
IZoomVideoSDKPhoneWelcomeMessageInfo.class IZoomVideoSDKPhoneWelcomeMessageInfo { public: virtual ~IZoomVideoSDKPhoneWelcomeMessageInfo() {} virtual const zchar_t* getLanguageCode() = 0; virtual const zchar_t* getLanguageName() = 0; virtual const zchar_t* getVariantId() = 0; }; -
Add new value in struct
InvitePhoneUserInfo.struct InvitePhoneUser { public: ... /** Optional: The welcome message's language code, such as "en-US", "zh-CN". */ const zchar_t* languageCode; /** Optional: The welcome message's variant ID (e.g., "variant_001"). */ const zchar_t* variantId; }; -
Add new interface in class
IZoomVideoSDKPhoneHelper.virtual IVideoSDKVector* getPhoneWelcomeMessageInfoList() = 0;
-