livekit 0.7.42

Rust Client SDK for LiveKit
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.7.32]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.31...rust-sdks/livekit@0.7.32 - 2026-02-16

### Fixed

- fix full_reconnect downgrade & don't ignore Leave messages ([#893]https://github.com/livekit/rust-sdks/pull/893)

### Other

- turn single peerconnection off by default ([#897]https://github.com/livekit/rust-sdks/pull/897)
- ensure signal connections times out properly and retries ([#895]https://github.com/livekit/rust-sdks/pull/895)
- added Single Peer Connection support to Rust ([#888]https://github.com/livekit/rust-sdks/pull/888)
- set the simulcast codec & layers ([#891]https://github.com/livekit/rust-sdks/pull/891)

## [0.7.31]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.30...rust-sdks/livekit@0.7.31 - 2026-02-10

### Other

- don't use clamp as the ultimate_kbps can be lower than 300 ([#886]https://github.com/livekit/rust-sdks/pull/886)
- pre-connect the publisher PC when an RPC handler is registered ([#880]https://github.com/livekit/rust-sdks/pull/880)

## [0.7.30]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.29...rust-sdks/livekit@0.7.30 - 2026-02-09

### Fixed

- fix the RPC race condition ([#865]https://github.com/livekit/rust-sdks/pull/865)

### Other

- update proto & fix CI ([#871]https://github.com/livekit/rust-sdks/pull/871)
- Use workspace dependencies & settings ([#856]https://github.com/livekit/rust-sdks/pull/856)
- Upgrade protocol to v1.44.0 ([#857]https://github.com/livekit/rust-sdks/pull/857)
- Expose participant's permission to ffi layer ([#824]https://github.com/livekit/rust-sdks/pull/824)

## [0.7.29]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.28...rust-sdks/livekit@0.7.29 - 2026-01-15

### Fixed

- ensure Room.creation_time is ms ([#822]https://github.com/livekit/rust-sdks/pull/822)

### Other

- try setting x-google-start-bitrate for vp9 ([#820]https://github.com/livekit/rust-sdks/pull/820)

## [0.7.28]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.27...rust-sdks/livekit@0.7.28 - 2025-12-19

### Added

- *(ParticipantInfo)* export kind details ([#813]https://github.com/livekit/rust-sdks/pull/813)

## [0.7.27]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.26...rust-sdks/livekit@0.7.27 - 2025-12-17

### Other

- Handle server initiated mute request ([#812]https://github.com/livekit/rust-sdks/pull/812)

## [0.7.26]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.25...rust-sdks/livekit@0.7.26 - 2025-12-04

### Added

- *(connector)* initial service impl ([#790]https://github.com/livekit/rust-sdks/pull/790)

### Fixed

- fix mute/unmute events for LocalTrack. ([#799]https://github.com/livekit/rust-sdks/pull/799)

### Other

- Add RoomEvent::TokenRefreshed ([#803]https://github.com/livekit/rust-sdks/pull/803)

## [0.7.25]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.24...rust-sdks/livekit@0.7.25 - 2025-11-20

### Other

- perform full reconnect if resume fails ([#792]https://github.com/livekit/rust-sdks/pull/792)
- E2E RPC tests ([#769]https://github.com/livekit/rust-sdks/pull/769)
- Remove unused dependencies ([#761]https://github.com/livekit/rust-sdks/pull/761)

## [0.7.24]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.23...rust-sdks/livekit@0.7.24 - 2025-10-27

### Other

- Expose set video quality ([#759]https://github.com/livekit/rust-sdks/pull/759)

## [0.7.23]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.22...rust-sdks/livekit@0.7.23 - 2025-10-23

### Other

- add h265 codec support ([#762]https://github.com/livekit/rust-sdks/pull/762)

## [0.7.22]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.21...rust-sdks/livekit@0.7.22 - 2025-10-22

### Other

- License check ([#746]https://github.com/livekit/rust-sdks/pull/746)
- Remove participant check for data packets ([#757]https://github.com/livekit/rust-sdks/pull/757)
- clamp connection timeout and fixed the comment ([#748]https://github.com/livekit/rust-sdks/pull/748)
- put examples in root Cargo workspace ([#731]https://github.com/livekit/rust-sdks/pull/731)

## [0.7.21]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.20...rust-sdks/livekit@0.7.21 - 2025-10-13

### Added

- *(e2ee)* add data channel encryption ([#708]https://github.com/livekit/rust-sdks/pull/708)

### Fixed

- fix some potential audio issues, clean up the code a bit, and suppress some warnings  ([#737]https://github.com/livekit/rust-sdks/pull/737)
- do not log 'signal client closed: "stream closed"' on disconnect ([#727]https://github.com/livekit/rust-sdks/pull/727)

### Other

- Test participant disconnect ([#732]https://github.com/livekit/rust-sdks/pull/732)
- Increase RPC max RT time to 7s ([#729]https://github.com/livekit/rust-sdks/pull/729)
- E2E audio test ([#724]https://github.com/livekit/rust-sdks/pull/724)

## [0.7.20]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.19...rust-sdks/livekit@0.7.20 - 2025-10-03

### Other

- updated the following local packages: libwebrtc

## [0.7.19]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.18...rust-sdks/livekit@0.7.19 - 2025-09-29

### Fixed

- apply original participant fields in data messages ([#709]https://github.com/livekit/rust-sdks/pull/709)

### Other

- Implement Display and Error for RpcError ([#719]https://github.com/livekit/rust-sdks/pull/719)
- Fix intermittently failing E2E reliability test ([#718]https://github.com/livekit/rust-sdks/pull/718)
- Do not modify raw packets ([#714]https://github.com/livekit/rust-sdks/pull/714)
- Add send_bytes method ([#691]https://github.com/livekit/rust-sdks/pull/691)
- Disable opus red for e2ee enabled clients ([#706]https://github.com/livekit/rust-sdks/pull/706)
- Upgrade protocol to v1.41.0 ([#703]https://github.com/livekit/rust-sdks/pull/703)

## [0.7.18]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.17...rust-sdks/livekit@0.7.18 - 2025-09-09

### Other

- Add option to enable audio preconnect buffer in SDK & FFI ([#700]https://github.com/livekit/rust-sdks/pull/700)
- Data channel reliability ([#688]https://github.com/livekit/rust-sdks/pull/688)

## [0.7.17]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.16...rust-sdks/livekit@0.7.17 - 2025-09-03

### Other

- updated the following local packages: livekit-api, libwebrtc

## [0.7.16]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.15...rust-sdks/livekit@0.7.16 - 2025-07-31

### Other

- updated the following local packages: livekit-api
# Changelog

## [0.7.15]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.14...rust-sdks/livekit@0.7.15 - 2025-07-16

### Other

- remove published tracks when the room is closed ([#677]https://github.com/livekit/rust-sdks/pull/677)

## [0.7.14]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.13...rust-sdks/livekit@0.7.14 - 2025-06-23

### Fixed

- `audio_frame_ms` didn't work expectedly ([#671]https://github.com/livekit/rust-sdks/pull/671)

## [0.7.13]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.12...rust-sdks/livekit@0.7.13 - 2025-06-17

### Other

- Expose room updates, support MoveParticipant (protocol 15) ([#662]https://github.com/livekit/rust-sdks/pull/662)

## [0.7.12]https://github.com/livekit/rust-sdks/compare/rust-sdks/livekit@0.7.11...rust-sdks/livekit@0.7.12 - 2025-06-11

### Fixed

- fix duration overflow ([#654]https://github.com/livekit/rust-sdks/pull/654)

### Other

- Remove debouncer when fast_publish is enabled ([#649]https://github.com/livekit/rust-sdks/pull/649)

## [0.7.9] - 2025-04-08

### Added

- High-level data streams API

### Deprecated

- Low-level data stream packet events

## [0.7.8] - 2025-03-21

### Fixed

- Revert the RPC change, need more robust way

## [0.7.7] - 2025-03-18

### Fixed

- Move RPC handlers to room

## [0.7.6] - 2025-02-28

### Added

- Add audio filter support

## [0.7.5] - 2025-02-06

### Fixed

- Fix a dependency issue with an older version of the libwebrtc crate

## [0.7.4] - 2025-02-03

### Added

- Support for track subscription permissions

## [0.7.3] - 2025-01-17

### Added

- Add an API to set buffer_amount_low_threshold for DataChannel
- Update RoomInfo to contain buffer_amount_low_threshold for DataChannel

### Fixed

- Wait for the buffered amount to become low before sending data during publish_data for Reliable Data Channel

## [0.7.2] - 2025-01-04

### Added

- bump

### Fixed

- Fixed deadlock with nested RPC calls

## [0.7.1] - 2024-12-14

### Added

- bump libwebrtc to m125
## 0.7.42 (2026-05-21)

### Features

- Introduce pipeline options for remote data tracks, support multiple in-flight frames.

### Fixes

- Filter internal data streams out of livekit-ffi interface - #1112 (@1egoman)

#### feat: add Android application context initialization for PlatformAudio support.

Android requires `ContextUtils.initialize(applicationContext)` before WebRTC audio components can be created. This change:

- Adds `livekit_ffi_initialize_android_context()` C FFI function for Unity and other FFI consumers
- Uses `CreateAndroidAudioDeviceModule()` instead of generic `CreateAudioDeviceModule()` on Android
- Handles empty device GUIDs on Android (falls back to index 0)
- Documents Android-specific limitations: single default device, no app-level device selection

Platform notes:
- Android device enumeration returns only one "default" device with empty name/GUID
- Audio routing (speaker/earpiece/Bluetooth) is controlled by Android's AudioManager, not WebRTC

## 0.7.41 (2026-05-20)

### Fixes

- Bugfix: Always emit Disconnected on engine close - #1096 (@MaxHeimbrock)
- Support for large RPC messages using data streams - #1013 (@1egoman)

## 0.7.40 (2026-05-14)

### Fixes

- feat: add scalability mode for AV1/VP9. - #1076 (@cloudwebrtc)
- Add `LIVEKIT_PREFERRED_HW_ENCODER` to prefer `nvenc` or `vaapi` hardware video encoding when both are available.
- Relocate unrelated types out of `livekit-protocol`

#### Get WebRTC ADM into Rust - #1037 (@xianshijing-lk)

This PR introduces platform audio device management via WebRTC's Audio Device Module (ADM).

#### Features
- **ADM Proxy**: New `AdmProxy` class that switches between Dummy ADM (synthetic mode) and Platform ADM (real audio I/O)
- **PlatformAudio API**: High-level Rust API for microphone capture and speaker playout with AEC/AGC/NS
- **Device enumeration**: List and select recording/playout devices by index or GUID
- **Mode switching**: Seamlessly switch between synthetic mode (FFI callbacks) and platform mode (native speakers) while audio is active
- **FFI platform audio support**: Expose platform audio device enumeration and selection through `livekit-ffi`
- **Audio processing**: Configure echo cancellation, noise suppression, and auto gain control with platform-specific defaults (hardware on iOS, software elsewhere)

#### Audio Modes
| Mode | Recording | Playout | Use Case |
|------|-----------|---------|----------|
| Synthetic | NativeAudioSource | Dummy ADM + FFI | Unity audio, agents |
| Platform | Platform ADM mic | Platform ADM speakers | VoIP with AEC |

#### API
```rust
// Create PlatformAudio for microphone/speaker access
let audio = PlatformAudio::new()?;

// Enumerate and select devices
for i in 0..audio.recording_devices() as u16 {
    println!("Mic {}: {}", i, audio.recording_device_name(i));
}
audio.set_recording_device(0)?;

// Create audio track for publishing
let track = LocalAudioTrack::create_audio_track("mic", audio.rtc_source());
```

## 0.7.39 (2026-05-11)

### Fixes

- fix: Sync inner.enabled state for E2EE manager. - #1073 (@cloudwebrtc)
- Upgrade protocol to v1.45.8

## 0.7.38 (2026-05-10)

### Fixes

- Bump `rustls-webpki` to 0.103.13, addressing [GHSA-82j2-j2ch-gfr8]https://github.com/advisories/GHSA-82j2-j2ch-gfr8
- Fix missing `libwebrtc.jar` for Android builds, harden build scripts
- fix: derive `simulcasted` from non-deprecated TrackInfo fields - #1052 (@cloudwebrtc)
- fix race in download_webrtc to reduce flaky build - #1047 (@hechen-eng)
- Improve WebRTC build scripts and add external_audio_source patch - #1053 (@xianshijing-lk)
- support SimulateScenario through FFI to improve testing - #1069 (@davidzhao)
- TEL-464: reduce redundant resampling in audio filter - #1019 (@hechen-eng)

## 0.7.37 (2026-04-23)

### Features

#### Add support for frame level packet trailer

##890 by @chenosaurus

- Add support to attach/parse frame level timestamps & frame ID to VideoTracks as a custom payload trailer.
- Breaking change in VideoFrame API, must include `frame_metadata` or use VideoFrame::new().

### Fixes

- Add device-info crate and send device_info to telemetry - #982 (@maxheimbrock)
- Fix data track packet format issue breaking E2EE
- Fix unbound send queue that can cause latency in data track messages - #1032 (@chenosaurus)
- Fix for raw stream drop called from non tokio thread like Unity .NET GC - #1016 (@MaxHeimbrock)

## 0.7.36 (2026-04-02)

### Features

- Initial support for data tracks

### Fixes

#### use the bounded buffer for video stream

##956 by @xianshijing-lk

Before this PR, it uses an unbounded buffer for video stream, that will cause multiple problems:
1, video will be lagged behind if rendering is slow or just wake up from background
2, it will be out of sync with audio

This PRs provides options to set a bounded buffer for video stream, and use 1 buffer as the default option.

## 0.7.35 (2026-03-31)

### Features

- Expose participant active event, state, and joined at

### Fixes

- Upgrade to thiserror 2

## 0.7.34 (2026-03-22)

### Features

#### E2EE: allow setting key_ring_size and key_derivation_algorithm, update webrtc to m144

##921 by @onestacked

This PR uses [this webrtc-sdk PR](https://github.com/webrtc-sdk/webrtc/pull/224) to configure the KDF.

I've tested this with https://codeberg.org/esoteric_programmer/matrix-jukebox and it is compatible with Element Call.

Fixed: https://github.com/livekit/rust-sdks/issues/796

### Fixes

- Add disconnectReason to Room::close
- End-to-end testing for video streams
- Fix H.264 codec matching

#### add bounded buffer to audio_stream, and use 10 frames as the default

##945 by @xianshijing-lk

#### fix PC timeout when connecting with can_subscribe=false

##955 by @s-hamdananwar

When a participant connects with `canSubscribe=false` in their token, the server sends `subscriber_primary=false` in the JoinResponse and does not send a subscriber offer.  This results in `wait_pc_connection` timing out as it is expecting a subscriber PC even when the publisher PC is primary. This PR will skip waiting for subscriber PC when `subscriber_primary=false`.

#### Send client os and os_version from rust

##952 by @MaxHeimbrock

Adds [os_info](https://crates.io/crates/os_info) crate as dependency and sends the data for client connections.

## 0.7.33 (2026-03-13)

### Fixes

#### enhanced build configuration to support macOS and iOS platforms with proper system library linking

##847 by @SchmErik

#### fix video track subscription in single peer connection mode

##914 by @xianshijing-lk