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:

committed by
WebRTC LUCI CQ

parent
1050fbca91
commit
ffbfba979f
1
AUTHORS
1
AUTHORS
@ -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>
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user