Skip to content

Commit 85dc98a

Browse files
authored
Merge pull request #91 from zoom/dev
docs: update troubleshooting and changelog for v1.0.2
2 parents f9d601b + 4401457 commit 85dc98a

5 files changed

Lines changed: 119 additions & 53 deletions

File tree

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,28 @@ All notable changes to the Zoom RTMS SDK will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.0.2] - 2026-01-30
9+
10+
### Added
11+
12+
- **Video SDK support**: Added `session_id` parameter to `join()` for Video SDK events (`session.rtms_started`) alongside existing Meeting SDK support (`meeting.rtms_started`) ([#80](https://github.com/zoom/rtms/issues/80))
13+
- **Python `rtms.run()`**: New simplified threading model that handles event loop management, client polling, and graceful shutdown automatically ([#88](https://github.com/zoom/rtms/issues/88))
14+
15+
### Fixed
16+
17+
- **Default media params**: Apply sensible defaults (e.g., `AUDIO_MULTI_STREAMS`) when callbacks are registered without explicit media configuration
18+
- **Media param reconfiguration**: Calling `setAudioParams()`/`setVideoParams()` after registering a callback now triggers reconfiguration
19+
- **Codec validation**: Added validation at C++ layer - JPG/PNG codecs require fps ≤ 5, H264 allows fps up to 30
20+
- **Python docs deployment**: Fixed documentation deployment path (renamed `docs/rtms` to `docs/py`)
21+
22+
### Security
23+
24+
- Upgraded cmake-js to v8 to resolve tar dependency vulnerabilities (GHSA-8qq5-rm4j-mr97, GHSA-r6q2-hw4h-h46w, GHSA-34x7-hfp2-rc4v)
25+
26+
### Changed
27+
28+
- Updated Python installation instructions to use production PyPI instead of TestPyPI
29+
830
## [1.0.0] - 2026-01-22
931

1032
### Added

README.md

Lines changed: 25 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -545,63 +545,13 @@ task doctor # Check Node, Python, CMake, Docker versions
545545
# Setup project
546546
task setup # Fetch SDK and install dependencies
547547

548-
# Building modules
549-
task build:js # Build Node.js for current platform
550-
task build:js:linux # Build Node.js for Linux (via Docker)
551-
task build:js:darwin # Build Node.js for macOS
552-
553-
task build:py # Build Python for current platform
554-
task build:py:linux # Build Python wheel for Linux (via Docker)
555-
task build:py:darwin # Build Python wheel for macOS
556-
557-
task build:local # Build all bindings for local platform
558-
task build:linux # Build all bindings for Linux (via Docker)
559-
task build:all # Build everything for all platforms
560-
561-
# Creating prebuilds for distribution
562-
task prebuild:js # Create Node.js prebuilds for all platforms
563-
task prebuild:js:linux # Create Node.js prebuild for Linux only
564-
task prebuild:js:darwin # Create Node.js prebuild for macOS only
565-
566-
# Testing
567-
task test:js # Run Node.js tests (local)
568-
task test:js:linux # Run Node.js tests in Linux Docker
569-
task test:py # Run Python tests (local)
570-
task test:py:linux # Run Python tests in Linux Docker
571-
task test:local # Run all tests locally
572-
task test:linux # Run all tests in Linux Docker
573-
task test:all # Run tests on all platforms
574-
575-
# Manual/Interactive testing
576-
task manual:js # Run interactive Node.js test
577-
task manual:py # Run interactive Python test
578-
579-
# Publishing to registries
580-
task publish:js # Upload Node.js prebuilds to GitHub releases
581-
task publish:py # Upload Python wheels to production PyPI
582-
task publish:py:test # Upload Python wheels to TestPyPI
583-
584-
# Documentation
585-
task docs:js # Generate Node.js API documentation
586-
task docs:py # Generate Python API documentation
587-
task docs:all # Generate all documentation
588-
589-
# Utility commands
590-
task clean # Remove all build artifacts
591-
task clean:build # Remove only build outputs (keep dependencies)
592-
593548
# Build modes
594549
BUILD_TYPE=Debug task build:js # Build in debug mode
595550
BUILD_TYPE=Release task build:js # Build in release mode (default)
596-
```
597551

598-
**Task Features:**
599-
- **Smart caching**: Skips unchanged builds (checksum-based)
600-
- **Parallel execution**: Runs independent tasks concurrently
601-
- **Environment checks**: Validates versions before building
602-
- **Cross-platform**: Works on macOS, Linux, Windows
603-
604-
These commands help you manage different aspects of the build process and testing workflow. The unified structure makes it easy to build, package, and publish for multiple languages and platforms.
552+
# Debug logging for C SDK callbacks
553+
RTMS_DEBUG=ON task build:js # Enable verbose callback logging
554+
```
605555

606556
## Troubleshooting
607557

@@ -656,6 +606,28 @@ Try both debug and release modes (`npm run debug` or `npm run release`)
656606
### 5. Dependencies
657607
Verify all prerequisites are installed
658608

609+
### 6. Audio Defaults Mismatch
610+
This SDK uses different default audio parameters than the raw RTMS WebSocket protocol for better out-of-the-box quality. If you need to match the WebSocket protocol defaults, see [#92](https://github.com/zoom/rtms/issues/92) for details.
611+
612+
### 7. Identifying Speakers with Mixed Audio Streams
613+
When using `AUDIO_MIXED_STREAM`, the audio callback's metadata does not identify the current speaker since all participants are mixed into a single stream. To identify who is speaking, use the `onActiveSpeakerEvent` callback:
614+
615+
**Node.js:**
616+
```javascript
617+
client.onActiveSpeakerEvent((timestamp, userId, userName) => {
618+
console.log(`Active speaker: ${userName} (${userId})`);
619+
});
620+
```
621+
622+
**Python:**
623+
```python
624+
@client.onActiveSpeakerEvent
625+
def on_active_speaker(timestamp, user_id, user_name):
626+
print(f"Active speaker: {user_name} ({user_id})")
627+
```
628+
629+
This callback notifies your application whenever the active speaker changes in the meeting. You can also use the lower-level `onEventEx` function with the active speaker event type directly. See [#80](https://github.com/zoom/rtms/issues/80) for more details.
630+
659631
## For Maintainers
660632

661633
If you're a maintainer looking to build, test, or publish new releases of the RTMS SDK, please refer to [PUBLISHING.md](PUBLISHING.md) for comprehensive documentation on:

examples/meetings.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,74 @@ def handle_webhook(payload, request, response):
218218
response.send({'status': 'ok'})
219219
```
220220

221+
## Audio Configuration
222+
223+
### SDK Defaults vs WebSocket Defaults
224+
225+
> **Note:** This SDK uses different default audio parameters than the raw RTMS WebSocket protocol. This provides better quality out-of-the-box but may require adjustment if you need to match the WebSocket defaults. This will be aligned in v2.0 ([#92](https://github.com/zoom/rtms/issues/92)).
226+
227+
| Parameter | SDK Default | WebSocket Default |
228+
|-----------|-------------|-------------------|
229+
| Codec | OPUS (4) | L16 (1) |
230+
| Sample Rate | 48kHz (3) | 16kHz (1) |
231+
| Channel | Stereo (2) | Mono (1) |
232+
| Data Option | AUDIO_MULTI_STREAMS (2) | AUDIO_MIXED_STREAM (1) |
233+
| Duration | 20ms | 20ms |
234+
| Frame Size | 960 | 320 |
235+
236+
### Using SDK Defaults (Recommended for v1.x)
237+
238+
The SDK defaults provide high-quality audio with per-speaker attribution:
239+
240+
```javascript
241+
// No configuration needed - SDK defaults are applied automatically
242+
client.onAudioData((data, timestamp, metadata) => {
243+
// metadata.userId and metadata.userName are populated
244+
console.log(`Audio from ${metadata.userName}`);
245+
});
246+
```
247+
248+
### Matching WebSocket Defaults
249+
250+
If you need to match the raw WebSocket protocol defaults:
251+
252+
```javascript
253+
client.setAudioParams({
254+
contentType: rtms.AudioContentType.RAW_AUDIO,
255+
codec: rtms.AudioCodec.L16,
256+
sampleRate: rtms.AudioSampleRate.SR_16K,
257+
channel: rtms.AudioChannel.MONO,
258+
dataOpt: rtms.AudioDataOption.AUDIO_MIXED_STREAM,
259+
duration: 20,
260+
frameSize: 320 // 16000 * 0.02 * 1
261+
});
262+
263+
client.onAudioData((data, timestamp, metadata) => {
264+
// Note: AUDIO_MIXED_STREAM does not provide per-speaker metadata
265+
console.log(`Mixed audio: ${data.length} bytes`);
266+
});
267+
```
268+
269+
### Python Configuration
270+
271+
```python
272+
# Using SDK defaults (recommended for v1.x)
273+
@client.onAudioData
274+
def on_audio(data, size, timestamp, metadata):
275+
print(f'Audio from {metadata.userName}')
276+
277+
# Matching WebSocket defaults
278+
client.set_audio_params(
279+
content_type=rtms.AudioContentType.RAW_AUDIO,
280+
codec=rtms.AudioCodec.L16,
281+
sample_rate=rtms.AudioSampleRate.SR_16K,
282+
channel=rtms.AudioChannel.MONO,
283+
data_opt=rtms.AudioDataOption.AUDIO_MIXED_STREAM,
284+
duration=20,
285+
frame_size=320
286+
)
287+
```
288+
221289
## Processing Media Streams
222290

223291
### Node.js - Audio Processing

examples/videosdk.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Real-time media streaming from custom Zoom Video SDK applications.
66

77
The RTMS SDK provides the same API for accessing real-time media streams from applications built with Zoom Video SDK. This enables you to build custom video experiences and still access the underlying media streams for processing, recording, or integration.
88

9+
> **Audio Configuration:** This SDK uses different default audio parameters than the raw RTMS WebSocket protocol. See [Audio Configuration](meetings.md#audio-configuration) in the Meetings documentation for details on SDK defaults vs WebSocket defaults.
10+
911
## Quick Start
1012

1113
### Node.js

examples/webinars.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Real-time media streaming from Zoom Webinars.
66

77
The RTMS SDK provides the same API for accessing real-time media streams from Zoom Webinars. The key difference is in how you obtain the webhook payload and join parameters from Zoom's Webinar RTMS webhooks.
88

9+
> **Audio Configuration:** This SDK uses different default audio parameters than the raw RTMS WebSocket protocol. See [Audio Configuration](meetings.md#audio-configuration) in the Meetings documentation for details on SDK defaults vs WebSocket defaults.
10+
911
## Quick Start
1012

1113
### Node.js

0 commit comments

Comments
 (0)