diff --git a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java index ef26737baa..53184bedda 100644 --- a/webrtc/sdk/android/api/org/webrtc/PeerConnection.java +++ b/webrtc/sdk/android/api/org/webrtc/PeerConnection.java @@ -209,7 +209,9 @@ public class PeerConnection { public native void setRemoteDescription(SdpObserver observer, SessionDescription sdp); - public native boolean setConfiguration(RTCConfiguration config); + public boolean setConfiguration(RTCConfiguration config) { + return nativeSetConfiguration(config, nativeObserver); + } public boolean addIceCandidate(IceCandidate candidate) { return nativeAddIceCandidate(candidate.sdpMid, candidate.sdpMLineIndex, candidate.sdp); @@ -311,6 +313,8 @@ public class PeerConnection { private static native void freeObserver(long nativeObserver); + public native boolean nativeSetConfiguration(RTCConfiguration config, long nativeObserver); + private native boolean nativeAddIceCandidate( String sdpMid, int sdpMLineIndex, String iceCandidateSdp); diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc index 017619fb6c..43daae1266 100644 --- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc +++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc @@ -1810,8 +1810,9 @@ JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnection)( PCOJava* observer = reinterpret_cast(observer_p); observer->SetConstraints(new ConstraintsWrapper(jni, j_constraints)); - rtc::scoped_refptr pc(f->CreatePeerConnection( - rtc_config, observer->constraints(), NULL, NULL, observer)); + CopyConstraintsIntoRtcConfiguration(observer->constraints(), &rtc_config); + rtc::scoped_refptr pc( + f->CreatePeerConnection(rtc_config, nullptr, nullptr, observer)); return (jlong)pc.release(); } @@ -1926,11 +1927,15 @@ JOW(void, PeerConnection_setRemoteDescription)( observer, JavaSdpToNativeSdp(jni, j_sdp)); } -JOW(jboolean, PeerConnection_setConfiguration)( - JNIEnv* jni, jobject j_pc, jobject j_rtc_config) { +JOW(jboolean, PeerConnection_nativeSetConfiguration)( + JNIEnv* jni, jobject j_pc, jobject j_rtc_config, jlong native_observer) { + // Need to merge constraints into RTCConfiguration again, which are stored + // in the observer object. + PCOJava* observer = reinterpret_cast(native_observer); PeerConnectionInterface::RTCConfiguration rtc_config( PeerConnectionInterface::RTCConfigurationType::kAggressive); JavaRTCConfigurationToJsepRTCConfiguration(jni, j_rtc_config, &rtc_config); + CopyConstraintsIntoRtcConfiguration(observer->constraints(), &rtc_config); return ExtractNativePC(jni, j_pc)->SetConfiguration(rtc_config); } diff --git a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm index b4a873847d..de7608c3b9 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm +++ b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm @@ -207,6 +207,7 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( NSMutableArray *_localStreams; std::unique_ptr _observer; rtc::scoped_refptr _peerConnection; + std::unique_ptr _nativeConstraints; BOOL _hasStartedRtcEventLog; } @@ -224,11 +225,11 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( } if (self = [super init]) { _observer.reset(new webrtc::PeerConnectionDelegateAdapter(self)); - std::unique_ptr nativeConstraints = - constraints.nativeConstraints; + _nativeConstraints = constraints.nativeConstraints; + CopyConstraintsIntoRtcConfiguration(_nativeConstraints.get(), + config.get()); _peerConnection = factory.nativeFactory->CreatePeerConnection(*config, - nativeConstraints.get(), nullptr, nullptr, _observer.get()); @@ -282,6 +283,8 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( if (!config) { return NO; } + CopyConstraintsIntoRtcConfiguration(_nativeConstraints.get(), + config.get()); return _peerConnection->SetConfiguration(*config); }