diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc index fc6caf5105..a72292dfae 100644 --- a/audio/audio_send_stream.cc +++ b/audio/audio_send_stream.cc @@ -804,7 +804,9 @@ void AudioSendStream::ConfigureBitrateObserver() { MediaStreamAllocationConfig{ constraints.min.bps(), constraints.max.bps(), 0, allocation_settings_.DefaultPriorityBitrate().bps(), true, - config_.track_id, config_.bitrate_priority}); + config_.track_id, + allocation_settings_.BitratePriority().value_or( + config_.bitrate_priority)}); } void AudioSendStream::RemoveBitrateObserver() { diff --git a/call/bitrate_allocator.cc b/call/bitrate_allocator.cc index 9d2705f66c..7d5b52da90 100644 --- a/call/bitrate_allocator.cc +++ b/call/bitrate_allocator.cc @@ -67,7 +67,9 @@ BitrateAllocator::BitrateAllocator(Clock* clock, LimitObserver* limit_observer) total_requested_max_bitrate_(0), bitrate_allocation_strategy_(nullptr), transmission_max_bitrate_multiplier_( - GetTransmissionMaxBitrateMultiplier()) { + GetTransmissionMaxBitrateMultiplier()), + ignore_injected_strategy_( + field_trial::IsEnabled("WebRTC-IgnoreInjectedAllocationStrategy")) { sequenced_checker_.Detach(); } @@ -315,7 +317,7 @@ BitrateAllocator::ObserverAllocation BitrateAllocator::AllocateBitrates( if (bitrate_observer_configs_.empty()) return ObserverAllocation(); - if (bitrate_allocation_strategy_ != nullptr) { + if (!ignore_injected_strategy_ && bitrate_allocation_strategy_ != nullptr) { // Note: This intentionally causes slicing, we only copy the fields in // ObserverConfig that are inherited from TrackConfig. std::vector track_configs( diff --git a/call/bitrate_allocator.h b/call/bitrate_allocator.h index f35f3f7d7d..8611a8967b 100644 --- a/call/bitrate_allocator.h +++ b/call/bitrate_allocator.h @@ -246,6 +246,7 @@ class BitrateAllocator : public BitrateAllocatorInterface { std::unique_ptr bitrate_allocation_strategy_ RTC_GUARDED_BY(&sequenced_checker_); const uint8_t transmission_max_bitrate_multiplier_; + const bool ignore_injected_strategy_; }; } // namespace webrtc diff --git a/rtc_base/experiments/audio_allocation_settings.cc b/rtc_base/experiments/audio_allocation_settings.cc index 6579531da6..66d9d4785b 100644 --- a/rtc_base/experiments/audio_allocation_settings.cc +++ b/rtc_base/experiments/audio_allocation_settings.cc @@ -8,6 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ #include "rtc_base/experiments/audio_allocation_settings.h" + #include "system_wrappers/include/field_trial.h" namespace webrtc { @@ -22,7 +23,8 @@ AudioAllocationSettings::AudioAllocationSettings() send_side_bwe_with_overhead_("Enabled"), min_bitrate_("min"), max_bitrate_("max"), - priority_bitrate_("prio", DataRate::Zero()) { + priority_bitrate_("prio_rate", DataRate::Zero()), + bitrate_priority_("rate_prio") { ParseFieldTrial({&audio_send_side_bwe_}, field_trial::FindFullName("WebRTC-Audio-SendSideBwe")); ParseFieldTrial({&allocate_audio_without_feedback_}, @@ -32,8 +34,9 @@ AudioAllocationSettings::AudioAllocationSettings() ParseFieldTrial({&send_side_bwe_with_overhead_}, field_trial::FindFullName("WebRTC-SendSideBwe-WithOverhead")); - ParseFieldTrial({&min_bitrate_, &max_bitrate_, &priority_bitrate_}, - field_trial::FindFullName("WebRTC-Audio-Allocation")); + ParseFieldTrial( + {&min_bitrate_, &max_bitrate_, &priority_bitrate_, &bitrate_priority_}, + field_trial::FindFullName("WebRTC-Audio-Allocation")); // TODO(mflodman): Keep testing this and set proper values. // Note: This is an early experiment currently only supported by Opus. @@ -114,5 +117,8 @@ DataRate AudioAllocationSettings::DefaultPriorityBitrate() const { } return priority_bitrate_.Get() + max_overhead; } +absl::optional AudioAllocationSettings::BitratePriority() const { + return bitrate_priority_.GetOptional(); +} } // namespace webrtc diff --git a/rtc_base/experiments/audio_allocation_settings.h b/rtc_base/experiments/audio_allocation_settings.h index c0999735ee..d85b00766a 100644 --- a/rtc_base/experiments/audio_allocation_settings.h +++ b/rtc_base/experiments/audio_allocation_settings.h @@ -72,6 +72,10 @@ class AudioAllocationSettings { // divide bitrate evently between audio and video above this bitrate. DataRate DefaultPriorityBitrate() const; + // The bitrate priority is used to determine how much of the available bitrate + // beyond the min or priority bitrate audio streams should receive. + absl::optional BitratePriority() const; + private: FieldTrialFlag audio_send_side_bwe_; FieldTrialFlag allocate_audio_without_feedback_; @@ -83,6 +87,7 @@ class AudioAllocationSettings { FieldTrialOptional min_bitrate_; FieldTrialOptional max_bitrate_; FieldTrialParameter priority_bitrate_; + FieldTrialOptional bitrate_priority_; }; } // namespace webrtc