diff --git a/rtc_base/experiments/rate_control_settings.cc b/rtc_base/experiments/rate_control_settings.cc index 81089b83ff..018ef1a9ff 100644 --- a/rtc_base/experiments/rate_control_settings.cc +++ b/rtc_base/experiments/rate_control_settings.cc @@ -73,8 +73,11 @@ RateControlSettings::RateControlSettings( congestion_window_pushback_( "cwnd_pushback", MaybeReadCongestionWindowPushbackExperimentParameter( - key_value_config)) { - ParseFieldTrial({&congestion_window_, &congestion_window_pushback_}, + key_value_config)), + pacing_factor_("pacing_factor"), + alr_probing_("alr_probing", false) { + ParseFieldTrial({&congestion_window_, &congestion_window_pushback_, + &pacing_factor_, &alr_probing_}, key_value_config->Lookup("WebRTC-VideoRateControl")); } @@ -111,4 +114,12 @@ uint32_t RateControlSettings::CongestionWindowMinPushbackTargetBitrateBps() kDefaultMinPushbackTargetBitrateBps); } +absl::optional RateControlSettings::GetPacingFactor() const { + return pacing_factor_.GetOptional(); +} + +bool RateControlSettings::UseAlrProbing() const { + return alr_probing_.Get(); +} + } // namespace webrtc diff --git a/rtc_base/experiments/rate_control_settings.h b/rtc_base/experiments/rate_control_settings.h index 0afda877b6..b4a3755268 100644 --- a/rtc_base/experiments/rate_control_settings.h +++ b/rtc_base/experiments/rate_control_settings.h @@ -14,6 +14,7 @@ #include "absl/types/optional.h" #include "api/transport/webrtc_key_value_config.h" #include "rtc_base/experiments/field_trial_parser.h" +#include "rtc_base/experiments/field_trial_units.h" namespace webrtc { @@ -34,12 +35,17 @@ class RateControlSettings final { bool UseCongestionWindowPushback() const; uint32_t CongestionWindowMinPushbackTargetBitrateBps() const; + absl::optional GetPacingFactor() const; + bool UseAlrProbing() const; + private: explicit RateControlSettings( const WebRtcKeyValueConfig* const key_value_config); FieldTrialOptional congestion_window_; FieldTrialOptional congestion_window_pushback_; + FieldTrialOptional pacing_factor_; + FieldTrialParameter alr_probing_; }; } // namespace webrtc diff --git a/video/BUILD.gn b/video/BUILD.gn index 1b3e698ea6..a56e506f7f 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -86,6 +86,7 @@ rtc_static_library("video") { "../rtc_base:stringutils", "../rtc_base/experiments:alr_experiment", "../rtc_base/experiments:quality_scaling_experiment", + "../rtc_base/experiments:rate_control_settings", "../rtc_base/system:fallthrough", "../rtc_base/task_utils:repeating_task", "../system_wrappers:field_trial", diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc index f455d18de2..2b6dbb5e11 100644 --- a/video/video_send_stream_impl.cc +++ b/video/video_send_stream_impl.cc @@ -25,6 +25,7 @@ #include "rtc_base/atomic_ops.h" #include "rtc_base/checks.h" #include "rtc_base/experiments/alr_experiment.h" +#include "rtc_base/experiments/rate_control_settings.h" #include "rtc_base/logging.h" #include "rtc_base/numerics/safe_conversions.h" #include "rtc_base/scoped_ref_ptr.h" @@ -204,6 +205,7 @@ VideoSendStreamImpl::VideoSendStreamImpl( stats_proxy_(stats_proxy), config_(config), worker_queue_(worker_queue), + timed_out_(false), call_stats_(call_stats), transport_(transport), bitrate_allocator_(bitrate_allocator), @@ -278,9 +280,16 @@ VideoSendStreamImpl::VideoSendStreamImpl( configured_pacing_factor_ = alr_settings->pacing_factor; transport->SetQueueTimeLimit(alr_settings->max_paced_queue_time); } else { - transport->EnablePeriodicAlrProbing(false); - transport->SetPacingFactor(pacing_config_.pacing_factor); - configured_pacing_factor_ = pacing_config_.pacing_factor; + RateControlSettings rate_control_settings = + RateControlSettings::ParseFromFieldTrials(); + + transport->EnablePeriodicAlrProbing( + rate_control_settings.UseAlrProbing()); + const double pacing_factor = + rate_control_settings.GetPacingFactor().value_or( + pacing_config_.pacing_factor); + transport->SetPacingFactor(pacing_factor); + configured_pacing_factor_ = pacing_factor; transport->SetQueueTimeLimit(pacing_config_.max_pacing_delay.Get().ms()); } }