diff --git a/media/engine/constants.cc b/media/engine/constants.cc index fb3ac698e6..e0cccba9f9 100644 --- a/media/engine/constants.cc +++ b/media/engine/constants.cc @@ -16,4 +16,5 @@ const int kMinVideoBitrateBps = 30000; const int kVideoMtu = 1200; const int kVideoRtpSendBufferSize = 65536; const int kVideoRtpRecvBufferSize = 262144; +const char* kMinVideoBitrateExperiment = "WebRTC-Video-MinVideoBitrate"; } // namespace cricket diff --git a/media/engine/constants.h b/media/engine/constants.h index b136060546..e9ad369515 100644 --- a/media/engine/constants.h +++ b/media/engine/constants.h @@ -20,6 +20,7 @@ extern const int kVideoRtpRecvBufferSize; extern const char kH264CodecName[]; extern const int kMinVideoBitrateBps; +extern const char* kMinVideoBitrateExperiment; } // namespace cricket diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc index a3e48d9447..26357c6575 100644 --- a/media/engine/webrtc_video_engine.cc +++ b/media/engine/webrtc_video_engine.cc @@ -27,7 +27,6 @@ #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" #include "call/call.h" -#include "media/engine/constants.h" #include "media/engine/simulcast.h" #include "media/engine/webrtc_media_engine.h" #include "media/engine/webrtc_voice_engine.h" @@ -329,6 +328,9 @@ absl::optional GetFallbackMinBpsFromFieldTrial( } int GetMinVideoBitrateBps(webrtc::VideoCodecType type) { + if (webrtc::field_trial::IsEnabled(kMinVideoBitrateExperiment)) { + return MinVideoBitrateConfig().min_video_bitrate->bps(); + } return GetFallbackMinBpsFromFieldTrial(type).value_or(kMinVideoBitrateBps); } } // namespace diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h index 8dd758f0eb..50467cd804 100644 --- a/media/engine/webrtc_video_engine.h +++ b/media/engine/webrtc_video_engine.h @@ -29,12 +29,15 @@ #include "call/video_receive_stream.h" #include "call/video_send_stream.h" #include "media/base/media_engine.h" +#include "media/engine/constants.h" #include "media/engine/unhandled_packets_buffer.h" #include "rtc_base/async_invoker.h" #include "rtc_base/critical_section.h" +#include "rtc_base/experiments/field_trial_parser.h" #include "rtc_base/network_route.h" #include "rtc_base/thread_annotations.h" #include "rtc_base/thread_checker.h" +#include "system_wrappers/include/field_trial.h" namespace webrtc { class VideoDecoderFactory; @@ -48,6 +51,17 @@ class Thread; namespace cricket { +struct MinVideoBitrateConfig { + webrtc::FieldTrialParameter min_video_bitrate; + + MinVideoBitrateConfig() + : min_video_bitrate("br", webrtc::DataRate::KilobitsPerSec<30>()) { + webrtc::ParseFieldTrial( + {&min_video_bitrate}, + webrtc::field_trial::FindFullName(kMinVideoBitrateExperiment)); + } +}; + class WebRtcVideoChannel; class UnsignalledSsrcHandler {