Changelog: Video SDK - iOS - 2.6.0

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

Visit Changelog

Summary: Breaking changes include a new singleton accessor pattern, required framework additions (util.framework and zContext.framework), updated API naming for consistency across methods, and removal of the format parameter from sendVideoFrame. 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, concealment data, and audio energy measurements. Additional improvements include user failover status tracking, expanded command channel payload limits (now 1024 bytes), external video source format configuration, and new callbacks for subsession status changes that trigger when users join or leave subsessions.

Breaking Changes

  • New singleton accessor +[ZoomVideoSDK sharedInstance].

  • Add util.framework (required) for the Video SDK iOS/VisionOS platform.

  • Add zContext.framework (required) for the Video SDK iOS/VisionOS platform.

  • Joining or leaving a subsession now triggers the onSubSessionStatusChanged:subSession: and onSessionLeave: callbacks in ZoomVideoSDKDelegate.

  • Rename several APIs for naming consistency and remove the format parameter from sendVideoFrame.

    - (BOOL)isMicOriginalInputEnable; → - (BOOL)isMicOriginalInputEnabled;
    - (BOOL)isAllowViewFullTranscriptEnable; → - (BOOL)isAllowViewFullTranscriptEnabled;
    - (BOOL)isFileTransferEnable; → - (BOOL)isFileTransferEnabled;
    - (void)sendVideoFrame:(char *)frameBuffer width:(NSUInteger)width height:(NSUInteger)height dataLength:(NSUInteger)dataLength rotation:(ZoomVideoSDKVideoRawDataRotation)rotation format:(ZoomVideoSDKFrameDataFormat)format  → - (void)sendVideoFrame:(char *)frameBuffer width:(NSUInteger)width height:(NSUInteger)height dataLength:(NSUInteger)dataLength rotation:(ZoomVideoSDKVideoRawDataRotation)rotation;
    

Added

  • Add a pre-connection (two-step join) flow to speed up the actual session join.

    • New interfaces in ZoomVideoSDK

      - (ZoomVideoSDKSession * _Nullable)prepareJoin:(ZoomVideoSDKSessionContext * _Nonnull)context preJoinParam:(ZoomVideoSDKPreJoinParam * _Nonnull)preJoinParam;
      - (ZoomVideoSDKError)commitJoin;
      - (ZoomVideoSDKError)cancelPrepareJoin;
      
    • New class ZoomVideoSDKPreJoinParam in ZoomVideoSDK.h

      @interface ZoomVideoSDKPreJoinParam : NSObject
      @property (nonatomic, assign) NSUInteger timeoutInterval;
      @end
      
    • New error codes in ZoomVideoSDKError (ZoomVideoSDKConstants.h)

      Errors_Session_PreJoin_Not_In_Flow,
      Errors_Session_PreJoin_Already_Commit,
      Errors_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 ZoomVideoSDKPhoneStatus (ZoomVideoSDKConstants.h)

      /** The call was answered by machine. */
      ZoomVideoSDKPhoneStatus_AnsweredByMachine,
      
    • New property in ZoomVideoSDKInvitePhoneUserInfo (ZoomVideoSDKPhoneHelper.h)

      /**
       * @brief Determines whether to enable machine-answer detection for this callout.
       */
      @property (nonatomic, assign) BOOL     bDetectMachine;
      
  • New enumeration values in ZoomVideoSDKSessionLeaveReason (ZoomVideoSDKConstants.h).

        /** User leaves current session because joining a subsession. */
        ZoomVideoSDKSessionLeaveReason_JoinSubsession,
        /** User leaves current session because returning to the main session. */
        ZoomVideoSDKSessionLeaveReason_ReturnToMainSession,
    
  • Add a new property externalVideoSourceDataFormat to ZoomVideoSDKSessionContext (ZoomVideoSDK.h).

    /**
     * @brief [Optional] The frame data format used for external video source initialization.
     * @note Effective when externalVideoSourceDelegate is set. Default is ZoomVideoSDKFrameDataFormat_I420.
     */
    @property (nonatomic, assign) ZoomVideoSDKFrameDataFormat externalVideoSourceDataFormat;
    
  • Provide audio QoS statistics data.

    • New property in ZoomVideoSDKQOSSendStatistics (ZoomVideoSDKUser.h)

      /** @brief Gets the total bytes of RTP headers (and padding) sent (send only). */
      @property (nonatomic, assign, readonly) NSUInteger headerBytesSent;
      
    • New properties in ZoomVideoSDKQOSRecvStatistics (ZoomVideoSDKUser.h)

      /** @brief Gets the total bytes of RTP headers (and padding) received (receive only). */
      @property (nonatomic, assign, readonly) unsigned long long headerBytesReceived;
      
      /** @brief Gets the non-FEC packets discarded by NetEQ (receive only, audio only). */
      @property (nonatomic, assign, readonly) NSUInteger packetsDiscarded;
      
      /** @brief Gets the total number of FEC packets received (receive only, audio only). */
      @property (nonatomic, assign, readonly) NSUInteger fecPacketsReceived;
      
      /** @brief Gets the FEC packets discarded by NetEQ (receive only, audio only). */
      @property (nonatomic, assign, readonly) NSUInteger fecPacketsDiscarded;
      
      /** @brief Gets the accumulated current target delay of the jitter buffer, in seconds (receive only, audio only). */
      @property (nonatomic, assign, readonly) double jitterBufferTargetDelay;
      
      /** @brief Gets the accumulated minimum achievable jitter buffer delay, in seconds (receive only, audio only). */
      @property (nonatomic, assign, readonly) double jitterBufferMinimumDelay;
      
      /** @brief Gets the total audio samples generated by NetEQ (receive only, audio only). */
      @property (nonatomic, assign, readonly) unsigned long long totalSamplesReceived;
      
      /** @brief Gets the samples produced by concealment instead of real decode (receive only, audio only). */
      @property (nonatomic, assign, readonly) unsigned long long concealedSamples;
      
      /** @brief Gets the subset of concealedSamples that are silent (receive only, audio only). */
      @property (nonatomic, assign, readonly) unsigned long long silentConcealedSamples;
      
      /** @brief Gets the number of concealment events (receive only, audio only). */
      @property (nonatomic, assign, readonly) unsigned long long concealmentEvents;
      
      /** @brief Gets the samples inserted to slow down playout, i.e. deceleration (receive only, audio only). */
      @property (nonatomic, assign, readonly) unsigned long long insertedSamplesForDeceleration;
      
      /** @brief Gets the samples removed to speed up playout, i.e. acceleration (receive only, audio only). */
      @property (nonatomic, assign, readonly) unsigned long long removedSamplesForAcceleration;
      
      /** @brief Gets the total duration of all audio samples received, in seconds (receive only, audio only). */
      @property (nonatomic, assign, readonly) double totalSamplesDuration;
      
      /** @brief Gets the most recent audio level of the received stream, range [0.0, 1.0] (receive only, audio only). */
      @property (nonatomic, assign, readonly) double audioLevel;
      
      /** @brief Gets the accumulated audio energy of the received stream (receive only, audio only). */
      @property (nonatomic, assign, readonly) double totalAudioEnergy;
      
  • Support user failover status change.

    • New callback in ZoomVideoSDKDelegate (ZoomVideoSDKDelegate.h)

      - (void)onUserFailoverStatusChanged:(ZoomVideoSDKUser * _Nullable)user inFailover:(BOOL)inFailover;
      
    • New interface in ZoomVideoSDKUser (ZoomVideoSDKUser.h)

      - (BOOL)isInFailover;
      

Deprecated

  • The +[ZoomVideoSDK shareInstance] method has been deprecated; use +[ZoomVideoSDK sharedInstance] instead.

Changed

  • Increase the command channel payload size limit to 1024.

Fixed

  • Fixed an issue where canChatMessageBeDeleted incorrectly returned Errors_Not_In_Session or Errors_Session_Module_Not_Found when a valid session existed.