From 50ab460f1d0226b32a4420badf79ee3d4a23bb82 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Thu, 14 May 2020 17:41:22 +0200 Subject: [PATCH] openvidu-server: gather all remote info from MediaEndpoint with Transaction --- .../kurento/endpoint/MediaEndpoint.java | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java index a3e26f24..0e52f441 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java @@ -17,6 +17,7 @@ package io.openvidu.server.kurento.endpoint; +import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -38,15 +39,15 @@ import org.kurento.client.MediaPipeline; import org.kurento.client.PlayerEndpoint; import org.kurento.client.RtpEndpoint; import org.kurento.client.SdpEndpoint; +import org.kurento.client.TFuture; +import org.kurento.client.Transaction; import org.kurento.client.WebRtcEndpoint; -import org.kurento.client.internal.server.KurentoServerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; -import com.google.gson.JsonNull; import com.google.gson.JsonObject; import io.openvidu.client.OpenViduException; @@ -91,8 +92,8 @@ public abstract class MediaEndpoint { private MediaPipeline pipeline = null; private ListenerSubscription endpointSubscription = null; - private final List receivedCandidateList = new LinkedList(); - private final List gatheredCandidateList = new LinkedList(); + private final List receivedCandidateList = new ArrayList(); + private final List gatheredCandidateList = new ArrayList(); private LinkedList candidates = new LinkedList(); public String selectedLocalIceCandidate; @@ -596,30 +597,41 @@ public abstract class MediaEndpoint { json.addProperty("webrtcEndpointName", this.getEndpointName()); if (!this.isPlayerEndpoint()) { try { - json.addProperty("remoteSdp", ((SdpEndpoint) this.getEndpoint()).getRemoteSessionDescriptor()); - } catch (KurentoServerException e) { - log.error("Error retrieving remote SDP for endpoint {} of stream {}: {}", this.endpointName, - this.streamId, e.getMessage()); - json.add("remoteSdp", JsonNull.INSTANCE); - } - try { - json.addProperty("localSdp", ((SdpEndpoint) this.getEndpoint()).getLocalSessionDescriptor()); - } catch (KurentoServerException e) { - log.error("Error retrieving local SDP for endpoint {} of stream {}: {}", this.endpointName, - this.streamId, e.getMessage()); - json.add("localSdp", JsonNull.INSTANCE); + Transaction tx = this.getEndpoint().getMediaPipeline().beginTransaction(); + TFuture future1 = ((SdpEndpoint) this.getEndpoint()).getRemoteSessionDescriptor(tx); + TFuture future2 = ((SdpEndpoint) this.getEndpoint()).getLocalSessionDescriptor(tx); + TFuture future3 = this.getWebEndpoint().getExternalAddress(tx); + TFuture future4 = this.getWebEndpoint().getNetworkInterfaces(tx); + TFuture future5 = this.getWebEndpoint().getStunServerAddress(tx); + TFuture future6 = this.getWebEndpoint().getStunServerPort(tx); + TFuture future7 = this.getWebEndpoint().getTurnUrl(tx); + TFuture future8 = this.getWebEndpoint().getId(tx); + tx.commit(); + + json.addProperty("externalAddress", future3.get()); + json.addProperty("networkInterfaces", future4.get()); + json.addProperty("stunServerAddress", future5.get()); + json.addProperty("stunServerPort", future6.get()); + json.addProperty("turnUrl", future7.get()); + json.addProperty("mediaObjectId", future8.get()); + json.addProperty("remoteSdp", future1.get()); + json.addProperty("localSdp", future2.get()); + + } catch (Exception e) { + log.error("Exception while getting remote information of WebRtcEndpoint {}: {} - {}", this.streamId, + e.getClass().getName(), e.getMessage()); } } Gson gson = new GsonBuilder().create(); JsonArray receivedCandidates = new JsonArray(); Iterator it1 = this.receivedCandidateList.iterator(); - while (it1.hasNext()) { + while (it1 != null && it1.hasNext()) { receivedCandidates.add(gson.toJsonTree(it1.next())); } json.add("receivedCandidates", receivedCandidates); JsonArray gatheredCandidates = new JsonArray(); Iterator it2 = this.gatheredCandidateList.iterator(); - while (it2.hasNext()) { + while (it2 != null && it2.hasNext()) { gatheredCandidates.add(gson.toJsonTree(it2.next())); } json.add("gatheredCandidates", gatheredCandidates);