Only First Participant’s Pixel Buffer Received in PiP Mode with Multiple ZoomVideoSDKRawDataPipe Subscriptions

Description:
I’m implementing a custom composite video layout using the ZoomVideoSDKRawDataPipe API to receive raw video data from multiple participants. The goal is to merge these streams into a single video output that works in both fullscreen and Picture-in-Picture (PiP) modes.

Implementation Details:

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

  • Subscription code:

let rawDataPipe = user.getVideoPipe()
rawDataPipe?.subscribe(self)

  • I conform to ZoomVideoSDKRawDataPipeDelegate and expect to receive pixel buffers via:

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

Issue:

  • In full-screen mode, I correctly receive pixel buffers for all subscribed participants.

  • In PiP mode, only the first subscribed participant delivers frames.

  • All other ZoomVideoSDKRawDataPipe instances stop invoking their delegate methods once PiP starts — as if the streams are being throttled or ignored.

Goal:

  • Render multiple participants in a composite layout (grid or stacked) inside PiP.

  • Continue receiving raw pixel buffers for all subscribed users in PiP mode.

  • Maintain custom rendering (not using ZoomVideoSDKVideoCanvas), combining pixel buffers into a shared AVSampleBuffer stream for PiP playback.

Questions:

  1. Does the SDK currently support receiving multiple raw video streams in PiP mode via ZoomVideoSDKRawDataPipe?

  2. Is there a known limitation that restricts ZoomVideoSDKRawDataPipeDelegate callbacks to only one participant in PiP?

  3. Is there a recommended workaround to enable multi-user raw data in PiP?

  4. If not supported, is multi-participant raw video in PiP planned for a future SDK release?

Environment:

  • Zoom Video SDK iOS: v1.13.10

  • iOS: 18.2

  • Device: iPhone 15 Pro

  • PiP: Enabled via Background Modes + CallKit integration

  • Rendering: Custom composite rendering using CoreVideo + AVSampleBufferDisplayLayer

Are you subscribing to all streams at 720p or 1080p? I had an issue with the android SDK where only one 720p stream was allowed at once. I Impelemented a system where I subscribe to the first remote user at 720p and 360p thereafter. If the first user leaves, I resubscribe one of the remaining users as 720p (the switchover is not noticible).

Thanks for the insight! In my case, I’m subscribing to all participants at 360p, so the 720p limitation shouldn’t apply here. The behavior still occurs in PiP — only the first subscribed stream continues delivering frames while others stop.