From a471e797bc6bb5d26375e4c56ff4aacbab08b8a9 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Mon, 26 Aug 2019 10:10:52 +0200 Subject: [PATCH] Make min video target bitrate configurable. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I5adf1e675be2114b648878078a8f2e6808c390c7 Bug: webrtc:10915 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150331 Commit-Queue: Ying Wang Reviewed-by: Niels Moller Reviewed-by: Erik Språng Reviewed-by: Christoffer Rodbro Cr-Commit-Position: refs/heads/master@{#28959} --- media/engine/constants.cc | 1 + media/engine/constants.h | 1 + media/engine/webrtc_video_engine.cc | 4 +++- media/engine/webrtc_video_engine.h | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) 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 {