pub struct VideoAdaptationTuning {
pub(crate) multiparty_scalable_video_threshold: usize,
pub(crate) thumbnail_budget_divisor: u64,
pub(crate) downswitch_pressure_observations: u8,
pub(crate) upswitch_stable_observations: u8,
pub(crate) receiver_budget_headroom_percent: u8,
pub(crate) audio_reserve_per_speaker: Bitrate,
}Expand description
Room-wide video budget and adaptation hysteresis.
When room membership reaches multiparty_scalable_video_threshold,
scalable-video per-route targets use available receiver bandwidth and the
resolved layout role. Pinned, featured, readable-detail and active-speaker
targets use the full receiver budget. When several visible scalable routes
share a receiver, other scalable targets divide that budget by their count and
thumbnail_budget_divisor. Observation counts require consecutive policy
turns. Headroom is removed before audio_reserve_per_speaker is subtracted
for each admitted audio route the receiver consumes.
Fields§
§multiparty_scalable_video_threshold: usize§thumbnail_budget_divisor: u64§downswitch_pressure_observations: u8§upswitch_stable_observations: u8§receiver_budget_headroom_percent: u8§audio_reserve_per_speaker: BitrateImplementations§
Source§impl VideoAdaptationTuning
impl VideoAdaptationTuning
pub const DEFAULT_MULTIPARTY_SCALABLE_VIDEO_THRESHOLD: usize = 3
pub const DEFAULT_THUMBNAIL_BUDGET_DIVISOR: u64 = 2
pub const DEFAULT_DOWNSWITCH_PRESSURE_OBSERVATIONS: u8 = 2
pub const DEFAULT_UPSWITCH_STABLE_OBSERVATIONS: u8 = 3
pub const DEFAULT_RECEIVER_BUDGET_HEADROOM_PERCENT: u8 = 0
pub const DEFAULT_AUDIO_RESERVE_PER_SPEAKER: Bitrate
Sourcepub const fn try_new(
multiparty_scalable_video_threshold: usize,
thumbnail_budget_divisor: u64,
downswitch_pressure_observations: u8,
upswitch_stable_observations: u8,
receiver_budget_headroom_percent: u8,
audio_reserve_per_speaker: Bitrate,
) -> Result<Self, VideoAdaptationTuningError>
pub const fn try_new( multiparty_scalable_video_threshold: usize, thumbnail_budget_divisor: u64, downswitch_pressure_observations: u8, upswitch_stable_observations: u8, receiver_budget_headroom_percent: u8, audio_reserve_per_speaker: Bitrate, ) -> Result<Self, VideoAdaptationTuningError>
Builds validated video adaptation tuning.
§Errors
Returns VideoAdaptationTuningError when the scalable-video threshold,
the thumbnail budget divisor or either observation knob is zero, or when
the headroom percent exceeds 100.
Trait Implementations§
Source§impl Clone for VideoAdaptationTuning
impl Clone for VideoAdaptationTuning
Source§fn clone(&self) -> VideoAdaptationTuning
fn clone(&self) -> VideoAdaptationTuning
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VideoAdaptationTuning
impl Debug for VideoAdaptationTuning
Source§impl Default for VideoAdaptationTuning
impl Default for VideoAdaptationTuning
Source§impl PartialEq for VideoAdaptationTuning
impl PartialEq for VideoAdaptationTuning
impl Copy for VideoAdaptationTuning
impl Eq for VideoAdaptationTuning
impl StructuralPartialEq for VideoAdaptationTuning
Auto Trait Implementations§
impl Freeze for VideoAdaptationTuning
impl RefUnwindSafe for VideoAdaptationTuning
impl Send for VideoAdaptationTuning
impl Sync for VideoAdaptationTuning
impl Unpin for VideoAdaptationTuning
impl UnsafeUnpin for VideoAdaptationTuning
impl UnwindSafe for VideoAdaptationTuning
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more