Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(908)

Unified Diff: talk/app/webrtc/java/src/org/webrtc/PeerConnection.java

Issue 1351803002: Exposing RtpSenders and RtpReceivers from PeerConnection. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing indentation. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: talk/app/webrtc/java/src/org/webrtc/PeerConnection.java
diff --git a/talk/app/webrtc/java/src/org/webrtc/PeerConnection.java b/talk/app/webrtc/java/src/org/webrtc/PeerConnection.java
index 8730af96c90035f42e767f73e913f5c849ead55d..ac9009cc2222dd714340a178bde26b8de3198c9e 100644
--- a/talk/app/webrtc/java/src/org/webrtc/PeerConnection.java
+++ b/talk/app/webrtc/java/src/org/webrtc/PeerConnection.java
@@ -161,6 +161,8 @@ public class PeerConnection {
};
private final List<MediaStream> localStreams;
+ private final List<RtpSender> rtpSenders;
+ private final List<RtpReceiver> rtpReceivers;
pthatcher1 2015/09/23 14:47:39 I'd just shorten these to senders and receivers.
private final long nativePeerConnection;
private final long nativeObserver;
@@ -168,6 +170,8 @@ public class PeerConnection {
this.nativePeerConnection = nativePeerConnection;
this.nativeObserver = nativeObserver;
localStreams = new LinkedList<MediaStream>();
+ rtpSenders = new LinkedList<RtpSender>();
+ rtpReceivers = new LinkedList<RtpReceiver>();
}
// JsepInterface.
@@ -184,11 +188,15 @@ public class PeerConnection {
public native void createAnswer(
SdpObserver observer, MediaConstraints constraints);
- public native void setLocalDescription(
- SdpObserver observer, SessionDescription sdp);
+ public void setLocalDescription(SdpObserver observer, SessionDescription sdp) {
+ nativeSetLocalDescription(observer, sdp);
+ updateRtpSenders();
+ }
- public native void setRemoteDescription(
- SdpObserver observer, SessionDescription sdp);
+ public void setRemoteDescription(SdpObserver observer, SessionDescription sdp) {
+ nativeSetRemoteDescription(observer, sdp);
+ updateRtpReceivers();
+ }
public native boolean updateIce(
List<IceServer> iceServers, MediaConstraints constraints);
@@ -204,12 +212,22 @@ public class PeerConnection {
return false;
}
localStreams.add(stream);
+ updateRtpSenders();
return true;
}
public void removeStream(MediaStream stream) {
nativeRemoveLocalStream(stream.nativeStream);
localStreams.remove(stream);
+ updateRtpSenders();
+ }
+
+ public List<RtpSender> getSenders() {
+ return new ArrayList<RtpSender>(rtpSenders);
+ }
+
+ public List<RtpReceiver> getReceivers() {
+ return new ArrayList<RtpReceiver>(rtpReceivers);
}
public boolean getStats(StatsObserver observer, MediaStreamTrack track) {
@@ -233,6 +251,14 @@ public class PeerConnection {
stream.dispose();
}
localStreams.clear();
+ for (RtpSender sender : rtpSenders) {
+ sender.dispose();
+ }
+ rtpSenders.clear();
+ for (RtpReceiver receiver : rtpReceivers) {
+ receiver.dispose();
+ }
+ rtpReceivers.clear();
freePeerConnection(nativePeerConnection);
freeObserver(nativeObserver);
}
@@ -241,13 +267,99 @@ public class PeerConnection {
private static native void freeObserver(long nativeObserver);
+ private void updateRtpSenders() {
+ List<RtpSender> newRtpSenders = nativeGetSenders();
+
+ // Remove obsolete senders.
+ ArrayList<RtpSender> toRemove = new ArrayList<RtpSender>();
+ for (RtpSender oldSender : rtpSenders) {
+ boolean found = false;
+ for (RtpSender newSender : newRtpSenders) {
+ if (newSender.nativeRtpSender == oldSender.nativeRtpSender) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ toRemove.add(oldSender);
+ }
+ }
+ for (RtpSender removed : toRemove) {
+ rtpSenders.remove(removed);
+ removed.dispose();
+ }
+
+ // Add new senders.
+ for (RtpSender newSender : newRtpSenders) {
+ boolean found = false;
+ for (RtpSender oldSender : rtpSenders) {
+ if (newSender.nativeRtpSender == oldSender.nativeRtpSender) {
+ found = true;
+ // Dispose of the duplicate RtpSender.
+ newSender.dispose();
+ break;
+ }
+ }
+ if (!found) {
+ rtpSenders.add(newSender);
+ }
+ }
+ }
+
+ private void updateRtpReceivers() {
+ List<RtpReceiver> newRtpReceivers = nativeGetReceivers();
+
+ // Remove obsolete receivers.
+ ArrayList<RtpReceiver> toRemove = new ArrayList<RtpReceiver>();
+ for (RtpReceiver oldReceiver : rtpReceivers) {
+ boolean found = false;
+ for (RtpReceiver newReceiver : newRtpReceivers) {
+ if (newReceiver.nativeRtpReceiver == oldReceiver.nativeRtpReceiver) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ toRemove.add(oldReceiver);
+ }
+ }
+ for (RtpReceiver removed : toRemove) {
+ rtpReceivers.remove(removed);
+ removed.dispose();
+ }
+
+ // Add new receivers.
+ for (RtpReceiver newReceiver : newRtpReceivers) {
+ boolean found = false;
+ for (RtpReceiver oldReceiver : rtpReceivers) {
+ if (newReceiver.nativeRtpReceiver == oldReceiver.nativeRtpReceiver) {
+ found = true;
+ // Dispose of the duplicate RtpReceiver.
+ newReceiver.dispose();
+ break;
+ }
+ }
+ if (!found) {
+ rtpReceivers.add(newReceiver);
+ }
+ }
pthatcher1 2015/09/23 14:47:39 It seems like a helper method called hasReceiver c
+ }
+
private native boolean nativeAddIceCandidate(
String sdpMid, int sdpMLineIndex, String iceCandidateSdp);
+ public native void nativeSetLocalDescription(SdpObserver observer, SessionDescription sdp);
+
+ public native void nativeSetRemoteDescription(SdpObserver observer, SessionDescription sdp);
+
private native boolean nativeAddLocalStream(long nativeStream);
private native void nativeRemoveLocalStream(long nativeStream);
private native boolean nativeGetStats(
StatsObserver observer, long nativeTrack);
+
+ private native List<RtpSender> nativeGetSenders();
+
+ private native List<RtpReceiver> nativeGetReceivers();
}

Powered by Google App Engine
This is Rietveld 408576698