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 2020/04/04 12:04:20 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2195] room enter with mic-only should work better

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 ec83d0e  [OPENMEETINGS-2195] room enter with mic-only should work better
ec83d0e is described below

commit ec83d0efd339ad17707c4020d39d5490d261445a
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sat Apr 4 19:04:09 2020 +0700

    [OPENMEETINGS-2195] room enter with mic-only should work better
---
 .../openmeetings/core/remote/StreamProcessor.java  |  8 --------
 .../apache/openmeetings/web/room/raw-video-util.js | 12 +++++++++--
 .../org/apache/openmeetings/web/room/raw-video.js  | 24 ++++++++++++++++++----
 .../openmeetings/web/room/sidebar/RoomSidebar.java |  9 +++++++-
 4 files changed, 38 insertions(+), 15 deletions(-)

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 2fcd157..40ab564 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
@@ -211,14 +211,6 @@ public class StreamProcessor implements IStreamProcessor {
 	public void toggleActivity(Client c, Activity a) {
 		log.info("PARTICIPANT {}: trying to toggle activity {}", c, a);
 
-		if (!activityAllowed(c, a, c.getRoom())) {
-			if (a == Activity.AUDIO || a == Activity.AUDIO_VIDEO) {
-				c.allow(Room.Right.AUDIO);
-			}
-			if (!c.getRoom().isAudioOnly() && (a == Activity.VIDEO || a == Activity.AUDIO_VIDEO)) {
-				c.allow(Room.Right.VIDEO);
-			}
-		}
 		if (activityAllowed(c, a, c.getRoom())) {
 			boolean wasBroadcasting = isBroadcasting(c);
 			if (a == Activity.AUDIO && !c.isMicEnabled()) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
index 12b8939..f500fa9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
@@ -189,7 +189,11 @@ var VideoUtil = (function() {
 	function _cleanStream(stream) {
 		if (!!stream) {
 			stream.getTracks().forEach(function(track) {
-				track.stop();
+				try {
+					track.stop();
+				} catch(e) {
+					//no-op
+				}
 			});
 		}
 	}
@@ -206,7 +210,11 @@ var VideoUtil = (function() {
 			} catch(e) {
 				OmUtil.log('Failed to clean peer' + e);
 			}
-			peer.dispose();
+			try {
+				peer.dispose();
+			} catch(e) {
+				//no-op
+			}
 			peer = null;
 		}
 	}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
index 8d6b6a6..0a04646 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
@@ -153,6 +153,9 @@ var Video = (function() {
 			VideoUtil.addIceServers(options, msg)
 			, function (error) {
 				if (error) {
+					if (true === this.cleaned) {
+						return;
+					}
 					return OmUtil.error(error);
 				}
 				if (data.analyser) {
@@ -161,6 +164,9 @@ var Video = (function() {
 				}
 				this.generateOffer(function(error, offerSdp) {
 					if (error) {
+						if (true === this.cleaned) {
+							return;
+						}
 						return OmUtil.error('Sender sdp offer error ' + error);
 					}
 					OmUtil.log('Invoking Sender SDP offer callback function');
@@ -196,11 +202,17 @@ var Video = (function() {
 		data.rtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(
 			options
 			, function(error) {
-				if (!this.cleaned && error) {
+				if (error) {
+					if (true === this.cleaned) {
+						return;
+					}
 					return OmUtil.error(error);
 				}
 				this.generateOffer(function(error, offerSdp) {
-					if (!this.cleaned && error) {
+					if (error) {
+						if (true === this.cleaned) {
+							return;
+						}
 						return OmUtil.error('Receiver sdp offer error ' + error);
 					}
 					OmUtil.log('Invoking Receiver SDP offer callback function');
@@ -311,7 +323,9 @@ var Video = (function() {
 	}
 	function _init(msg) {
 		sd = msg.stream;
-		vol = Volume();
+		if (!vol) {
+			vol = Volume();
+		}
 		iceServers = msg.iceServers;
 		sd.activities = sd.activities.sort();
 		size = {width: sd.width, height: sd.height};
@@ -374,7 +388,9 @@ var Video = (function() {
 		}
 		const same = prevA.length === sd.activities.length && prevA.every(function(value, index) { return value === sd.activities[index]})
 		if (sd.self && !same) {
-			_refresh();
+			_cleanup();
+			v.remove();
+			_init({stream: sd, iceServers: iceServers});
 		}
 	}
 	function __createVideo(data) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
index 6fce8f2..f328010 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
+import static org.apache.openmeetings.core.remote.KurentoHandler.activityAllowed;
 import static org.apache.openmeetings.web.app.Application.kickUser;
 import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
 import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
@@ -87,7 +88,13 @@ public class RoomSidebar extends Panel {
 				if (!avInited) {
 					avInited = true;
 					if (Room.Type.CONFERENCE == room.getRoom().getType()) {
-						streamProcessor.toggleActivity(c, room.getRoom().isAudioOnly()
+						if (!activityAllowed(c, Client.Activity.AUDIO, c.getRoom())) {
+							c.allow(Room.Right.AUDIO);
+						}
+						if (!c.getRoom().isAudioOnly() && !activityAllowed(c, Client.Activity.VIDEO, c.getRoom())) {
+							c.allow(Room.Right.VIDEO);
+						}
+						streamProcessor.toggleActivity(c, c.getRoom().isAudioOnly()
 								? Client.Activity.AUDIO
 								: Client.Activity.AUDIO_VIDEO);
 					}