Add support for max/min encode bitrate to peer connection quality test

Bug: webrtc:10975
Change-Id: I9be551040936d2e9b5e41dd1bbaea2ad4afd36ed
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/153481
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Johannes Kron <kron@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29240}
This commit is contained in:
Johannes Kron 2019-09-19 14:55:58 +02:00 committed by Commit Bot
parent 6a092637f0
commit ac315b283c
2 changed files with 79 additions and 8 deletions

View File

@ -282,5 +282,57 @@ TEST_F(PeerConnectionE2EQualityTestSmokeTest, MAYBE_Svc) {
});
}
// IOS debug builds can be quite slow, disabling to avoid issues with timeouts.
#if defined(WEBRTC_IOS) && defined(WEBRTC_ARCH_ARM64) && !defined(NDEBUG)
#define MAYBE_HighBitrate DISABLED_HighBitrate
#else
#define MAYBE_HighBitrate HighBitrate
#endif
TEST_F(PeerConnectionE2EQualityTestSmokeTest, MAYBE_HighBitrate) {
RunParams run_params(TimeDelta::seconds(7));
run_params.video_codec_name = cricket::kVp9CodecName;
run_params.video_codec_required_params = {{"profile-id", "0"}};
RunTest(
"smoke", run_params,
[](PeerConfigurer* alice) {
PeerConnectionInterface::BitrateParameters bitrate_params;
bitrate_params.current_bitrate_bps = 4000000;
bitrate_params.max_bitrate_bps = 8000000;
alice->SetBitrateParameters(bitrate_params);
VideoConfig video(1920, 1080, 30);
video.stream_label = "alice-video";
video.min_encode_bitrate_bps = 3000000;
video.max_encode_bitrate_bps = 6000000;
alice->AddVideoConfig(std::move(video));
AudioConfig audio;
audio.stream_label = "alice-audio";
audio.mode = AudioConfig::Mode::kFile;
audio.input_file_name =
test::ResourcePath("pc_quality_smoke_test_alice_source", "wav");
audio.sampling_frequency_in_hz = 48000;
alice->SetAudioConfig(std::move(audio));
},
[](PeerConfigurer* bob) {
PeerConnectionInterface::BitrateParameters bitrate_params;
bitrate_params.current_bitrate_bps = 4000000;
bitrate_params.max_bitrate_bps = 8000000;
bob->SetBitrateParameters(bitrate_params);
VideoConfig video(1920, 1080, 30);
video.stream_label = "bob-video";
video.min_encode_bitrate_bps = 3000000;
video.max_encode_bitrate_bps = 6000000;
bob->AddVideoConfig(std::move(video));
AudioConfig audio;
audio.stream_label = "bob-audio";
audio.mode = AudioConfig::Mode::kFile;
audio.input_file_name =
test::ResourcePath("pc_quality_smoke_test_bob_source", "wav");
bob->SetAudioConfig(std::move(audio));
});
}
} // namespace webrtc_pc_e2e
} // namespace webrtc

View File

@ -528,6 +528,10 @@ void PeerConnectionE2EQualityTest::ValidateParams(const RunParams& run_params,
// We support simulcast only from caller.
RTC_CHECK_EQ(i, 0)
<< "Only simulcast stream from first peer is supported";
RTC_CHECK(!video_config.max_encode_bitrate_bps)
<< "Setting max encode bitrate is not implemented for simulcast.";
RTC_CHECK(!video_config.min_encode_bitrate_bps)
<< "Setting min encode bitrate is not implemented for simulcast.";
}
}
if (p->audio_config) {
@ -615,9 +619,10 @@ void PeerConnectionE2EQualityTest::SetupCallOnSignalingThread(
alice_transceivers_counter++;
}
size_t alice_video_transceivers_non_simulcast_counter = 0;
for (auto& video_config : alice_->params()->video_configs) {
RtpTransceiverInit transceiver_params;
if (video_config.simulcast_config) {
RtpTransceiverInit transceiver_params;
transceiver_params.direction = RtpTransceiverDirection::kSendOnly;
if (run_params.video_codec_name == cricket::kVp8CodecName) {
// For Vp8 simulcast we need to add as many RtpEncodingParameters to the
@ -631,20 +636,34 @@ void PeerConnectionE2EQualityTest::SetupCallOnSignalingThread(
transceiver_params.send_encodings.push_back(enc_params);
}
}
RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> result =
alice_->AddTransceiver(cricket::MediaType::MEDIA_TYPE_VIDEO,
transceiver_params);
RTC_CHECK(result.ok());
alice_transceivers_counter++;
} else {
transceiver_params.direction = RtpTransceiverDirection::kSendRecv;
RtpEncodingParameters enc_params;
enc_params.max_bitrate_bps = video_config.max_encode_bitrate_bps;
enc_params.min_bitrate_bps = video_config.min_encode_bitrate_bps;
transceiver_params.send_encodings.push_back(enc_params);
alice_video_transceivers_non_simulcast_counter++;
}
RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> result =
alice_->AddTransceiver(cricket::MediaType::MEDIA_TYPE_VIDEO,
transceiver_params);
RTC_CHECK(result.ok());
alice_transceivers_counter++;
}
for (size_t i = 0; i < bob_->params()->video_configs.size(); ++i) {
// Add receive only transceivers in case Bob has more video_configs than
// Alice.
for (size_t i = alice_video_transceivers_non_simulcast_counter;
i < bob_->params()->video_configs.size(); ++i) {
RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> result =
alice_->AddTransceiver(cricket::MediaType::MEDIA_TYPE_VIDEO,
receive_only_transceiver_init);
RTC_CHECK(result.ok());
alice_transceivers_counter++;
}
// Then add media for Alice and Bob
alice_video_sources_ = MaybeAddMedia(alice_.get());
bob_video_sources_ = MaybeAddMedia(bob_.get());
@ -990,7 +1009,7 @@ PeerConnectionE2EQualityTest::ScheduledActivity::ScheduledActivity(
absl::optional<TimeDelta> interval,
std::function<void(TimeDelta)> func)
: initial_delay_since_start(initial_delay_since_start),
interval(std::move(interval)),
interval(interval),
func(std::move(func)) {}
} // namespace webrtc_pc_e2e