Product updates

Developer Changelog

Keep track of changes and upgrades to the Zoom Developer platform. You can also subscribe to our Changelog RSS feed below.


RTMSJavascript

Version 1.1.0

SDK version

Summary:New RTMS SDK version.

RTMS SDK v1.1.0. For more information, see the Changelog  on GitHub.

Added

ZCC (Zoom Contact Center) Support

  • engagement_id in join(): ZCC voice engagements identify sessions with an engagement_id instead of meeting_uuid; join() now accepts engagement_id as an alternative identifier (all bindings)
  • ZCC event constants: EVENT_CONSUMER_ANSWERED, EVENT_CONSUMER_END, EVENT_USER_ANSWERED, EVENT_USER_END, EVENT_USER_HOLD, EVENT_USER_UNHOLD exported as flat module-level constants in both Node.js and Python

Transcript Configuration

  • TranscriptParams: New parameter class for configuring transcript streams (language hint, content type, language detection)
  • TranscriptLanguage constants: Full set of language constants (ENGLISH, SPANISH, JAPANESE, CHINESE_SIMPLIFIED, and many more) for skipping auto-detection (~3s delay) by hinting the source language
  • setTranscriptParams()/set_transcript_params(): New method on Client to apply transcript configuration before joining (Node.js and Python)

HTTP Proxy Support

  • setProxy()/set_proxy(): New method on Client for configuring HTTP and HTTPS proxies for RTMS connections (Node.js and Python)

Individual Video Streams

  • subscribeVideo()/subscribe_video(): Subscribe or unsubscribe per-participant video when using VIDEO_SINGLE_INDIVIDUAL_STREAM mode
  • onParticipantVideo()/on_participant_video(): Callback fired when a participant's video turns on or off
  • onVideoSubscribed()/on_video_subscribed(): Callback fired with the result of each subscribeVideo() call
  • EVENT_PARTICIPANT_VIDEO_ON / EVENT_PARTICIPANT_VIDEO_OFF: Exported as flat module-level constants in both Node.js and Python

Python — Concurrency & Scaling

  • EventLoop / EventLoopPool: New primitives for fine-grained control over polling threads; EventLoop wraps a dedicated background thread, EventLoopPool balances clients across a pool of threads
  • run_async(): Drop-in async replacement for run() using asyncio.sleep() between polls; composes naturally with aiohttp, FastAPI, asyncpg
  • Executor dispatch: Client(executor=...) and run(executor=...) / run_async(executor=...) dispatch data callbacks to a concurrent.futures.Executor, keeping the poll loop fast for CPU-bound or I/O-heavy callbacks
  • Async callback detection: Coroutine callbacks are detected automatically and scheduled on the running event loop via asyncio.run_coroutine_threadsafe
  • GIL release in poll(): The C++ poll call now releases the GIL, allowing other Python threads (e.g. the webhook HTTP server) to run freely during polling
  • Context manager support: with rtms.Client() as client: guarantees leave() is called on exit
  • Lazy alloc() / thread affinity: Client() construction is safe from any thread; the C SDK handle is allocated lazily on the EventLoop's own thread to satisfy the C SDK's thread-affinity constraint
  • Snake_case aliases: All camelCase methods have snake_case aliases (on_audio_data, set_audio_params, subscribe_event, etc.)

Metadata & AI Interpreter Fields

  • Full metadata fields: Metadata now exposes userId, userName, startTs, endTs in both bindings
  • AiInterpreter fields: Metadata now exposes aiInterpreter with language pair targets from the AI language interpreter SDK feature

Constants & Enums

  • IntEnum for Python codec/rate/option types: AudioCodec, VideoCodec, AudioSampleRate, AudioChannel, DataOption are now proper Python IntEnum values (comparisons with integers still work)
  • DataOption: Unified stream delivery mode enum covering both audio (AUDIO_MIXED_STREAM, AUDIO_MULTI_STREAMS) and video (VIDEO_SINGLE_ACTIVE_STREAM, VIDEO_SINGLE_INDIVIDUAL_STREAM, VIDEO_MIXED_GALLERY_VIEW) options — mirrors the C++ MEDIA_DATA_OPTION enum directly; AudioDataOption and VideoDataOption kept as backward-compat aliases
  • Bidirectional param aliases: All four param structs (AudioParams, VideoParams, DeskshareParams, TranscriptParams) now accept both snake_case and camelCase field names so existing code continues to work regardless of convention

Fixed

  • Spurious configure warnings on leave: updateMediaConfiguration was called during callback teardown after the session was already closed, printing 4 "Failed to update media configuration" warnings on every clean leave; suppressed by tracking sdk_opened_ state and calling markClosed() before stopping callbacks

Changed

  • Protocol enums moved to rtms.h: EVENT_TYPE, ZCC_VOICE_EVENT_TYPE, SESSION_STATE, STREAM_STATE, MESSAGE_TYPE, STOP_REASON, and TRANSCRIPT_LANGUAGE are now defined in the shared C++ header, making them automatically available to both Node.js and Python bindings