Skip to content

Commit bf02dde

Browse files
committed
Fix for dynacast error
1 parent 95187df commit bf02dde

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

livekit/src/room/track/local_video_track.rs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -370,17 +370,19 @@ impl LocalVideoTrack {
370370

371371
let mut changed = false;
372372
for encoding in &mut params.encodings {
373-
let quality = crate::options::video_quality_for_rid_or_default(&encoding.rid);
373+
// The SFU addresses layers by spatial index (0 = Low), so a
374+
// single rid-less encoding is addressed as Low, not High.
375+
let rid = if encoding.rid.is_empty() { "q" } else { encoding.rid.as_str() };
376+
let quality = crate::options::video_quality_for_rid_or_default(rid);
374377

375-
let should_active = qualities
376-
.iter()
377-
.find(|q| q.quality == quality as i32)
378-
.map(|q| q.enabled)
379-
.unwrap_or(false);
378+
// A quality missing from the update is left untouched.
379+
let Some(subscribed) = qualities.iter().find(|q| q.quality == quality as i32) else {
380+
continue;
381+
};
380382

381-
if encoding.active != should_active {
383+
if encoding.active != subscribed.enabled {
382384
changed = true;
383-
encoding.active = should_active;
385+
encoding.active = subscribed.enabled;
384386
}
385387
}
386388

@@ -394,11 +396,10 @@ impl LocalVideoTrack {
394396
})
395397
.collect();
396398

397-
sender
398-
.set_parameters(params)
399-
.map_err(|e| RoomError::Internal(format!("failed to set sender parameters: {}", e)))?;
400-
401399
if changed {
400+
sender.set_parameters(params).map_err(|e| {
401+
RoomError::Internal(format!("failed to set sender parameters: {}", e))
402+
})?;
402403
log::debug!("dynacast: layers changed -> [{}]", layers.join(", "));
403404
} else {
404405
log::debug!("dynacast: layers unchanged [{}]", layers.join(", "));

0 commit comments

Comments
 (0)