Skip to content

Add dynacast support - #1003

Merged
stephen-derosa merged 8 commits into
mainfrom
dc/dynacast
Jun 17, 2026
Merged

Add dynacast support#1003
stephen-derosa merged 8 commits into
mainfrom
dc/dynacast

Conversation

@chenosaurus

@chenosaurus chenosaurus commented Apr 10, 2026

Copy link
Copy Markdown
Contributor
  • properly handle SubscribedQualityUpdate events from SFU and update published layers.
  • Add e2e tests for dynacast

Heres a video of dynacast working. We can see that if we get server commands down, we properly respond
https://github.com/user-attachments/assets/41bb2da5-c58d-47cb-8399-a767d987c353

@github-actions

github-actions Bot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Changeset

The following package versions will be affected by this PR:

Package Bump
libwebrtc minor
livekit patch
livekit-ffi patch

@chenosaurus
chenosaurus marked this pull request as ready for review April 13, 2026 16:17
Comment thread livekit/src/room/track/local_video_track.rs Outdated
Comment thread livekit/src/room/track/local_video_track.rs
Comment thread livekit/src/room/track/local_video_track.rs
Comment thread livekit/src/room/mod.rs Outdated
Comment thread livekit/src/room/track/local_video_track.rs Outdated
Comment thread livekit/src/room/track/local_video_track.rs
Comment thread livekit/src/room/mod.rs
Comment thread livekit/src/room/track/local_video_track.rs Outdated
Comment thread libwebrtc/src/native/rtp_parameters.rs Outdated
Comment thread livekit/src/room/track/local_video_track.rs Outdated
Comment thread libwebrtc/src/rtp_parameters.rs
Comment thread livekit/tests/dynacast_test.rs Outdated
Comment thread livekit/src/room/track/local_video_track.rs Outdated
Comment thread livekit/src/room/options.rs Outdated
Comment thread examples/local_video/src/publisher.rs Outdated
Comment thread livekit/src/room/track/local_video_track.rs Outdated
@ladvoc

ladvoc commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

One more thing: the README should be updated to check the "Dynacast" box.

@xianshijing-lk xianshijing-lk left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some questions / nits. lgtm

Comment thread livekit/src/room/track/local_video_track.rs Outdated
@stephen-derosa
stephen-derosa requested a review from ladvoc June 16, 2026 19:43
@stephen-derosa
stephen-derosa merged commit 97f9455 into main Jun 17, 2026
22 checks passed
@stephen-derosa
stephen-derosa deleted the dc/dynacast branch June 17, 2026 15:11
@knope-bot knope-bot Bot mentioned this pull request Jun 17, 2026
stephen-derosa pushed a commit that referenced this pull request Jun 17, 2026
> [!IMPORTANT]
> Merging this pull request will create these releases

# livekit 0.7.46 (2026-06-17)
## Features

### Make GLib an opt-in dependency

`webrtc-sys` no longer links against `glib-2.0`/`gobject-2.0`/`gio-2.0`
by default.

Breaking: Wayland screen sharing now requires the `glib-main-loop`
feature on `livekit` (or `libwebrtc`).

## Fixes

- Add track publishing doc example
- Fix silent subscription failures in single-pc mode when the SFU reuses
an existing empty transceiver for a new remote track. Also make
`RtpTransceiver::mid()` safe to call on transceivers that haven't been
negotiated yet — libwebrtc is built with `-fno-exceptions`, so
`std::optional::value()` aborted the process instead of throwing.
- Add `LK_DISABLE_NVDEC` to bypass NVIDIA NVDEC decoder registration
when the environment variable is set.
- return DeviceNotFound when device is not there for set_recording_devi…
- #1155 (@xianshijing-lk)

### Add dynacast support - #1003 (@chenosaurus, @stephen-derosa)

This includes a minor breaking change for `libwebrtc`: `RtpParameters`
now
contains additional RTP sender state that must be preserved when
round-tripping
through `set_parameters()`.
# livekit-ffi 0.12.64 (2026-06-17)
## Fixes

- Add `LK_DISABLE_NVDEC` to bypass NVIDIA NVDEC decoder registration
when the environment variable is set.
- return DeviceNotFound when device is not there for set_recording_devi…
- #1155 (@xianshijing-lk)

### Add dynacast support - #1003 (@chenosaurus, @stephen-derosa)

This includes a minor breaking change for `libwebrtc`: `RtpParameters`
now
contains additional RTP sender state that must be preserved when
round-tripping
through `set_parameters()`.
# livekit-api 0.5.2 (2026-06-17)
## Fixes

### Shrink binaries with an HMAC-only JWT crypto provider

`livekit-api` now installs a minimal in-crate HMAC `CryptoProvider`
(HS256/384/512) instead of jsonwebtoken's `rust_crypto` backend,
dropping the
unused RSA/EC/EdDSA algorithms. LiveKit access tokens are HS256, so
there is no
public API or behavior change. This trims ~200 KiB of unreachable crypto
code,
shrinking the shipped binaries ~25–29% — the `RustLiveKitUniFFI` iOS
framework
drops from ~900 KiB to ~672 KiB (arm64) and the Android arm64-v8a `.so`
from
~1.13 MiB to ~816 KiB. `livekit-ffi` and `livekit` benefit too.

### fix: surface full error chain in region fetch failures for better
TLS error diagnosis.

When connecting to LiveKit Cloud from containers without CA certificates
installed, the error message now includes the full error chain (e.g.,
"invalid peer certificate: UnknownIssuer") instead of just "error
sending request for url (...)". This makes TLS certificate issues
self-diagnosing.

Also added documentation for TLS features in Cargo.toml, highlighting
`rustls-tls-webpki-roots` as the recommended option for container
deployments.
# webrtc-sys 0.3.35 (2026-06-17)
## Fixes

- Fix silent subscription failures in single-pc mode when the SFU reuses
an existing empty transceiver for a new remote track. Also make
`RtpTransceiver::mid()` safe to call on transceivers that haven't been
negotiated yet — libwebrtc is built with `-fno-exceptions`, so
`std::optional::value()` aborted the process instead of throwing.
- Add `LK_DISABLE_NVDEC` to bypass NVIDIA NVDEC decoder registration
when the environment variable is set.
- Add Jetson DMA-buffer video publishing support for libargus MIPI
capture and the Jetson hardware encoder, including AV1 hardware encoding
on supported Jetson Orin devices.

### Make GLib an opt-in dependency

`webrtc-sys` no longer links against `glib-2.0`/`gobject-2.0`/`gio-2.0`
by default.

Breaking: Wayland screen sharing now requires the `glib-main-loop`
feature on `livekit` (or `libwebrtc`).
# libwebrtc 0.3.37 (2026-06-17)
## Features

### Add dynacast support - #1003 (@chenosaurus, @stephen-derosa)

This includes a minor breaking change for `libwebrtc`: `RtpParameters`
now
contains additional RTP sender state that must be preserved when
round-tripping
through `set_parameters()`.

### Make GLib an opt-in dependency

`webrtc-sys` no longer links against `glib-2.0`/`gobject-2.0`/`gio-2.0`
by default.

Breaking: Wayland screen sharing now requires the `glib-main-loop`
feature on `livekit` (or `libwebrtc`).

## Fixes

- Fix silent subscription failures in single-pc mode when the SFU reuses
an existing empty transceiver for a new remote track. Also make
`RtpTransceiver::mid()` safe to call on transceivers that haven't been
negotiated yet — libwebrtc is built with `-fno-exceptions`, so
`std::optional::value()` aborted the process instead of throwing.
- Add `LK_DISABLE_NVDEC` to bypass NVIDIA NVDEC decoder registration
when the environment variable is set.
- Add Jetson DMA-buffer video publishing support for libargus MIPI
capture and the Jetson hardware encoder, including AV1 hardware encoding
on supported Jetson Orin devices.

Co-authored-by: knope-bot[bot] <152252888+knope-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants