You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2019/03/21 05:39:44 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2035] corrrect error is displayed if broadcast can't be started

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new e06c8a3  [OPENMEETINGS-2035] corrrect error is displayed if broadcast can't be started
e06c8a3 is described below

commit e06c8a3db2c02d216d0140473601d235e30cc94d
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Mar 21 12:39:27 2019 +0700

    [OPENMEETINGS-2035] corrrect error is displayed if broadcast can't be started
---
 .../apache/openmeetings/core/remote/KStream.java   |  4 +--
 .../openmeetings/core/remote/StreamProcessor.java  | 32 +++++++++++++++-------
 2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
index 46b1c36..393e7b2 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
@@ -150,13 +150,13 @@ public class KStream extends AbstractStream {
 		final WebRtcEndpoint endpoint = getEndpointForUser(processor, sid, uid);
 		final String sdpAnswer = endpoint.processOffer(sdpOffer);
 
+		log.debug("gather candidates");
+		endpoint.gatherCandidates(); // this one might throw Exception
 		log.trace("USER {}: SdpAnswer is {}", this.uid, sdpAnswer);
 		processor.getHandler().sendClient(sid, newKurentoMsg()
 				.put("id", "videoResponse")
 				.put("uid", this.uid)
 				.put("sdpAnswer", sdpAnswer));
-		log.debug("gather candidates");
-		endpoint.gatherCandidates();
 	}
 
 	private WebRtcEndpoint getEndpointForUser(final StreamProcessor processor, String sid, String uid) {
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
index c75d3cf..c8788eb 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
@@ -23,6 +23,7 @@ import static org.apache.openmeetings.core.remote.KurentoHandler.PARAM_CANDIDATE
 import static org.apache.openmeetings.core.remote.KurentoHandler.PARAM_ICE;
 import static org.apache.openmeetings.core.remote.KurentoHandler.activityAllowed;
 import static org.apache.openmeetings.core.remote.KurentoHandler.newKurentoMsg;
+import static org.apache.openmeetings.core.remote.KurentoHandler.sendError;
 
 import java.util.List;
 import java.util.Map;
@@ -48,6 +49,7 @@ import org.apache.openmeetings.db.manager.IClientManager;
 import org.apache.openmeetings.db.util.ws.RoomMessage;
 import org.apache.openmeetings.db.util.ws.TextRoomMessage;
 import org.kurento.client.IceCandidate;
+import org.kurento.client.internal.server.KurentoServerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -95,16 +97,7 @@ public class StreamProcessor implements IStreamProcessor {
 				toggleActivity(c, Activity.valueOf(msg.getString("activity")));
 				break;
 			case "broadcastStarted":
-				sd = c.getStream(uid);
-				sender = getByUid(uid);
-				if (sender == null) {
-					KRoom room = kHandler.getRoom(c.getRoomId());
-					sender = room.join(sd);
-				}
-				sender.startBroadcast(this, sd, msg.getString("sdpOffer"));
-				if (StreamType.SCREEN == sd.getType() && sd.hasActivity(Activity.RECORD) && !isRecording(c.getRoomId())) {
-					startRecording(c);
-				}
+				handleBroadcastStarted(c, uid, msg);
 				break;
 			case "onIceCandidate":
 				sender = getByUid(uid);
@@ -164,6 +157,25 @@ public class StreamProcessor implements IStreamProcessor {
 		}
 	}
 
+	private void handleBroadcastStarted(Client c, final String uid, JSONObject msg) {
+		StreamDesc sd = c.getStream(uid);
+		KStream sender= getByUid(uid);
+		try {
+			if (sender == null) {
+				KRoom room = kHandler.getRoom(c.getRoomId());
+				sender = room.join(sd);
+			}
+			sender.startBroadcast(this, sd, msg.getString("sdpOffer"));
+			if (StreamType.SCREEN == sd.getType() && sd.hasActivity(Activity.RECORD) && !isRecording(c.getRoomId())) {
+				startRecording(c);
+			}
+		} catch (KurentoServerException e) {
+			sender.release(this);
+			sendError(c, "Failed to start broadcast: " + e.getMessage());
+			log.error("Failed to start broadcast", e);
+		}
+	}
+
 	private static boolean isBroadcasting(final Client c) {
 		return c.hasAnyActivity(Activity.AUDIO, Activity.VIDEO);
 	}