diff --git a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java index 4bce239001..69f4d9b7f4 100644 --- a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java +++ b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java @@ -324,6 +324,10 @@ public class PeerConnection { nativeNewGetStats(callback); } + // Limits the bandwidth allocated for all RTP streams sent by this + // PeerConnection. Pass null to leave a value unchanged. + public native boolean setBitrate(Integer min, Integer current, Integer max); + // Starts recording an RTC event log. Ownership of the file is transfered to // the native code. If an RTC event log is already being recorded, it will be // stopped and a new one will start using the provided file. Logging will diff --git a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java index 0136ad1b25..699c7de205 100644 --- a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java +++ b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/PeerConnectionTest.java @@ -815,6 +815,10 @@ public class PeerConnectionTest { answeringExpectations.dataChannel.close(); offeringExpectations.dataChannel.close(); + // Test SetBitrate. + assertTrue(offeringPC.setBitrate(100000, 5000000, 500000000)); + assertFalse(offeringPC.setBitrate(3, 2, 1)); + // Free the Java-land objects and collect them. shutdownPC(offeringPC, offeringExpectations); offeringPC = null; diff --git a/webrtc/sdk/android/src/jni/pc/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/pc/peerconnection_jni.cc index 3c1724b514..5172df2077 100644 --- a/webrtc/sdk/android/src/jni/pc/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/pc/peerconnection_jni.cc @@ -286,6 +286,26 @@ JOW(void, PeerConnection_nativeNewGetStats) ExtractNativePC(jni, j_pc)->GetStats(callback); } +JOW(jboolean, PeerConnection_setBitrate) +(JNIEnv* jni, jobject j_pc, jobject j_min, jobject j_current, jobject j_max) { + webrtc::PeerConnectionInterface::BitrateParameters params; + jclass j_integer_class = jni->FindClass("java/lang/Integer"); + jmethodID int_value_id = GetMethodID(jni, j_integer_class, "intValue", "()I"); + if (!IsNull(jni, j_min)) { + int min_value = jni->CallIntMethod(j_min, int_value_id); + params.min_bitrate_bps = rtc::Optional(min_value); + } + if (!IsNull(jni, j_current)) { + int current_value = jni->CallIntMethod(j_current, int_value_id); + params.current_bitrate_bps = rtc::Optional(current_value); + } + if (!IsNull(jni, j_max)) { + int max_value = jni->CallIntMethod(j_max, int_value_id); + params.max_bitrate_bps = rtc::Optional(max_value); + } + return ExtractNativePC(jni, j_pc)->SetBitrate(params).ok(); +} + JOW(bool, PeerConnection_nativeStartRtcEventLog) (JNIEnv* jni, jobject j_pc, int file_descriptor, int max_size_bytes) { return ExtractNativePC(jni, j_pc)->StartRtcEventLog(file_descriptor,