FPS is increasing with the participant count increasing

I am using the raw data recording method to get access to the video buffers of participants.
And finally, I got the video, everything is ok for now. Thank you for adding this feature.
But I have noticed that the fps count is increasing with the participant count increasing. :slightly_smiling_face:
I have added a fps log for debugging in the delegate method of the renderer (ZoomSDKRendererDelegate. onRawDataReceived).
For one user, I got about 25 fps (the same as in zoom statistic).

FPS (dif: 1.04) [A] = 25

For two users, I got about 50 fps for each user.

FPS (dif: 1.06) [A] = 50
FPS (dif: 1.03) [B] = 52

For three users, I got about 80 fps for each user.

FPS (dif: 1.01) [A] = 75
FPS (dif: 1.01) [B] = 81
FPS (dif: 1.03) [C] = 84

Note: after two users left (B and C) the first user (A) still has about 75 fps.

FPS (dif: 1.01) [A] = 75

A bit more about implementation.
I have a wrapper for each zoom renderer object:

class ZoomRendererWrapper: NSObject {
    private(set) var renderer: ZoomSDKRenderer?
    // fps traking
    private var fpsCounter: Int = .zero
    private var lastFpsTrakingDate: Date = Date()

and this wrapper acts as a delegate for ZoomSDKRenderer object.

extension ZoomRendererWrapper: ZoomSDKRendererDelegate {
    func onRawDataReceived(_ data: ZoomSDKYUVRawDataI420?) {
        let date = Date()
        let diff = date.timeIntervalSince1970 - lastFpsTrakingDate.timeIntervalSince1970
        if diff >= 1 {
            let sourceId = data?.getSourceID() ?? .zero
            print(”FPS (dif: \(diff)) [\(sourceId)] = \(fpsCounter)“)
            lastFpsTrakingDate = date
            fpsCounter = 0
        fpsCounter += 1

More data

I have collected some additional data Here

In the file you can see how long it takes between each onRawDataReceived delegate method call for particular user A in two cases:

  1. meeting with 1 participant (purple dots).
  2. meeting with 2 participants (orange dots).

For the second case (orange dots) you can see that there are a lot of cases when the duration between method calls extremely goes to zero.
And numbers of calls is incresed two times compared to the first case (purple dots).

Frame rates are normally measured in frames per second (or FPS). This is the number of frames that you see onscreen every second. A higher FPS is associated with a smoother, more responsive gaming experience , while a low FPS can make a game seem slow and choppy. For more information also see https://devforum.zoom.us/t/ sinuanonoche

Hi @sinuanonoche499 ,

yep, you are absolutely right, but could you please explain the behavior when fps depends on the number of participants in the meeting? :slightly_smiling_face:

because I expected to see almost equal fps numbers for all cases.

Thank you!

Just to clarify Anton’s question, as we are working in the same team:
I’d expect that the more participants are there, the lower FPS we receive, but here it’s the opposite, renderers receive more frames than expected.
I would suppose that there is a bug and each renderer just receives frames for each participants, because it looks like renderer’s FPS is “one participant’s FPS multiplied by the number of participants”, but in fact each renderer indeed delivers frames only for one participant. Still, it is unexpected behavior, I don’t think each remote client starts to send more frames from their camera when more participants are on a call, unless each camera frame is sent N times, once for each remote receiver, and in this case, I guess, each receiver should only get frames sent for that receiver only so the FPS of a single participant can’t increase proportionally to the number of participants on a call.

Is there any information about this behavior?

I have noticed that there is a notification that informs about new raw data receiving:

And right after this notification my own delegate method implementation ZoomSDKRendererDelegate.onRawDataReceived is called with the same participant id as many times as I have participants in the meeting.
for example, if I have 2 users on the call I will have the next flow:

  1. Noti_SDK_RawData_OnVideoRawDataReceived received.
  2. ZoomSDKRendererDelegate.onRawDataReceived called for user A.
  3. ZoomSDKRendererDelegate.onRawDataReceived called for user A.
  4. Noti_SDK_RawData_OnVideoRawDataReceived received.
  5. ZoomSDKRendererDelegate.onRawDataReceived called for user B.
  6. ZoomSDKRendererDelegate.onRawDataReceived called for user B.

I hope this information will help you to diagnose the problem.


Could I give some additional information for the diagnostic?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.