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 2017/08/14 02:25:10 UTC

openmeetings git commit: [OPENMEETINGS-1644] av client is enhanced

Repository: openmeetings
Updated Branches:
  refs/heads/master 68e54afc4 -> 9445be321


[OPENMEETINGS-1644] av client is enhanced


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/9445be32
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/9445be32
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/9445be32

Branch: refs/heads/master
Commit: 9445be321f8ae4682a0e8eb1ebf7c8b2df46529f
Parents: 68e54af
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Sun Aug 13 21:12:46 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Sun Aug 13 21:12:46 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/db/entity/basic/Client.java    | 15 +++++----
 openmeetings-flash/src/main/flex/main.mxml      | 33 ++++++++++++--------
 .../flex/org/apache/openmeetings/OmVideo.as     |  7 ++---
 .../apache/openmeetings/web/room/RoomPanel.java | 14 ++++-----
 .../org/apache/openmeetings/web/room/room.js    | 30 ++++++++++++++----
 .../openmeetings/web/room/wb/WbPanel.html       |  2 +-
 6 files changed, 64 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/9445be32/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
index bb8907b..92d1504 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
@@ -295,15 +295,18 @@ public class Client implements IClient {
 		return this;
 	}
 
-	public void addStream(String uid, String streamId, String broadcastId, Type type) {
-		streams.add(new Stream(uid, streamId, broadcastId, type));
+	public Client addStream(String uid, String streamId, String broadcastId, Type type) {
+		if (broadcastId != null) {
+			streams.add(new Stream(uid, streamId, broadcastId, type));
+		}
+		return this;
 	}
 
-	public void removeStream(String broadcastId) {
-		if (broadcastId == null) {
-			return;
+	public Client removeStream(String broadcastId) {
+		if (broadcastId != null) {
+			streams.remove(new Stream(null, null, broadcastId, Type.video));
 		}
-		streams.remove(new Stream(null, null, broadcastId, Type.video));
+		return this;
 	}
 
 	public List<Stream> getStreams() {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/9445be32/openmeetings-flash/src/main/flex/main.mxml
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/flex/main.mxml b/openmeetings-flash/src/main/flex/main.mxml
index 5e906a7..6c8aee2 100644
--- a/openmeetings-flash/src/main/flex/main.mxml
+++ b/openmeetings-flash/src/main/flex/main.mxml
@@ -45,6 +45,7 @@
 		private var video:OmVideo;
 		private var recName:String;
 		private var mic:Microphone = null;
+		private var activities:Array = [];
 		[Bindable]
 		private var interview:Boolean = false;
 
@@ -76,9 +77,9 @@
 			echoPath = getIntParam(params.echoPath, 128);
 			micRate = getIntParam(params.micRate, 22);
 			video = new OmVideo(videoDisplay, params);
+			activities = params.av == null ? [] : params.av.split(',');
 			switch (params.mode) {
-				case 'settings':
-				{
+				case 'settings': {
 					ExternalInterface.addCallback("getDevices", function ():Object {
 						return {
 							cams: Camera.names
@@ -113,25 +114,26 @@
 					ExternalInterface.call("VideoSettings.initSwf");
 				}
 					break;
-				case OmVideo.BROADCAST:
-				{
+				case OmVideo.BROADCAST: {
 					selectedCam = params.cam;
 					selectedMic = params.mic;
 					video.resize(Math.max(300, params.width), Math.max(200, params.height));
-					attachCamera(function():void {
+					ExternalInterface.addCallback("update", function (c:Object):void {
+						debug("Client updated: ", c);
+					});
+					attachCamera(function ():void {
 						video.resize(params.width, params.height);
 						video.reset();
-						var cam:Camera = getCam();
-						video.attachCamera(cam);
 						var broadcastId:String = UIDUtil.createUID();
 						debug("BroadcastId = " + broadcastId);
-						video.broadcast(broadcastId, cam, getMic());
+						video.broadcast(broadcastId
+								, activities.indexOf('broadcastV') > -1 ? getCam() : null
+								, activities.indexOf('broadcastA') > -1 ? getMic() : null);
 						ExternalInterface.call("VideoManager.resetSize", params.uid);
 					});
 				}
 					break;
-				case OmVideo.PLAY:
-				{
+				case OmVideo.PLAY: {
 					video.resize(params.width, params.height);
 					video.play(params.broadcastId); // TODO audio/video
 				}
@@ -207,7 +209,7 @@
 			}
 			debug("Camera selected:: " + selectedCam);
 			var cam:Camera = getCam();
-			debug("Camera selected:: " + cam, cam.muted);
+			debug("Camera selected:: " + cam, cam == null ? '' : cam.muted);
 			if (cam != null) {
 				if (cam.muted) {
 					debug("Camera Muted");
@@ -220,6 +222,7 @@
 								debug("Unable to connect to active camera.");
 								break;
 							case 'Camera.Unmuted':
+								ExternalInterface.call("VideoSettings.allowRec", true);
 								callback();
 								break;
 						}
@@ -244,16 +247,19 @@
 								debug("Unable to connect to active microphone.");
 							} else {
 								ExternalInterface.call("VideoSettings.allowRec", true);
+								callback();
 							}
 						});
+					} else {
+						callback();
 					}
 				}
 			}
 		}
 
 		private function _attachCamera(cam:Camera):void {
-			debug("_attachCamera():: muted ? " + cam.muted);
-			if (cam.muted) {
+			debug("_attachCamera():: muted ? " + (cam == null ? '' : cam.muted));
+			if (cam != null && cam.muted) {
 				debug("Unable to connect to active camera.");
 			} else {
 				try {
@@ -284,6 +290,7 @@
 		}
 
 		private function camChanged(e:Event):void {
+			debug("camChanged");
 			attachCamera(settingsCameraCallback);
 		}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/9445be32/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
index 86f5f12..ed4c7ee 100644
--- a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
+++ b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
@@ -136,10 +136,9 @@ public class OmVideo {
 		this.mode = mode;
 		createStream();
 
+		ns.attachCamera(cam);
+		attachCamera(cam);
 		if (cam != null) {
-			ns.attachCamera(cam);
-			attachCamera(cam);
-
 			var videoStreamSettings:VideoStreamSettings = null;
 			debug("codec = " + params.videoCodec);
 			if (params.videoCodec === CODEC_H264) {
@@ -155,8 +154,8 @@ public class OmVideo {
 			videoStreamSettings.setMode(cam.width, cam.height, cam.fps);
 			ns.videoStreamSettings = videoStreamSettings;
 		}
+		ns.attachAudio(mic);
 		if (mic != null) {
-			ns.attachAudio(mic);
 			//FIXME !!! no mute !!! muteMicro(this.micMuted);
 		}
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/9445be32/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 7fd3115..50af2a2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.room;
 
+import static org.apache.openmeetings.core.util.RoomHelper.videoJson;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.Application.addUserToRoom;
 import static org.apache.openmeetings.web.app.Application.exitRoom;
@@ -40,7 +41,6 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
 
-import org.apache.openmeetings.core.util.RoomHelper;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
@@ -208,7 +208,7 @@ public class RoomPanel extends BasePanel {
 		for (Client c: getRoomClients(getRoom().getId()) ) {
 			boolean self = getClient().getUid().equals(c.getUid());
 			for (Client.Stream s : c.getStreams()) {
-				JSONObject jo = RoomHelper.videoJson(c, self, c.getSid(), getBean(ISessionManager.class), s.getUid());
+				JSONObject jo = videoJson(c, self, c.getSid(), getBean(ISessionManager.class), s.getUid());
 				sb.append(String.format("VideoManager.play(%s);", jo));
 			}
 		}
@@ -417,7 +417,7 @@ public class RoomPanel extends BasePanel {
 							}
 							handler.appendJavaScript(String.format("VideoManager.close('%s', true);", obj.getString("uid")));
 							sharingUser = null;
-							c.remove(Client.Activity.share);
+							update(c.remove(Client.Activity.share));
 							menu.update(handler);
 						}
 						break;
@@ -430,7 +430,7 @@ public class RoomPanel extends BasePanel {
 								return;
 							}
 							sharingUser = uid;
-							c.set(Client.Activity.share);
+							update(c.set(Client.Activity.share));
 							menu.update(handler);
 						}
 						break;
@@ -469,11 +469,11 @@ public class RoomPanel extends BasePanel {
 						String broadcastId = obj.getString("streamName");
 						String streamId = obj.getString("streamId");
 						if (!self) {
-							JSONObject jo = RoomHelper.videoJson(c, self, _c.getSid(), getBean(ISessionManager.class), uid);
+							JSONObject jo = videoJson(c, self, _c.getSid(), getBean(ISessionManager.class), uid);
 							handler.appendJavaScript(String.format("VideoManager.play(%s);", jo));
 						}
 						if (_c.getSid().equals(c.getSid())) {
-							c.addStream(uid, streamId, broadcastId, type);
+							update(c.addStream(uid, streamId, broadcastId, type));
 						}
 					}
 						break;
@@ -486,7 +486,7 @@ public class RoomPanel extends BasePanel {
 							return;
 						}
 						if (getClient().getUid().equals(c.getUid())) {
-							c.removeStream(obj.optString("broadcastId"));
+							update(c.removeStream(obj.optString("broadcastId")));
 						}
 						handler.appendJavaScript(String.format("VideoManager.close('%s');", obj.getString("uid")));
 					}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/9445be32/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
index 6d3e3d7..7125f6a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
@@ -24,12 +24,23 @@ var VideoUtil = (function() {
 	function _isSharing(c) {
 		return 'sharing' === c.type && c.screenActivities.indexOf('sharing') > -1;
 	}
+	function _isSharing(c) {
+		return 'sharing' === c.type && c.screenActivities.indexOf('sharing') > -1;
+	}
+	function _hasAudio(c) {
+		return c.activities.indexOf('broadcastA') > -1;
+	}
+	function _hasVideo(c) {
+		return c.activities.indexOf('broadcastV') > -1;
+	}
 	self.getVid = _getVid;
 	self.isSharing = _isSharing;
+	self.hasAudio = _hasAudio;
+	self.hasVideo = _hasVideo;
 	return self;
 })();
 var Video = (function() {
-	var self = {}, c, box, v, vc, t, swf, size;
+	var self = {}, c, box, v, vc, t, swf, size, vol;
 
 	function _getName() {
 		return c.user.firstName + ' ' + c.user.lastName;
@@ -79,7 +90,7 @@ var Video = (function() {
 		if (!VideoUtil.isSharing(c)) {
 			v.parent().find('.ui-dialog-titlebar-buttonpane').append($('#video-volume-btn').children().clone());
 			var volume = v.parent().find('.dropdown-menu.video.volume');
-			v.parent().find('.ui-dialog-titlebar-volume').click(function(e) {
+			vol = v.parent().find('.ui-dialog-titlebar-volume').click(function(e) {
 				e.stopImmediatePropagation();
 				volume.toggle();
 			}).dblclick(function(e) {
@@ -101,6 +112,9 @@ var Video = (function() {
 					handle.text(ui.value);
 				}
 			});
+			if (!VideoUtil.hasAudio(c)) {
+				vol.hide();
+			}
 			//TODO add mute, ADD refresh
 		}
 		vc = v.find('.video');
@@ -112,6 +126,7 @@ var Video = (function() {
 			o.mic = c.mic;
 			o.mode = 'broadcast';
 			o.uid = _uid;
+			o.av = c.activities.join();
 		} else {
 			o.mode = 'play';
 			o.uid = c.uid;
@@ -125,8 +140,13 @@ var Video = (function() {
 		swf.attr('width', _w).attr('height', _h);
 	}
 	function _update(_c) {
-		// TODO check, update video
 		c = _c;
+		if (VideoUtil.hasAudio(c)) {
+			vol.show();
+		} else {
+			vol.hide();
+		}
+		swf[0].update(c);
 	}
 
 	self.update = _update;
@@ -146,9 +166,7 @@ var VideoManager = (function() {
 	}
 	function _update(c) {
 		var _id = VideoUtil.getVid(c.uid)
-			, video = c.activities.indexOf('broadcastV') > -1
-			, audio = c.activities.indexOf('broadcastA') > -1
-			, av = audio || video
+			, av = VideoUtil.hasAudio(c) || VideoUtil.hasVideo(c)
 			, v = $('#' + _id);
 		if (av && v.length != 1 && !!c.self) {
 			Video().init(box, options.uid, c);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/9445be32/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
index cf6df77..8ebb06b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.html
@@ -103,7 +103,7 @@
 			<div wicket:message="title:79" class="ui-widget-header clickable om-icon big arrow"></div>
 			<div wicket:message="title:4" class="ui-widget-header clickable om-icon big settings"></div>
 		</div>
-		<div id="wb-tools-readonly" class="tools readonly ui-state-active vertical clear" style="position: absolute; top: 20px; right: 0px;">
+		<div id="wb-tools-readonly" class="tools readonly ui-state-active vertical clear" style="position: absolute; top: 20px; right: 20px;">
 			<div class="bumper"></div>
 			<div wicket:message="title:557" class="ui-widget-header clickable om-icon big apointer"></div>
 		</div>