Repository: openmeetings Updated Branches: refs/heads/html5-video [created] 651c80944
[OPENMEETINGS-1649] basic stream listener is implemented Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/651c8094 Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/651c8094 Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/651c8094 Branch: refs/heads/html5-video Commit: 651c80944c10cf694cbd56eb748b65a1de9f68da Parents: 04bd734 Author: Maxim Solodovnik <[email protected]> Authored: Wed May 24 13:01:38 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Wed May 24 13:01:38 2017 +0700 ---------------------------------------------------------------------- .../core/remote/ScopeApplicationAdapter.java | 23 +++++++++++++++++++- .../installation/ImportInitvalues.java | 2 +- .../org/apache/openmeetings/web/room/room.js | 16 ++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/651c8094/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java index cceaf2f..bab7d21 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java @@ -43,6 +43,7 @@ import java.util.Properties; import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; +import org.apache.commons.codec.binary.Base64; import org.apache.openmeetings.IApplication; import org.apache.openmeetings.core.remote.util.SessionVariablesUtil; import org.apache.openmeetings.core.util.WebSocketHelper; @@ -82,6 +83,8 @@ import org.red5.server.api.service.IPendingServiceCall; import org.red5.server.api.service.IPendingServiceCallback; import org.red5.server.api.service.IServiceCapableConnection; import org.red5.server.api.stream.IBroadcastStream; +import org.red5.server.api.stream.IStreamListener; +import org.red5.server.api.stream.IStreamPacket; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -651,8 +654,26 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp return false; } }.start(); - JSONObject obj = new JSONObject().put("uid", c.getPublicSID()).put("screenShare", c.isScreenClient()); + final Long roomId = c.getRoomId(); + final JSONObject obj = new JSONObject().put("uid", c.getPublicSID()).put("screenShare", c.isScreenClient()); WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c.getUserId(), RoomMessage.Type.newStream, obj.toString())); + stream.addStreamListener(new IStreamListener() { + @Override + public void packetReceived(IBroadcastStream str, IStreamPacket packet) { + byte[] b = new byte[packet.getData().limit()]; + packet.getData().duplicate().get(b); + JSONObject msg = new JSONObject() + .put("type", "stream") + .put("msg", new JSONObject(obj.toString()) + .put("publishedName", str.getPublishedName()) + .put("packet", new JSONObject() + .put("type", packet.getDataType()) + .put("time", packet.getTimestamp()) + .put("data", Base64.encodeBase64String(b)) + )); + WebSocketHelper.sendRoom(roomId, msg, null, null); + } + }); } catch (Exception err) { log.error("[streamPublishStart]", err); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/651c8094/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java ---------------------------------------------------------------------- diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java index c620c7e..dc67542 100644 --- a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java +++ b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java @@ -362,7 +362,7 @@ public class ImportInitvalues { cfgDao.add(CONFIG_GOOGLE_ANALYTICS_CODE, null, null, "Code for Google Analytics"); cfgDao.add(CONFIG_FLASH_SECURE, "no", null, "Wether it should try to connect to rtmps first or not\nValid values: yes / no"); cfgDao.add(CONFIG_FLASH_SECURE_PROXY, "none", null, "The setting for the NetConnection default settings is 'none'\n set to value 'best' if you are trying to use rtmp over native SSL"); - cfgDao.add(CONFIG_FLASH_VIDEO_CODEC, "h263", null, "Camera codecType, possible values: 'h263', 'h264'"); + cfgDao.add(CONFIG_FLASH_VIDEO_CODEC, "h264", null, "Camera codecType, possible values: 'h263', 'h264'"); cfgDao.add(CONFIG_FLASH_VIDEO_FPS, "30", null, "Camera FPS, should be positive number in range (0, 60]"); cfgDao.add(CONFIG_HEADER_XFRAME, HEADER_XFRAME_SAMEORIGIN, null, "Value for 'X-Frame-Options' header (default: DENY), more info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options"); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/651c8094/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 866d033..9dec30a 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 @@ -225,6 +225,20 @@ function roomClosed(jqEvent, msg) { ] }); } +function roomWsHandler(jqEvent, msg) { + try { + var m = jQuery.parseJSON(msg); + if (m) { + switch(m.type) { + case "stream": + console.log(m.msg); + break; + } + } + } catch (err) { + //no-op + } +} function roomLoad() { $(".room.sidebar.left").ready(function() { setRoomSizes(); @@ -240,11 +254,13 @@ function roomLoad() { }); Wicket.Event.subscribe("/websocket/closed", roomClosed); Wicket.Event.subscribe("/websocket/error", roomClosed); + Wicket.Event.subscribe("/websocket/message", roomWsHandler); } function roomUnload() { $(window).off('resize.openmeetings'); Wicket.Event.unsubscribe("/websocket/closed", roomClosed); Wicket.Event.unsubscribe("/websocket/error", roomClosed); + Wicket.Event.subscribe("/websocket/message", roomWsHandler); if (!!WbArea) { WbArea.destroy(); }
