Specific participant's audio stream never established — zero `onActiveSpeaker` events despite participant actively speaking (Web SDK v5.0.0)

Summary

We encountered a reproducible issue where a single participant’s audio stream was never established with Zoom’s media server for the entire duration of a session (~31 minutes), even though the participant was actively speaking and could be heard by others in the meeting.

Environment

  • SDK: Zoom Meeting SDK for Web

  • Version: 5.0.0

  • Mode: Client View (recording bot)

Observed Behavior

We run a recording bot using the Web Meeting SDK. During a group discussion, the following was observed for one specific participant out of six:

  • The participant appeared in the attendee list (onUserJoin fired normally)

  • The participant was confirmed to be actively speaking by other participants in the meeting

  • No onActiveSpeaker events were fired for this participant during the entire ~31-minute session

  • The participant’s audio field in getAttendeeslist remained null at join time, then changed to "" (empty string) — unlike all other participants, whose audio field changed to "computer" within seconds of joining

  • No onUserUpdate events were received for this participant at any point

  • At the exact moment the session state changed later in the meeting, the participant’s audio field changed to "computer" in the next getAttendeeslist call

  • All other participants in the same meeting behaved normally (hundreds of onActiveSpeaker events were received for each of them)

Timeline from Logs

Time (UTC) Event audio field Note
06:05:29–06:05:34 Other participants join null → "computer" within 1–4s Normal
06:05:38 Target participant joins (onUserJoin) null Normal initial state
06:05:38 getAttendeeslist null Others already "computer"
06:05:48 getAttendeeslist "" (empty string) Unique value — not seen for others
06:05:38–06:36:26 Entire session onActiveSpeaker: 0 events
06:36:26 Later in the meeting, getAttendeeslist "computer" Audio established only at this point

Note: Another participant joined at 06:05:48 with audio: null (same initial state) and was detected by onActiveSpeaker within 8 seconds, which suggests that the initial null value itself is not the issue.

Key Observations

audio: "" (empty string)

This value was unique to the affected participant. All others showed either "computer" (audio joined) or null (initial/transient state).

We are unsure what this empty string represents in the SDK. Does it indicate a failed or partial Join Audio attempt?

No onActiveSpeaker events

The participant was confirmed to be speaking by others, but Zoom’s media server never detected their audio stream.

This suggests the audio stream may never have been successfully established on Zoom’s side, rather than this being a simple client-side mute issue.

No onUserUpdate events

We received no state change events for this participant throughout the session.

If Join Audio had failed and then later recovered, we would normally expect at least one onUserUpdate event.

Audio established only later in the meeting

The audio: "computer" value appeared in getAttendeeslist only much later in the session.

This suggests Join Audio may have silently failed initially and only recovered later, without any explicit SDK event indicating the transition.

Questions

  1. What does audio: "" (empty string) mean in getAttendeeslist?
    Is it different from null? Does it indicate a failed Join Audio attempt?

  2. Is there any known issue where Join Audio can silently fail after a participant joins a meeting?
    Especially in cases where the participant is visible in the attendee list, but no audio stream is ever established on the media server side.

  3. Is there any way to programmatically detect that a participant’s audio stream has not been established and trigger a re-join or recovery flow from the SDK side?

Impact

This caused a participant to be absent from the recording despite actively participating in the discussion.

The issue is difficult to detect in real time because the participant still appears in the attendee list and no errors are thrown.

We are currently using SDK v5.0.0 and plan to upgrade to v5.1.2 (for the PEPC fix related to Chrome/Edge v144).

We would appreciate any guidance on whether this is a known issue and whether there is a recommended workaround.

Hi team, just following up on this issue, as we are still seeing this behavior in production and would really appreciate your input.
Could you please let us know whether this is a known issue or if there are any recommended workarounds?

Hi @tomomi do you have the meeting id for the affected meeting(s)? Feel free to private message me this data so I can check the metrics on our backend.

@ticorrian.heard

Hi, thank you for your support.
Yes, I do have the Meeting ID for the affected meeting.

I would like to share it via private message, but I’m unable to find a way to send you a DM on the Zoom Developer Forum.
Since this includes a customer’s Meeting ID, I’m not able to share it in this public topic.

Would you mind sending me a DM first? I’ll reply there with the details.

Thank you!