Added PeerConnectionObserverJni::OnRemoveTrack()

Change-Id: I0880caa77a1097f56c560152e85c9ca29242f825

This PR add support for the `PeerConnectionObserverJni::OnRemoveTrack()`
event on Java, allowing to be notified when a remote track has been
removed. It's a very thing JNI wrapper on top of C++ API, being mostly
similar to other already available events like `track` and `addTrack`.

In Javascript API, tracks are not "removed" explicitly from the
PeerConnection, but instead receiver PeerConnection gets notified that
they have been removed from the streams they are associated to, and when
no `MediaStream` object has that track, it's considered that the track
has been removed from the PeerConnection. In Java and C++ APIs there's no
`MediaStreamObserver` class, so there's no way to listen to the
`removeTrack` event the same way happens in Javascript API, but instead
C++ API has a `removeTrack` event at PeerConnection level. This patchset
just only wraps and expose this `removeTrack` event from the C++ API to
the Java API.

This PR has been sponsored by Atos Research and Innovation
(https://atos.net/en/about-us/innovation-and-research).

Bug: webrtc:12850
Change-Id: I0880caa77a1097f56c560152e85c9ca29242f825
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/218847
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Xavier Lepaul‎ <xalep@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34225}
This commit is contained in:
Jesús Leganés-Combarro 'piranna
2021-05-25 10:35:10 +02:00
committed by WebRTC LUCI CQ
parent 1050fbca91
commit ffbfba979f
5 changed files with 24 additions and 1 deletions

View File

@ -53,6 +53,7 @@ James H. Brown <jbrown@burgoyne.com>
Jan Grulich <grulja@gmail.com>
Jan Kalab <pitlicek@gmail.com>
Jens Nielsen <jens.nielsen@berotec.se>
Jesús Leganés-Combarro <piranna@gmail.com>
Jiawei Ou <jiawei.ou@gmail.com>
Jie Mao <maojie0924@gmail.com>
Jiwon Kim <jwkim0000@gmail.com>

View File

@ -1316,6 +1316,9 @@ public class PeerConnectionClient {
@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,

View File

@ -141,7 +141,14 @@ public class PeerConnection {
* 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

View File

@ -410,6 +410,16 @@ void PeerConnectionObserverJni::OnAddTrack(
NativeToJavaMediaStreamArray(env, streams));
}
void PeerConnectionObserverJni::OnRemoveTrack(
rtc::scoped_refptr<RtpReceiverInterface> receiver) {
JNIEnv* env = AttachCurrentThreadIfNeeded();
ScopedJavaLocalRef<jobject> 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<RtpTransceiverInterface> transceiver) {
JNIEnv* env = AttachCurrentThreadIfNeeded();

View File

@ -72,6 +72,8 @@ class PeerConnectionObserverJni : public PeerConnectionObserver {
streams) override;
void OnTrack(
rtc::scoped_refptr<RtpTransceiverInterface> transceiver) override;
void OnRemoveTrack(
rtc::scoped_refptr<RtpReceiverInterface> receiver) override;
private:
typedef std::map<MediaStreamInterface*, JavaMediaStream>