– Only First User's Pixel Buffer Received in PiP Mode with Multiple ZoomVideoSDKRawDataPipe Subscriptions

I am subscribing to multiple participants using the ZoomVideoSDKRawDataPipe API to receive raw video data , with the intention of rendering all subscribed users’ video streams into a composite view that is shown in both fullscreen and PiP modes.

Implementation Details:

  • For each participant, I create a separate ZoomVideoSDKRawDataPipe instance.
  • I subscribe using:

swift

CopyEdit

let rawDataPipe = user.getVideoPipe()
rawDataPipe?.subscribe(self)
  • I conform to ZoomVideoSDKRawDataPipeDelegate and expect to receive pixel buffers via:

swift

CopyEdit

func onPixelBuffer(_ pixelBuffer: CVPixelBuffer!, frameInfo: ZoomVideoSDKVideoFrameInfo!)

The Problem:

In PiP mode, I’m only receiving pixel data for the first subscribed participant. All other ZoomVideoSDKRawDataPipeinstances do not invoke their delegate methods, as if they are being ignored or throttled in PiP mode.

What I Need to Achieve:

  • Show multiple participants in a composite video layout (e.g., grid or stacked view) in Picture-in-Picture mode.
  • Continue receiving pixel buffers for all subscribed users via ZoomVideoSDKRawDataPipeDelegate, even after PiP starts.
  • Maintain custom rendering (I am not using ZoomVideoSDKVideoCanvas) and merge the pixel buffers into a shared AVSampleBuffer stream that feeds PiP.

My Questions:

  1. Is it currently supported to subscribe to and receive multiple ZoomVideoSDKRawDataPipe streams in PiP mode?
  2. Is there an internal SDK limitation that restricts ZoomVideoSDKRawDataPipeDelegate callbacks to only one stream while in PiP?
  3. Is there a recommended approach to enable multi-user raw data access for rendering in PiP mode?
  4. If not currently supported, is multi-user raw video support in PiP planned in a future update?

Environment:

  • Zoom Video SDK iOS Version: [v1.13.10]
  • iOS Version: [e.g., iOS 18.2]
  • Device: [e.g., iPhone 15 Pro]
  • PiP Enabled: Yes, via Background Modes and CallKit integration
  • Rendering: Using custom composite rendering via CoreVideo + AVSampleBufferDisplayLayer