Released: 2026-04-16 Updated: 2026-04-20
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_idinjoin(): ZCC voice engagements identify sessions with anengagement_idinstead ofmeeting_uuid;join()now acceptsengagement_idas 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_UNHOLDexported 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)TranscriptLanguageconstants: Full set of language constants (ENGLISH,SPANISH,JAPANESE,CHINESE_SIMPLIFIED, and many more) for skipping auto-detection (~3s delay) by hinting
the source languagesetTranscriptParams()/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 usingVIDEO_SINGLE_INDIVIDUAL_STREAMmodeonParticipantVideo()/on_participant_video(): Callback fired when a participant’s video turns on or offonVideoSubscribed()/on_video_subscribed(): Callback fired with the result of eachsubscribeVideo()callEVENT_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;EventLoopwraps a dedicated background thread,EventLoopPoolbalances clients across a
pool of threadsrun_async(): Drop-in async replacement forrun()usingasyncio.sleep()between polls; composes naturally with aiohttp, FastAPI, asyncpg- Executor dispatch:
Client(executor=...)andrun(executor=...)/run_async(executor=...)dispatch data callbacks to aconcurrent.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:guaranteesleave()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
camelCasemethods havesnake_casealiases (on_audio_data,set_audio_params,subscribe_event, etc.)
Metadata & AI Interpreter Fields
- Full metadata fields:
Metadatanow exposesuserId,userName,startTs,endTsin both bindings AiInterpreterfields:Metadatanow exposesaiInterpreterwith language pair targets from the AI language interpreter SDK feature
Constants & Enums
IntEnumfor Python codec/rate/option types:AudioCodec,VideoCodec,AudioSampleRate,AudioChannel,DataOptionare now proper PythonIntEnumvalues (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_OPTIONenum directly;AudioDataOptionandVideoDataOptionkept as backward-compat
aliases- Bidirectional param aliases: All four param structs (
AudioParams,VideoParams,DeskshareParams,TranscriptParams) now accept bothsnake_caseandcamelCasefield names so
existing code continues to work regardless of convention
Fixed
- Spurious configure warnings on leave:
updateMediaConfigurationwas called during callback teardown after the session was already closed, printing 4"Failed to update media configuration"warnings on every clean leave; suppressed by trackingsdk_opened_state and callingmarkClosed()before stopping callbacks
Changed
- Protocol enums moved to
rtms.h:EVENT_TYPE,ZCC_VOICE_EVENT_TYPE,SESSION_STATE,STREAM_STATE,MESSAGE_TYPE,STOP_REASON, andTRANSCRIPT_LANGUAGEare now defined in the
shared C++ header, making them automatically available to both Node.js and Python bindings