diff --git a/AUTHORS b/AUTHORS index 64488bfc62..b4d4100c6a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -53,6 +53,7 @@ James H. Brown Jan Grulich Jan Kalab Jens Nielsen +Jesús Leganés-Combarro Jiawei Ou Jie Mao Jiwon Kim diff --git a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java index 31e6e9722b..b3282a6955 100644 --- a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java +++ b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java @@ -1316,6 +1316,9 @@ public void onRenegotiationNeeded() { @Override public void onAddTrack(final RtpReceiver receiver, final MediaStream[] mediaStreams) {} + + @Override + public void onRemoveTrack(final RtpReceiver receiver) {} } // Implementation detail: handle offer creation/signaling and answer setting, diff --git a/sdk/android/api/org/webrtc/PeerConnection.java b/sdk/android/api/org/webrtc/PeerConnection.java index 38d2d38deb..67705ba3d5 100644 --- a/sdk/android/api/org/webrtc/PeerConnection.java +++ b/sdk/android/api/org/webrtc/PeerConnection.java @@ -141,7 +141,14 @@ default void onSelectedCandidatePairChanged(CandidatePairChangeEvent event) {} * Triggered when a new track is signaled by the remote peer, as a result of * setRemoteDescription. */ - @CalledByNative("Observer") void onAddTrack(RtpReceiver receiver, MediaStream[] mediaStreams); + @CalledByNative("Observer") + default void onAddTrack(RtpReceiver receiver, MediaStream[] mediaStreams){}; + + /** + * Triggered when a previously added remote track is removed by the remote + * peer, as a result of setRemoteDescription. + */ + @CalledByNative("Observer") default void onRemoveTrack(RtpReceiver receiver){}; /** * Triggered when the signaling from SetRemoteDescription indicates that a transceiver diff --git a/sdk/android/src/jni/pc/peer_connection.cc b/sdk/android/src/jni/pc/peer_connection.cc index 93c6eb3895..ca9e25cfad 100644 --- a/sdk/android/src/jni/pc/peer_connection.cc +++ b/sdk/android/src/jni/pc/peer_connection.cc @@ -410,6 +410,16 @@ void PeerConnectionObserverJni::OnAddTrack( NativeToJavaMediaStreamArray(env, streams)); } +void PeerConnectionObserverJni::OnRemoveTrack( + rtc::scoped_refptr receiver) { + JNIEnv* env = AttachCurrentThreadIfNeeded(); + ScopedJavaLocalRef j_rtp_receiver = + NativeToJavaRtpReceiver(env, receiver); + rtp_receivers_.emplace_back(env, j_rtp_receiver); + + Java_Observer_onRemoveTrack(env, j_observer_global_, j_rtp_receiver); +} + void PeerConnectionObserverJni::OnTrack( rtc::scoped_refptr transceiver) { JNIEnv* env = AttachCurrentThreadIfNeeded(); diff --git a/sdk/android/src/jni/pc/peer_connection.h b/sdk/android/src/jni/pc/peer_connection.h index a9e2af2a47..86d99f31c4 100644 --- a/sdk/android/src/jni/pc/peer_connection.h +++ b/sdk/android/src/jni/pc/peer_connection.h @@ -72,6 +72,8 @@ class PeerConnectionObserverJni : public PeerConnectionObserver { streams) override; void OnTrack( rtc::scoped_refptr transceiver) override; + void OnRemoveTrack( + rtc::scoped_refptr receiver) override; private: typedef std::map