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 dbf9e20 [OPENMEETINGS-1352] stop sharing seems to work
dbf9e20 is described below
commit dbf9e20ab2bee53b2c463de282cf6cbe4716bc88
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Fri Oct 26 22:03:40 2018 +0700
[OPENMEETINGS-1352] stop sharing seems to work
---
.../apache/openmeetings/core/remote/KStream.java | 11 ++++-
.../openmeetings/core/remote/KurentoHandler.java | 29 ++++++++++++-
.../openmeetings/db/entity/basic/Client.java | 5 +--
.../org/apache/openmeetings/web/room/raw-sharer.js | 50 +++++++++++++++-------
.../openmeetings/web/room/raw-video-manager.js | 4 +-
.../org/apache/openmeetings/web/room/raw-video.js | 7 ++-
6 files changed, 81 insertions(+), 25 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 5d498e6..1bc11f0 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
@@ -40,6 +40,7 @@ import org.apache.openmeetings.db.util.ws.RoomMessage;
import org.apache.openmeetings.db.util.ws.TextRoomMessage;
import org.kurento.client.Continuation;
import org.kurento.client.IceCandidate;
+import org.kurento.client.MediaFlowState;
import org.kurento.client.MediaProfileSpecType;
import org.kurento.client.MediaType;
import org.kurento.client.RecorderEndpoint;
@@ -112,7 +113,15 @@ public class KStream implements IKStream {
log.warn("Media stream terminated");
});
outgoingMedia.addMediaFlowOutStateChangeListener(evt -> {
- log.warn("Media FlowOut :: {}", evt.getState());
+ if (MediaFlowState.NOT_FLOWING == evt.getState()) {
+ log.warn("Media FlowOut :: {}", evt.getState());
+ if (StreamType.SCREEN == sd.getType()) {
+ h.stopSharing(sid, uid);
+ } else {
+ //TODO remove stream ?
+ }
+ stopBroadcast(h);
+ }
});
outgoingMedia.addMediaFlowInStateChangeListener(evt -> {
log.warn("Media FlowIn :: {}", evt);
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 6e0355d..a07ffcb 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
@@ -235,6 +235,7 @@ public class KurentoHandler {
return;
}
KStream sender;
+ StreamDesc sd;
log.debug("Incoming message from user with ID '{}':
{}", c.getUserId(), msg);
switch (cmdId) {
case "devicesAltered":
@@ -251,7 +252,7 @@ public class KurentoHandler {
toggleActivity(c,
Activity.valueOf(msg.getString("activity")));
break;
case "broadcastStarted":
- StreamDesc sd = c.getStream(uid);
+ sd = c.getStream(uid);
sender = getByUid(uid);
if (sender == null) {
KRoom room =
getRoom(c.getRoomId());
@@ -281,6 +282,13 @@ public class KurentoHandler {
startSharing(c, msg);
}
break;
+ case "stopSharing":
+ sender = getByUid(uid);
+ sd = stopSharing(c.getSid(), uid);
+ if (sender != null && sd != null) {
+ sender.stopBroadcast(this);
+ }
+ break;
}
}
}
@@ -425,7 +433,24 @@ public class KurentoHandler {
}
private void startSharing(Client c, JSONObject msg) {
- getRoom(c.getRoomId()).startSharing(this, cm, c, msg);
+ if (c.getRoomId() != null) {
+ getRoom(c.getRoomId()).startSharing(this, cm, c, msg);
+ }
+ }
+
+ StreamDesc stopSharing(String sid, String uid) {
+ StreamDesc sd = null;
+ Client c = getBySid(sid);
+ if (c.getRoomId() != null) {
+ sd = c.getStream(uid);
+ if (sd != null && StreamType.SCREEN == sd.getType()) {
+ c.removeStream(uid);
+ cm.update(c);
+ checkStreams(c.getRoomId());
+ WebSocketHelper.sendRoom(new
TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.rightUpdated, c.getUid()));
+ }
+ }
+ return sd;
}
public boolean isSharing(Long roomId) {
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 720a4f7..4c362b7 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
@@ -218,9 +218,8 @@ public class Client implements IDataProviderEntity,
IWsClient {
return sd;
}
- public Client removeStream(String _uid) {
- streams.remove(_uid);
- return this;
+ public StreamDesc removeStream(String _uid) {
+ return streams.remove(_uid);
}
public List<StreamDesc> getStreams() {
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
index c367d58..b902e76 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
@@ -1,7 +1,10 @@
/* Licensed under the Apache License, Version 2.0 (the "License")
http://www.apache.org/licenses/LICENSE-2.0 */
+var SHARE_STARTING = 'starting';
+var SHARE_STARTED = 'started';
+var SHARE_STOPED = 'stoped';
var Sharer = (function() {
const self = {};
- let sharer, type, fps, sbtn, rbtn, width, height;
+ let sharer, type, fps, sbtn, rbtn, width, height, shareState =
SHARE_STOPED;
function _init() {
sharer = $('#sharer').dialog({
@@ -22,29 +25,46 @@ var Sharer = (function() {
width = sharer.find('.width');
height = sharer.find('.height');
sbtn.click(function() {
- _setShareState(true);
- VideoManager.sendMessage({
- id: 'wannaShare'
- , shareType: type.val()
- , fps: fps.val()
- , width: width.val()
- , height: height.val()
- });
+ if (shareState === SHARE_STOPED) {
+ _setShareState(SHARE_STARTING);
+ VideoManager.sendMessage({
+ id: 'wannaShare'
+ , shareType: type.val()
+ , fps: fps.val()
+ , width: width.val()
+ , height: height.val()
+ });
+ } else {
+ const cuid = Room.getOptions().uid
+ , v = $('div[data-client-uid="' + cuid
+ '"][data-client-type="SCREEN"]')
+ , uid = v.data().stream().uid;
+ VideoManager.sendMessage({
+ id: 'stopSharing'
+ , uid: uid
+ });
+ VideoManager.close(uid, false);
+ _setShareState(SHARE_STOPED);
+ }
});
rbtn = sharer.find('.record-start-stop').button({
icon: 'ui-icon-bullet'
});
}
function _setShareState(state) {
- type.selectmenu('option', 'disabled', state ||
VideoUtil.isEdge());
- fps.selectmenu('option', 'disabled', state ||
VideoUtil.isEdge());
- width.prop('disabled', state);
- height.prop('disabled', state);
- sbtn.button('option', 'icon', state ? 'ui-icon-stop' :
'ui-icon-image');
- if (state) {
+ shareState = state;
+ const dis = SHARE_STOPED !== state;
+ type.selectmenu('option', 'disabled', dis ||
VideoUtil.isEdge());
+ fps.selectmenu('option', 'disabled', dis || VideoUtil.isEdge());
+ width.prop('disabled', dis);
+ height.prop('disabled', dis);
+ sbtn.text(sbtn.data(dis ? 'stop' : 'start'));
+ sbtn.button('option', 'icon', dis ? 'ui-icon-stop' :
'ui-icon-image');
+ if (state === SHARE_STARTING) {
sbtn.button('disable');
+ rbtn.button('disable');
} else {
sbtn.button('enable');
+ rbtn.button('enable');
}
}
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 09663f5..89036c4 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
@@ -50,7 +50,7 @@ var VideoManager = (function() {
}
break;
case 'broadcastStopped':
- _closeV($('#' +
VideoUtil.getVid(m.uid)));
+ _close(m.uid, false);
break;
case 'broadcast':
_onBroadcast(m);
@@ -168,7 +168,7 @@ var VideoManager = (function() {
});
}
function _close(uid, showShareBtn) {
- const _id = VideoUtil.getVid(uid), v = $('#' + _id);
+ const v = $('#' + VideoUtil.getVid(uid));
if (v.length === 1) {
_closeV(v);
}
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 a3fc8eb..a5d83ab 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
@@ -53,7 +53,7 @@ var Video = (function() {
navigator.getDisplayMedia(cnts).then(function(stream) {
callback(msg, cnts, stream);
}).catch(function(err) {
- Sharer.setShareState(false);
+ Sharer.setShareState(SHARE_STOPED);
OmUtil.error(err);
});
} else if (b.name === 'Firefox') {
@@ -68,7 +68,7 @@ var Video = (function() {
navigator.mediaDevices.getUserMedia(cnts).then(function(stream) {
callback(msg, cnts, stream);
}).catch(function(err) {
- Sharer.setShareState(false);
+ Sharer.setShareState(SHARE_STOPED);
OmUtil.error(err);
});
} else {
@@ -149,6 +149,9 @@ var Video = (function() {
, uid: sd.uid
, sdpOffer: offerSdp
});
+ if (VideoUtil.isSharing(sd)) {
+
Sharer.setShareState(SHARE_STARTED);
+ }
});
});
}