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 2018/09/30 16:57:47 UTC

[openmeetings] branch master updated: [OPENMEETINGS-1649] refresh seems to work

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 cf7aceb  [OPENMEETINGS-1649] refresh seems to work
cf7aceb is described below

commit cf7acebbc2a575e4ffed9a10c897f5ed7d7b49a9
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sun Sep 30 23:57:35 2018 +0700

    [OPENMEETINGS-1649] refresh seems to work
---
 .../apache/openmeetings/core/remote/KStream.java   | 32 +++++++++++--------
 .../openmeetings/core/remote/KurentoHandler.java   |  6 +++-
 .../apache/openmeetings/web/room/raw-settings.js   |  4 +--
 .../openmeetings/web/room/raw-video-manager.js     | 13 ++------
 .../org/apache/openmeetings/web/room/raw-video.js  | 37 +++++++---------------
 5 files changed, 40 insertions(+), 52 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 cc23bc3..71858e3 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
@@ -53,7 +53,7 @@ public class KStream implements IKStream {
 	private final String uid;
 	private final MediaPipeline pipeline;
 	private final Long roomId;
-	private final WebRtcEndpoint outgoingMedia;
+	private WebRtcEndpoint outgoingMedia;
 	private final ConcurrentMap<String, WebRtcEndpoint> incomingMedia = new ConcurrentHashMap<>();
 
 	//FIXME TODO multiple streams from client
@@ -64,6 +64,9 @@ public class KStream implements IKStream {
 		this.roomId = c.getRoomId();
 		//TODO Min/MaxVideoSendBandwidth
 		//TODO Min/Max Audio/Video RecvBandwidth
+	}
+
+	private void initOutMedia(final KurentoHandler h) {
 		outgoingMedia = createEndpoint(h, this);
 		//TODO add logic here
 		outgoingMedia.addMediaFlowOutStateChangeListener(new EventListener<MediaFlowOutStateChangeEvent>() {
@@ -71,13 +74,17 @@ public class KStream implements IKStream {
 			public void onEvent(MediaFlowOutStateChangeEvent event) {
 				log.warn("MediaFlowOutStateChange {}", event.getState());
 				if (MediaFlowState.NOT_FLOWING == event.getState()) {
-					//FIXME TODO release resources
+					outgoingMedia.release();
 				}
 			}
 		});
 	}
 
 	public KStream startBroadcast(final KurentoHandler h, final Client c, final String sdpOffer) {
+		if (outgoingMedia != null) {
+			outgoingMedia.release();
+		}
+		initOutMedia(h);
 		videoResponse(h, this, sdpOffer);
 		WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.rightUpdated, c.getUid()));
 		WebSocketHelper.sendRoomOthers(roomId, uid, newKurentoMsg()
@@ -174,6 +181,15 @@ public class KStream implements IKStream {
 		}
 	}
 
+	public void stopBroadcast() {
+		outgoingMedia.release();
+		WebSocketHelper.sendAll(newKurentoMsg()
+				.put("id", "broadcastStopped")
+				.put("uid", uid)
+				.toString()
+			);
+	}
+
 	@Override
 	public void release() {
 		log.debug("PARTICIPANT {}: Releasing resources", uid);
@@ -193,17 +209,7 @@ public class KStream implements IKStream {
 				}
 			});
 		}
-		outgoingMedia.release(new Continuation<Void>() {
-			@Override
-			public void onSuccess(Void result) throws Exception {
-				log.trace("PARTICIPANT {}: Released outgoing EP", KStream.this.uid);
-			}
-
-			@Override
-			public void onError(Throwable cause) throws Exception {
-				log.warn("USER {}: Could not release outgoing EP", KStream.this.uid);
-			}
-		});
+		outgoingMedia.release();
 	}
 
 	public void addCandidate(IceCandidate candidate, String name) {
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index eac2458..0b78bbd 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -291,7 +291,11 @@ public class KurentoHandler {
 			c.toggle(a);
 			if (!isBroadcasting(c)) {
 				//close
-				leaveRoom(cm.update(c.removeStream(c.getUid())));
+				KStream s = getByUid(c.getUid());
+				if (s != null) {
+					cm.update(c.removeStream(c.getUid()));
+					s.stopBroadcast();
+				}
 				WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.rightUpdated, c.getUid()));
 				//FIXME TODO update interview buttons
 			} else if (!broadcasting) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
index 75bcd12..07aaf61 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
@@ -87,8 +87,8 @@ var VideoSettings = (function() {
 		if (typeof(avSettings) === 'function') {
 			avSettings(_s);
 		}
-		if (refr && typeof(VideoManager) !== 'undefined' && o.uid) {
-			VideoManager.refresh(o.uid, s.video);
+		if (refr && typeof(VideoManager) === 'object' && o.uid) {
+			VideoManager.refresh(o.uid);
 		}
 	}
 	function _clear(_ms) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
index 556693b..826e47f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
@@ -120,21 +120,13 @@ var VideoManager = (function() {
 			const cl = JSON.parse(JSON.stringify(c)), s = c.streams[i];
 			delete cl.streams;
 			$.extend(cl, s);
-			if (cl.self && VideoUtil.isSharing(cl) || VideoUtil.isRecording(cl)) {
+			if (cl.self && (VideoUtil.isSharing(cl) || VideoUtil.isRecording(cl))) {
 				continue;
 			}
 			const _id = VideoUtil.getVid(cl.uid)
 				, av = VideoUtil.hasAudio(cl) || VideoUtil.hasVideo(cl)
 				, v = $('#' + _id);
-			if (av && v.length !== 1 && !!cl.self) {
-				/**** FIXME TODO LETS reduce round-trips
-				self.sendMessage({
-					id: 'joinRoom' //TODO stream uid
-				});
-
-				Video().init(cl, VideoUtil.getPos(VideoUtil.getRects(VID_SEL), cl.width, cl.height + 25));
-				******/
-			} else if (av && v.length === 1) {
+			if (av && v.length === 1) {
 				v.data().update(cl);
 			} else if (!av && v.length === 1) {
 				_closeV(v);
@@ -148,7 +140,6 @@ var VideoManager = (function() {
 				const w = $(windows[i]);
 				w.data().setRights(c.rights);
 			}
-
 		}
 		if (c.streams.length === 0) {
 			// check for non inited video window
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 8d01743..1b9c362 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
@@ -265,31 +265,11 @@ var Video = (function() {
 		v.on("remove", _cleanup);
 		vc = v.find('.video');
 		vc.width(_w).height(_h);
-		//broadcast
-		const o = Room.getOptions();
-		if (c.self) {
-			o.cam = c.cam;
-			o.mic = c.mic;
-			o.mode = 'broadcast';
-		} else {
-			o.mode = 'play';
-		}
-		o.av = c.activities.join();
-		o.rights = o.rights.join();
-		o.width = c.width;
-		o.height = c.height;
-		o.sid = c.sid;
-		o.uid = c.uid;
-		o.cuid = c.cuid;
-		o.userId = c.user.id;
-		o.broadcastId = c.broadcastId;
-		o.type = c.type;
-		delete o.keycode;
 
 		const hasVideo = VideoUtil.hasVideo(c)
-			, imgUrl = 'profile/' + o.userId + '?anti=' + new Date().getTime();  //TODO add normal URL ????
+			, imgUrl = 'profile/' + c.user.id + '?anti=' + new Date().getTime();  //TODO add normal URL ????
 		video = $(hasVideo ? '<video>' : '<audio>').attr('id', 'vid' + _id)
-			.width(o.width).height(o.height)
+			.width(c.width).height(c.height)
 			.prop('autoplay', true).prop('controls', false);
 		if (hasVideo) {
 			video.attr('poster', imgUrl);
@@ -328,7 +308,9 @@ var Video = (function() {
 		const name = _getName();
 		v.dialog('option', 'title', name).parent().find('.ui-dialog-titlebar').attr('title', name);
 	}
-	function _refresh(_opts) {
+	function _refresh() {
+		_cleanup();
+		_createSendPeer();
 	}
 	function _setRights(_r) {
 	}
@@ -349,8 +331,13 @@ var Video = (function() {
 			aCtx.close();
 			aCtx = null;
 		}
-		_micActivity(0);
-		lm.hide();
+		if (video.length > 0) {
+			video[0].srcObject = null;
+		}
+		if (!!lm && lm.length > 0) {
+			_micActivity(0);
+			lm.hide();
+		}
 		if (!!level) {
 			level.dispose();
 			level = null;