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 379283f [OPENMEETINGS-1649] more work on turn support 379283f is described below commit 379283f8d5a8beceb7c50fc6577b7e352899ec17 Author: Maxim Solodovnik <solomax...@gmail.com> AuthorDate: Fri Oct 5 17:49:08 2018 +0700 [OPENMEETINGS-1649] more work on turn support --- .../apache/openmeetings/core/remote/KStream.java | 1 + .../openmeetings/core/remote/KurentoHandler.java | 5 +++++ .../org/apache/openmeetings/util/OmFileHelper.java | 3 +-- .../apache/openmeetings/web/room/RoomPanel.java | 8 ++++++- .../openmeetings/web/room/raw-video-manager.js | 25 ++++++++++++---------- .../org/apache/openmeetings/web/room/raw-video.js | 24 +++++++++++---------- 6 files changed, 41 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 835cb6a..7cc0df5 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 @@ -89,6 +89,7 @@ public class KStream implements IKStream { WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.rightUpdated, c.getUid())); WebSocketHelper.sendRoomOthers(roomId, uid, newKurentoMsg() .put("id", "newStream") + .put("iceServers", h.getTurnServers()) .put("client", c.toJson(false).put("type", "room"))); // FIXME TODO add multi-stream support return this; } 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 12fac99..15da866 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 @@ -259,6 +259,7 @@ public class KurentoHandler { .put("id", "broadcast") .put("uid", sd.getUid()) .put("stream", new JSONObject(sd)) + .put("iceServers", getTurnServers(false)) .put("client", c.toJson(true).put("type", "room"))); // FIXME TODO add multi-stream support //FIXME TODO update interview buttons } else { @@ -383,6 +384,10 @@ public class KurentoHandler { return r; } + public JSONArray getTurnServers() { + return getTurnServers(false); + } + private JSONArray getTurnServers(final boolean test) { JSONArray arr = new JSONArray(); if (!Strings.isEmpty(turnUrl)) { diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java index 8a29957..482ba40 100644 --- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java +++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java @@ -180,8 +180,7 @@ public class OmFileHelper { } public static File getStreamsDir() { - //FIXME TODO return getDir(OmFileHelper.omHome, STREAMS_DIR); - return new File(System.getProperty("java.io.tmpdir"), STREAMS_DIR); + return getDir(OmFileHelper.omHome, STREAMS_DIR); } public static File getStreamsHibernateDir() { 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 4d30f1e..2533e9d 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 @@ -33,6 +33,7 @@ import java.util.List; import java.util.Map.Entry; import java.util.Set; +import org.apache.openmeetings.core.remote.KurentoHandler; import org.apache.openmeetings.core.util.WebSocketHelper; import org.apache.openmeetings.db.dao.calendar.AppointmentDao; import org.apache.openmeetings.db.dao.log.ConferenceLogDao; @@ -167,7 +168,10 @@ public class RoomPanel extends BasePanel { for (Client c: cm.listByRoom(getRoom().getId())) { //FIXME TODO add multiple streams support if (!c.getStreams().isEmpty()) { - sb.append(String.format("VideoManager.play(%s);", c.toJson(false).put("type", "room"))); // FIXME TODO add multi-stream support + sb.append(String.format("VideoManager.play(%s);", new JSONObject() + .put("client", c.toJson(false).put("type", "room")) + .put("iceServers", kHandler.getTurnServers()) + )); // FIXME TODO add multi-stream support hasStreams = true; } } @@ -233,6 +237,8 @@ public class RoomPanel extends BasePanel { private AppointmentDao apptDao; @SpringBean private QuickPollManager qpollManager; + @SpringBean + private KurentoHandler kHandler; public RoomPanel(String id, Room r) { super(id); 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 826e47f..959aa50 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 @@ -17,24 +17,26 @@ var VideoManager = (function() { function _onBroadcast(msg) { const uid = msg.uid; $('#' + VideoUtil.getVid(uid)).remove(); - Video().init(msg.client, VideoUtil.getPos(VideoUtil.getRects(VID_SEL), msg.stream.width, msg.stream.height + 25)); + Video().init(msg); OmUtil.log(uid + ' registered in room'); } - function _onReceive(c) { - const uid = c.uid; + function _onReceive(msg) { + const uid = msg.client.uid; $('#' + VideoUtil.getVid(uid)).remove(); const o = VideoSettings.load() //FIXME TODO add multiple streams support //, w = Video().init(c, VideoUtil.getPos(VideoUtil.getRects(VID_SEL), msg.stream.width, msg.stream.height + 25)) - , w = Video().init(c, VideoUtil.getPos(VideoUtil.getRects(VID_SEL), c.width, c.height + 25)) + , w = Video().init(msg) , v = w.data() , cl = v.client(); OmUtil.log(uid + ' receiving video'); - v.setPeer(new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly({ - remoteVideo : v.video() - , onicecandidate : v.onIceCandidate - } + const options = VideoUtil.addIceServers({ + remoteVideo : v.video() + , onicecandidate : v.onIceCandidate + }, msg); + v.setPeer(new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly( + options , function(error) { if (error) { return OmUtil.error(error); @@ -88,7 +90,7 @@ var VideoManager = (function() { } break; case 'newStream': - _onReceive(m.client); + _onReceive(m); break; default: //no-op @@ -157,10 +159,11 @@ var VideoManager = (function() { v.remove(); WbArea.updateAreaClass(); } - function _play(c) { + function _play(msg) { if (!inited) { return; } + const c = msg.client; if (VideoUtil.isSharing(c)) { _highlight(share .attr('title', share.data('user') + ' ' + c.user.firstName + ' ' + c.user.lastName + ' ' + share.data('text')) @@ -175,7 +178,7 @@ var VideoManager = (function() { } }); } else { - _onReceive(c); + _onReceive(msg); } } function _close(uid, showShareBtn) { 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 a6b934b..128bdb7 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 @@ -44,7 +44,7 @@ var Video = (function() { OmUtil.sendMessage({type: 'mic', id: 'activity', active: speaks}); } } - function _createSendPeer() { + function _createSendPeer(msg) { const constraints = VideoSettings.constraints(c); navigator.mediaDevices.getUserMedia(constraints) .then(function(stream) { @@ -62,13 +62,14 @@ var Video = (function() { gainNode.connect(aDest); _stream = aDest.stream; } + const options = VideoUtil.addIceServers({ + localVideo: video[0] + , videoStream: _stream + , mediaConstraints: constraints + , onicecandidate: self.onIceCandidate + }, msg); rtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerSendonly( - { - localVideo: video[0] - , videoStream: _stream - , mediaConstraints: constraints - , onicecandidate: self.onIceCandidate - } + options , function (error) { if (error) { return OmUtil.error(error); @@ -189,8 +190,8 @@ var Video = (function() { }); } } - function _init(_c, _pos) { - c = _c; + function _init(msg) { + c = msg.client; size = {width: c.width, height: c.height}; const _id = VideoUtil.getVid(c.uid) , name = _getName() @@ -279,14 +280,15 @@ var Video = (function() { vc.addClass('audio-only').css('background-image', 'url(' + imgUrl + ')'); } if (c.self) { //FIXME TODO multi-stream - _createSendPeer(); + _createSendPeer(msg); } else if (VideoUtil.hasAudio(c)) { vol.show(); _handleVolume(lastVolume); } vc.append(video); - v.dialog('widget').css(_pos); + //FIXME TODO multiple streams + v.dialog('widget').css(VideoUtil.getPos(VideoUtil.getRects(VID_SEL), c.width, c.height + 25)); return v; } function _update(_c) {