http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e7bab5bc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java index bf8c141..64801fa 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java @@ -19,6 +19,7 @@ package org.apache.openmeetings.web.room.menu; import static java.nio.charset.StandardCharsets.UTF_8; +import static org.apache.openmeetings.core.remote.ScopeApplicationAdapter.FLASH_NATIVE_SSL; import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE; import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS; import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW; @@ -26,49 +27,38 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSH import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.getBean; import static org.apache.openmeetings.web.app.WebSession.getLanguage; -import static org.apache.openmeetings.web.room.RoomBroadcaster.getClient; -import java.io.File; -import java.io.FileInputStream; import java.io.InputStream; -import java.net.URI; -import java.util.Properties; -import org.apache.commons.codec.binary.Hex; import org.apache.commons.io.IOUtils; import org.apache.openmeetings.core.session.SessionManager; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.label.LabelDao; import org.apache.openmeetings.db.dao.room.RoomDao; -import org.apache.openmeetings.db.entity.room.Client; +import org.apache.openmeetings.db.entity.basic.Client; import org.apache.openmeetings.db.entity.room.Room; -import org.apache.openmeetings.util.OmFileHelper; import org.apache.openmeetings.web.app.Application; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.OmButton; +import org.apache.openmeetings.web.room.VideoSettings; import org.apache.openmeetings.web.util.AjaxDownload; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.util.resource.StringResourceStream; -import org.apache.wicket.util.string.Strings; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; +import com.github.openjson.JSONObject; + public class StartSharingButton extends OmButton { private static final long serialVersionUID = 1L; private static final Logger log = Red5LoggerFactory.getLogger(StartSharingButton.class, webAppRootKey); private static final String CDATA_BEGIN = "<![CDATA["; private static final String CDATA_END = "]]>"; private final AjaxDownload download; - private final org.apache.openmeetings.db.entity.basic.Client c; - private enum Protocol { - rtmp - , rtmpe - , rtmps - , rtmpt - } + private final Client c; - public StartSharingButton(String id, org.apache.openmeetings.db.entity.basic.Client c) { + public StartSharingButton(String id, Client c) { super(id); this.c = c; setOutputMarkupPlaceholderTag(true); @@ -92,25 +82,16 @@ public class StartSharingButton extends OmButton { ConfigurationDao cfgDao = getBean(ConfigurationDao.class); app = IOUtils.toString(jnlp, UTF_8); String publicSid = c.getUid(); - Client rc = getClient(publicSid); - if (rc == null || rc.getUserId() == null) { - throw new RuntimeException(String.format("Unable to find client by publicSID '%s'", publicSid)); - } - String _url = rc.getTcUrl(); - URI url = new URI(_url); + JSONObject s = VideoSettings.getInitJson(WebSession.get().getExtendedProperties(), "" + c.getRoomId(), publicSid); + String _url = s.getString(VideoSettings.URL); long roomId = c.getRoomId(); Room room = getBean(RoomDao.class).get(roomId); SessionManager sessionManager = getBean(SessionManager.class); - String path = url.getPath(); - path = path.substring(path.lastIndexOf('/') + 1); - if (Strings.isEmpty(path) || rc.getRoomId() == null || !path.equals(rc.getRoomId().toString()) || !rc.getRoomId().equals(roomId)) { - throw new RuntimeException(String.format("Invalid room id passed %s, expected, %s", path, roomId)); - } - Protocol protocol = Protocol.valueOf(url.getScheme()); - app = addKeystore(rc, app, protocol) + app = app.replace("$native", "" + s.getBoolean(FLASH_NATIVE_SSL)) .replace("$codebase", WebSession.get().getExtendedProperties().getCodebase()) .replace("$applicationName", cfgDao.getAppName()) .replace("$url", _url) + .replace("$fallback", s.getString(VideoSettings.FALLBACK)) .replace("$publicSid", publicSid) .replace("$labels", getLabels(730, 731, 732, 733, 734 , 735, 737, 738, 739, 740 @@ -124,7 +105,7 @@ public class StartSharingButton extends OmButton { .replace("$defaultFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS, String.class, "")) .replace("$showFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS_SHOW, String.class, "true")) .replace("$allowRemote", cfgDao.getConfValue(CONFIG_SCREENSHARING_ALLOW_REMOTE, String.class, "true")) - .replace("$allowRecording", "" + (rc.getUserId() > 0 && room.isAllowRecording() && rc.isAllowRecording() && (0 == sessionManager.getRecordingCount(roomId)))) + .replace("$allowRecording", "" + (room.isAllowRecording() && (0 == sessionManager.getRecordingCount(roomId)))) .replace("$allowPublishing", "" + (0 == sessionManager.getPublishingCount(roomId))) ; @@ -151,47 +132,4 @@ public class StartSharingButton extends OmButton { result.append(CDATA_END); return result.toString(); } - - private static String addKeystore(Client rc, String app, Protocol protocol) { - log.debug("RTMP Sharer Keystore :: start"); - String keystore = "--dummy--", password = "--dummy--"; - if (Protocol.rtmps == protocol) { - File conf = new File(OmFileHelper.getRootDir(), "conf"); - File keyStore = new File(conf, "keystore.screen"); - if (keyStore.exists()) { - try (FileInputStream fis = new FileInputStream(keyStore); FileInputStream ris = new FileInputStream(new File(conf, "red5.properties"))) { - Properties red5Props = new Properties(); - red5Props.load(ris); - - byte keyBytes[] = new byte[(int)keyStore.length()]; - fis.read(keyBytes); - - keystore = Hex.encodeHexString(keyBytes); - password = red5Props.getProperty("rtmps.screen.keystorepass"); - - /* - KeyStore ksIn = KeyStore.getInstance(KeyStore.getDefaultType()); - ksIn.load(new FileInputStream(keyStore), red5Props.getProperty("rtmps.keystorepass").toCharArray()); - ByteArrayInputStream bin = new ByteArrayInputStream() - - byte fileContent[] = new byte[(int)file.length()]; - sb = addArgument(sb, Object arg) - ctx.put("$KEYSTORE", users_id); - /* - KeyStore ksOut = KeyStore.getInstance(KeyStore.getDefaultType()); - for (Certificate cert : ksIn.getCertificateChain("red5")) { - PublicKey pub = cert.getPublicKey(); - TrustedCertificateEntry tce = new TrustedCertificateEntry(cert); - tce. - } - */ - } catch (Exception e) { - //no op - } - } - } - return app.replace("$native", "" + rc.isNativeSsl()) - .replace("$keystore", CDATA_BEGIN + keystore + CDATA_END) - .replace("$password", CDATA_BEGIN + password + CDATA_END); - } }
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e7bab5bc/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 ffbfc79..2b9e9e4 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 @@ -88,24 +88,36 @@ var VideoManager = (function() { function _getVid(uid) { return "video" + uid; } - function _update(o) { - var _id = _getVid(o.uid) - , video = o.activities.indexOf('broadcastV') > -1 - , audio = o.activities.indexOf('broadcastA') > -1 + function _update(c) { + var _id = _getVid(c.uid) + , video = c.activities.indexOf('broadcastV') > -1 + , audio = c.activities.indexOf('broadcastA') > -1 , av = audio || video , v = $('#' + _id); - if (av && v.length != 1) { - Video().init(box, o); + if (av && v.length != 1 && !!c.self) { + Video().init(box, c); } else if (av && v.length == 1) { - v.data().update(o); + v.data().update(c); } else if (!av && v.length == 1) { v.remove(); } } + function _play(c) { + Video().init(box, c); + } + function _close(uid) { + var _id = _getVid(uid) + , v = $('#' + _id); + if (v.length == 1) { + v.remove(); + } + } self.getOptions = function() { return JSON.parse(JSON.stringify(options)); }; self.init = _init; self.update = _update; + self.play = _play; + self.close = _close; self.resetSize = function(uid) { $('#' + _getVid(uid)).data().resetSize(); }; return self; })(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e7bab5bc/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java ---------------------------------------------------------------------- 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 62aaf2d..168bea9 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 @@ -27,7 +27,7 @@ import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit; import java.util.ArrayList; import java.util.List; -import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter; +import org.apache.openmeetings.core.remote.ScopeApplicationAdapter; import org.apache.openmeetings.db.entity.basic.Client; import org.apache.openmeetings.db.entity.basic.Client.Activity; import org.apache.openmeetings.db.entity.basic.Client.Pod; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/e7bab5bc/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml index a4ade15..dce1914 100644 --- a/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml +++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/applicationContext.xml @@ -45,7 +45,7 @@ <context:component-scan base-package="org.apache.openmeetings" /> <!-- New Class for the Streaming Handlers --> - <bean id="web.handler" class="org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter" /> + <bean id="web.handler" class="org.apache.openmeetings.core.remote.ScopeApplicationAdapter" /> <!-- Session configuration start -->
