Files
livekit/pkg/service
cloudwebrtc 3fa24cf7c8 fix: acquire requested video layer directly under live streaming mode
A subscriber that requests the top spatial layer would briefly decode a
lower layer before settling on the requested one (e.g. layer 0 -> layer 2),
a visible low->high quality ramp. Two distinct causes:

1. Simulcast.Select latched opportunistically onto the first key frame of
   any layer <= target, so a lower layer's key frame (which usually arrives
   first) was selected before the requested layer's.

2. When the subscriber joined before the publisher started, the layers are
   detected gradually and `maxSeen` climbs 0->1->2. AllocateOptimal caps the
   target at `min(maxSeen, requested)`, so the target itself ramped up and
   Select followed it.

The new behavior is gated behind a `LiveStreamingMode` Room config option
(default false -> original opportunistic behavior unchanged):

- Select latches directly onto the target layer during initial acquisition.
- Forwarder gains an initial-acquisition grace: while not yet streaming and
  the requested layer has not been seen, the target/key-frame-request aim
  straight at the requested layer instead of the highest seen so far. Gated
  on `maxSeen < requested` so steady-state behavior (incl. overshoot) is
  unchanged.
- If the requested layer never shows up within the grace, the key frame
  requester triggers a re-allocation so the target falls back to the highest
  layer actually seen, avoiding a stall/black screen.
- On bind, a live-streaming subscriber requests the highest layer up front
  (instead of the adaptive-stream LOW start) so it is acquired directly.

LiveStreamingMode is threaded from config.RoomConfig through the participant
(GetLiveStreamingMode) and SubscribedTrack/DownTrack params into the Forwarder
and Simulcast layer selector.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 16:04:51 +08:00
..
2025-12-22 12:54:11 +08:00
2024-06-27 02:13:51 -07:00
2025-09-24 13:16:27 +05:30