Skip to content

[BUG] Missing speaker name and ID in audio metadata #80

@jasper-tng

Description

@jasper-tng

Bug Description

When accessing the metadata of the audio stream, the user name is empty and the user ID is -1 regardless of who is speaking in the meeting. This issue only appears in the Python library; the Node.js library correctly reports user names and IDs.

Language/Runtime

Python

SDK Version

0.0.2

Environment Details

  • OS and Version: macOS 26.2
  • Python version: 3.13.11
  • Zoom client version: 6.7.2 (72191)

Steps To Reproduce

  1. Create a Zoom app that has access to RTMS data as in the sample setup.
  2. Configure the Python environment to contain Zoom Client ID and password as in the sample setup.
  3. Run a minimal reproducer based on the provided Python example, see below.
  4. Start a meeting with the app enabled and start speaking.

Expected Behavior

The Python app prints the user name and user ID of the meeting participant currently speaking: Speaker: <username> (userId: <userID>).

Actual Behavior

The Python app prints Speaker: (userId: -1).

Code Example

import signal
import sys

import rtms
from dotenv import load_dotenv

load_dotenv()

client = rtms.Client()

# Graceful shutdown handler
def signal_handler(sig, frame):
    print('\nShutting down gracefully...')
    client.leave()
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

# Webhook event handler
@client.on_webhook_event()
def handle_webhook(payload):
    if payload.get('event') == 'meeting.rtms_started':
        rtms_payload = payload.get('payload', {})
        client.join(
            meeting_uuid=rtms_payload.get('meeting_uuid'),
            rtms_stream_id=rtms_payload.get('rtms_stream_id'),
            server_urls=rtms_payload.get('server_urls'),
            signature=rtms_payload.get('signature')
        )

# Callback handlers
@client.onJoinConfirm
def on_join(reason):
    print(f'Joined meeting: {reason}')

@client.onAudioData
def on_audio(data, size, timestamp, metadata):
    print(f'Speaker: {metadata.userName} (userId: {metadata.userId})')

@client.onLeave
def on_leave(reason):
    print(f'Left meeting: {reason}')

if __name__ == '__main__':
    print('Webhook server running on http://localhost:8080')
    import time
    while True:
        # Process queued join requests from webhook thread
        client._process_join_queue()
        # Poll for SDK events
        client._poll_if_needed()
        time.sleep(0.01)

Relevant Log Output

Additional Context

It seems this issue is specific to the Python library; the Node.js version correctly reports user names and IDs.

Verification

  • I've searched existing issues to ensure this bug hasn't already been reported
  • I've verified this bug still exists in the latest version of the SDK
  • I've included all necessary information to reproduce this issue

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions