Make the min video bitrate in VideoSendStream configurable.

"WebRTC-VP8-Forced-Fallback-Encoder-v2" affect VP8 only, "WebRTC-Video-MinVideoBitrate" apply to all codec. When both field trial string are set, the bitrate set by "WebRTC-VP8-Forced-Fallback-Encoder-v2" will be used.

Bug: webrtc:10915
Change-Id: I63da5909c04ecfad99e93a535fbf71293890fd11
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/151135
Commit-Queue: Ying Wang <yinwa@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Christoffer Rodbro <crodbro@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29047}
This commit is contained in:
Ying Wang
2019-09-03 14:33:16 +02:00
committed by Commit Bot
parent 1aa7e2fa2d
commit b2fb0b937c
3 changed files with 28 additions and 5 deletions

View File

@ -328,10 +328,13 @@ absl::optional<int> GetFallbackMinBpsFromFieldTrial(
}
int GetMinVideoBitrateBps(webrtc::VideoCodecType type) {
if (GetFallbackMinBpsFromFieldTrial(type).has_value()) {
return GetFallbackMinBpsFromFieldTrial(type).value();
}
if (webrtc::field_trial::IsEnabled(kMinVideoBitrateExperiment)) {
return MinVideoBitrateConfig().min_video_bitrate->bps();
}
return GetFallbackMinBpsFromFieldTrial(type).value_or(kMinVideoBitrateBps);
return kMinVideoBitrateBps;
}
} // namespace

View File

@ -55,7 +55,7 @@ struct MinVideoBitrateConfig {
webrtc::FieldTrialParameter<webrtc::DataRate> min_video_bitrate;
MinVideoBitrateConfig()
: min_video_bitrate("br", webrtc::DataRate::KilobitsPerSec<30>()) {
: min_video_bitrate("br", webrtc::DataRate::bps(kMinVideoBitrateBps)) {
webrtc::ParseFieldTrial(
{&min_video_bitrate},
webrtc::field_trial::FindFullName(kMinVideoBitrateExperiment));

View File

@ -27,6 +27,7 @@
#include "rtc_base/atomic_ops.h"
#include "rtc_base/checks.h"
#include "rtc_base/experiments/alr_experiment.h"
#include "rtc_base/experiments/field_trial_parser.h"
#include "rtc_base/experiments/rate_control_settings.h"
#include "rtc_base/logging.h"
#include "rtc_base/numerics/safe_conversions.h"
@ -57,6 +58,21 @@ bool TransportSeqNumExtensionConfigured(const VideoSendStream::Config& config) {
const char kForcedFallbackFieldTrial[] =
"WebRTC-VP8-Forced-Fallback-Encoder-v2";
const int kDefaultEncoderMinBitrateBps = 30000;
const char kMinVideoBitrateExperiment[] = "WebRTC-Video-MinVideoBitrate";
struct MinVideoBitrateConfig {
webrtc::FieldTrialParameter<webrtc::DataRate> min_video_bitrate;
MinVideoBitrateConfig()
: min_video_bitrate("br",
webrtc::DataRate::bps(kDefaultEncoderMinBitrateBps)) {
webrtc::ParseFieldTrial(
{&min_video_bitrate},
webrtc::field_trial::FindFullName(kMinVideoBitrateExperiment));
}
};
absl::optional<int> GetFallbackMinBpsFromFieldTrial(VideoCodecType type) {
if (type != kVideoCodecVP8)
return absl::nullopt;
@ -84,9 +100,13 @@ absl::optional<int> GetFallbackMinBpsFromFieldTrial(VideoCodecType type) {
}
int GetEncoderMinBitrateBps(VideoCodecType type) {
const int kDefaultEncoderMinBitrateBps = 30000;
return GetFallbackMinBpsFromFieldTrial(type).value_or(
kDefaultEncoderMinBitrateBps);
if (GetFallbackMinBpsFromFieldTrial(type).has_value()) {
return GetFallbackMinBpsFromFieldTrial(type).value();
}
if (webrtc::field_trial::IsEnabled(kMinVideoBitrateExperiment)) {
return MinVideoBitrateConfig().min_video_bitrate->bps();
}
return kDefaultEncoderMinBitrateBps;
}
// Calculate max padding bitrate for a multi layer codec.