Changelog: Video SDK - Linux - 2.6.0

Released: 2026-06-24 Updated: 2026-07-01

Visit Changelog

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 externalVideoSourceDataFormat to ZoomVideoSDKSessionContext (zoom_video_sdk_def.h).

      struct ZoomVideoSDKSessionContext
      {
          // ...
          FrameDataFormat externalVideoSourceDataFormat;
          // ...
      }
      
    • Remove the last parameter FrameDataFormat format from sendVideoFrame (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 onSubSessionStatusChanged and onSessionLeave callbacks in IZoomVideoSDKDelegate (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 ZoomVideoSDKPreJoinParam in zoom_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 isMicOriginalInputEnable to isMicOriginalInputEnabled.
    • Rename isHighFidelityMusicModeEnable to isHighFidelityMusicModeEnabled.
    • Rename isEchoCancellationEnable to isEchoCancellationEnabled.
    • Rename isStereoAudioEnable to isStereoAudioEnabled.
    • Rename isFileTransferEnable to isFileTransferEnabled.