From ac315b283c433922e96c91d2dd1a14b1126a036f Mon Sep 17 00:00:00 2001 From: Johannes Kron Date: Thu, 19 Sep 2019 14:55:58 +0200 Subject: [PATCH] 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 Commit-Queue: Johannes Kron Cr-Commit-Position: refs/heads/master@{#29240} --- test/pc/e2e/peer_connection_e2e_smoke_test.cc | 52 +++++++++++++++++++ test/pc/e2e/peer_connection_quality_test.cc | 35 ++++++++++--- 2 files changed, 79 insertions(+), 8 deletions(-) diff --git a/test/pc/e2e/peer_connection_e2e_smoke_test.cc b/test/pc/e2e/peer_connection_e2e_smoke_test.cc index 8765b2d299..47bebc2557 100644 --- a/test/pc/e2e/peer_connection_e2e_smoke_test.cc +++ b/test/pc/e2e/peer_connection_e2e_smoke_test.cc @@ -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 diff --git a/test/pc/e2e/peer_connection_quality_test.cc b/test/pc/e2e/peer_connection_quality_test.cc index a631237718..70bfec9b06 100644 --- a/test/pc/e2e/peer_connection_quality_test.cc +++ b/test/pc/e2e/peer_connection_quality_test.cc @@ -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> 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> 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> 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 interval, std::function func) : initial_delay_since_start(initial_delay_since_start), - interval(std::move(interval)), + interval(interval), func(std::move(func)) {} } // namespace webrtc_pc_e2e