diff --git a/api/BUILD.gn b/api/BUILD.gn index 37473eafe3..560cabccc7 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -381,6 +381,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") { ":track_id_stream_info_map", ":video_quality_analyzer_api", "../media:rtc_media_base", + "../rtc_base:deprecation", "../rtc_base:rtc_base", "rtc_event_log", "task_queue", diff --git a/api/peer_connection_interface.cc b/api/peer_connection_interface.cc index f82e84b80f..0c25405784 100644 --- a/api/peer_connection_interface.cc +++ b/api/peer_connection_interface.cc @@ -53,6 +53,27 @@ RTCError PeerConnectionInterface::SetConfiguration( return RTCError(); } +RTCError PeerConnectionInterface::SetBitrate(const BitrateSettings& bitrate) { + BitrateParameters bitrate_parameters; + bitrate_parameters.min_bitrate_bps = bitrate.min_bitrate_bps; + bitrate_parameters.current_bitrate_bps = bitrate.start_bitrate_bps; + bitrate_parameters.max_bitrate_bps = bitrate.max_bitrate_bps; + return SetBitrate(bitrate_parameters); +} + +RTCError PeerConnectionInterface::SetBitrate( + const BitrateParameters& bitrate_parameters) { + BitrateSettings bitrate; + bitrate.min_bitrate_bps = bitrate_parameters.min_bitrate_bps; + bitrate.start_bitrate_bps = bitrate_parameters.current_bitrate_bps; + bitrate.max_bitrate_bps = bitrate_parameters.max_bitrate_bps; + return SetBitrate(bitrate); +} + +PeerConnectionInterface::BitrateParameters::BitrateParameters() = default; + +PeerConnectionInterface::BitrateParameters::~BitrateParameters() = default; + PeerConnectionDependencies::PeerConnectionDependencies( PeerConnectionObserver* observer_in) : observer(observer_in) {} diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h index fd4d2df6a7..2664af4e5e 100644 --- a/api/peer_connection_interface.h +++ b/api/peer_connection_interface.h @@ -1015,13 +1015,28 @@ class RTC_EXPORT PeerConnectionInterface : public rtc::RefCountInterface { virtual bool RemoveIceCandidates( const std::vector& candidates) = 0; + // 0 <= min <= current <= max should hold for set parameters. + struct BitrateParameters { + BitrateParameters(); + ~BitrateParameters(); + + absl::optional min_bitrate_bps; + absl::optional current_bitrate_bps; + absl::optional max_bitrate_bps; + }; + // SetBitrate limits the bandwidth allocated for all RTP streams sent by // this PeerConnection. Other limitations might affect these limits and // are respected (for example "b=AS" in SDP). // // Setting |current_bitrate_bps| will reset the current bitrate estimate // to the provided value. - virtual RTCError SetBitrate(const BitrateSettings& bitrate) = 0; + virtual RTCError SetBitrate(const BitrateSettings& bitrate); + + // TODO(nisse): Deprecated - use version above. These two default + // implementations require subclasses to implement one or the other + // of the methods. + virtual RTCError SetBitrate(const BitrateParameters& bitrate_parameters); // Enable/disable playout of received audio streams. Enabled by default. Note // that even if playout is enabled, streams will only be played out if the diff --git a/api/test/compile_all_headers.cc b/api/test/compile_all_headers.cc index 4cece5b286..44b9b1fe68 100644 --- a/api/test/compile_all_headers.cc +++ b/api/test/compile_all_headers.cc @@ -27,7 +27,6 @@ // "api/test/videocodec_test_fixture.h" // "api/test/videocodec_test_stats.h" -#include "api/test/dummy_peer_connection.h" #include "api/test/fake_frame_decryptor.h" #include "api/test/fake_frame_encryptor.h" #include "api/test/mock_audio_mixer.h" diff --git a/api/test/dummy_peer_connection.h b/api/test/dummy_peer_connection.h index 97a97d0c81..102b0684c0 100644 --- a/api/test/dummy_peer_connection.h +++ b/api/test/dummy_peer_connection.h @@ -194,6 +194,10 @@ class DummyPeerConnection : public PeerConnectionInterface { return RTCError(RTCErrorType::UNSUPPORTED_OPERATION, "Not implemented"); } + RTCError SetBitrate(const BitrateParameters& bitrate_parameters) override { + return RTCError(RTCErrorType::UNSUPPORTED_OPERATION, "Not implemented"); + } + void SetAudioPlayout(bool playout) override { FATAL() << "Not implemented"; } void SetAudioRecording(bool recording) override { FATAL() << "Not implemented"; diff --git a/api/test/mock_peerconnectioninterface.h b/api/test/mock_peerconnectioninterface.h index be34df0b32..6b247b7cee 100644 --- a/api/test/mock_peerconnectioninterface.h +++ b/api/test/mock_peerconnectioninterface.h @@ -167,6 +167,7 @@ class MockPeerConnectionInterface (const std::vector&), (override)); MOCK_METHOD(RTCError, SetBitrate, (const BitrateSettings&), (override)); + MOCK_METHOD(RTCError, SetBitrate, (const BitrateParameters&), (override)); MOCK_METHOD(void, SetAudioPlayout, (bool), (override)); MOCK_METHOD(void, SetAudioRecording, (bool), (override)); MOCK_METHOD(rtc::scoped_refptr, diff --git a/api/test/peerconnection_quality_test_fixture.h b/api/test/peerconnection_quality_test_fixture.h index f370478956..6dc119fb24 100644 --- a/api/test/peerconnection_quality_test_fixture.h +++ b/api/test/peerconnection_quality_test_fixture.h @@ -40,6 +40,7 @@ #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" #include "media/base/media_constants.h" +#include "rtc_base/deprecation.h" #include "rtc_base/network.h" #include "rtc_base/rtc_certificate_generator.h" #include "rtc_base/ssl_certificate.h" @@ -335,6 +336,9 @@ class PeerConnectionE2EQualityTestFixture { // applied to all summed RTP streams for this peer. virtual PeerConfigurer* SetBitrateSettings( BitrateSettings bitrate_settings) = 0; + RTC_DEPRECATED + virtual PeerConfigurer* SetBitrateParameters( + PeerConnectionInterface::BitrateParameters bitrate_params) = 0; }; // Contains configuration for echo emulator. diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc index 901e5c572c..9251511747 100644 --- a/pc/peer_connection_interface_unittest.cc +++ b/pc/peer_connection_interface_unittest.cc @@ -3615,44 +3615,44 @@ TEST_P(PeerConnectionInterfaceTest, TEST_P(PeerConnectionInterfaceTest, SetBitrateWithoutMinSucceeds) { CreatePeerConnection(); - BitrateSettings bitrate; - bitrate.start_bitrate_bps = 100000; + PeerConnectionInterface::BitrateParameters bitrate; + bitrate.current_bitrate_bps = 100000; EXPECT_TRUE(pc_->SetBitrate(bitrate).ok()); } TEST_P(PeerConnectionInterfaceTest, SetBitrateNegativeMinFails) { CreatePeerConnection(); - BitrateSettings bitrate; + PeerConnectionInterface::BitrateParameters bitrate; bitrate.min_bitrate_bps = -1; EXPECT_FALSE(pc_->SetBitrate(bitrate).ok()); } TEST_P(PeerConnectionInterfaceTest, SetBitrateCurrentLessThanMinFails) { CreatePeerConnection(); - BitrateSettings bitrate; + PeerConnectionInterface::BitrateParameters bitrate; bitrate.min_bitrate_bps = 5; - bitrate.start_bitrate_bps = 3; + bitrate.current_bitrate_bps = 3; EXPECT_FALSE(pc_->SetBitrate(bitrate).ok()); } TEST_P(PeerConnectionInterfaceTest, SetBitrateCurrentNegativeFails) { CreatePeerConnection(); - BitrateSettings bitrate; - bitrate.start_bitrate_bps = -1; + PeerConnectionInterface::BitrateParameters bitrate; + bitrate.current_bitrate_bps = -1; EXPECT_FALSE(pc_->SetBitrate(bitrate).ok()); } TEST_P(PeerConnectionInterfaceTest, SetBitrateMaxLessThanCurrentFails) { CreatePeerConnection(); - BitrateSettings bitrate; - bitrate.start_bitrate_bps = 10; + PeerConnectionInterface::BitrateParameters bitrate; + bitrate.current_bitrate_bps = 10; bitrate.max_bitrate_bps = 8; EXPECT_FALSE(pc_->SetBitrate(bitrate).ok()); } TEST_P(PeerConnectionInterfaceTest, SetBitrateMaxLessThanMinFails) { CreatePeerConnection(); - BitrateSettings bitrate; + PeerConnectionInterface::BitrateParameters bitrate; bitrate.min_bitrate_bps = 10; bitrate.max_bitrate_bps = 8; EXPECT_FALSE(pc_->SetBitrate(bitrate).ok()); @@ -3660,7 +3660,7 @@ TEST_P(PeerConnectionInterfaceTest, SetBitrateMaxLessThanMinFails) { TEST_P(PeerConnectionInterfaceTest, SetBitrateMaxNegativeFails) { CreatePeerConnection(); - BitrateSettings bitrate; + PeerConnectionInterface::BitrateParameters bitrate; bitrate.max_bitrate_bps = -1; EXPECT_FALSE(pc_->SetBitrate(bitrate).ok()); } @@ -3671,8 +3671,8 @@ TEST_P(PeerConnectionInterfaceTest, SetBitrateMaxNegativeFails) { // be clamped succeeds. TEST_P(PeerConnectionInterfaceTest, SetBitrateCurrentLessThanImplicitMin) { CreatePeerConnection(); - BitrateSettings bitrate; - bitrate.start_bitrate_bps = 1; + PeerConnectionInterface::BitrateParameters bitrate; + bitrate.current_bitrate_bps = 1; EXPECT_TRUE(pc_->SetBitrate(bitrate).ok()); } diff --git a/sdk/android/src/jni/pc/peer_connection.cc b/sdk/android/src/jni/pc/peer_connection.cc index 9cebda3813..05e940ee80 100644 --- a/sdk/android/src/jni/pc/peer_connection.cc +++ b/sdk/android/src/jni/pc/peer_connection.cc @@ -758,9 +758,9 @@ static jboolean JNI_PeerConnection_SetBitrate( const JavaParamRef& j_min, const JavaParamRef& j_current, const JavaParamRef& j_max) { - BitrateSettings params; + PeerConnectionInterface::BitrateParameters params; params.min_bitrate_bps = JavaToNativeOptionalInt(jni, j_min); - params.start_bitrate_bps = JavaToNativeOptionalInt(jni, j_current); + params.current_bitrate_bps = JavaToNativeOptionalInt(jni, j_current); params.max_bitrate_bps = JavaToNativeOptionalInt(jni, j_max); return ExtractNativePC(jni, j_pc)->SetBitrate(params).ok(); } diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection.mm b/sdk/objc/api/peerconnection/RTCPeerConnection.mm index 42a43a79cd..9e561fc65f 100644 --- a/sdk/objc/api/peerconnection/RTCPeerConnection.mm +++ b/sdk/objc/api/peerconnection/RTCPeerConnection.mm @@ -558,12 +558,12 @@ void PeerConnectionDelegateAdapter::OnRemoveTrack( - (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps currentBitrateBps:(nullable NSNumber *)currentBitrateBps maxBitrateBps:(nullable NSNumber *)maxBitrateBps { - webrtc::BitrateSettings params; + webrtc::PeerConnectionInterface::BitrateParameters params; if (minBitrateBps != nil) { params.min_bitrate_bps = absl::optional(minBitrateBps.intValue); } if (currentBitrateBps != nil) { - params.start_bitrate_bps = absl::optional(currentBitrateBps.intValue); + params.current_bitrate_bps = absl::optional(currentBitrateBps.intValue); } if (maxBitrateBps != nil) { params.max_bitrate_bps = absl::optional(maxBitrateBps.intValue); diff --git a/test/pc/e2e/peer_configurer.h b/test/pc/e2e/peer_configurer.h index 422d3d7341..7da547bdc3 100644 --- a/test/pc/e2e/peer_configurer.h +++ b/test/pc/e2e/peer_configurer.h @@ -163,6 +163,14 @@ class PeerConfigurerImpl final params_->rtc_configuration = std::move(configuration); return this; } + PeerConfigurer* SetBitrateParameters( + PeerConnectionInterface::BitrateParameters bitrate_params) override { + BitrateSettings bitrate_settings; + bitrate_settings.min_bitrate_bps = bitrate_params.min_bitrate_bps; + bitrate_settings.start_bitrate_bps = bitrate_params.current_bitrate_bps; + bitrate_settings.max_bitrate_bps = bitrate_params.max_bitrate_bps; + return SetBitrateSettings(bitrate_settings); + } PeerConfigurer* SetBitrateSettings( BitrateSettings bitrate_settings) override { params_->bitrate_settings = bitrate_settings;