Author: solomax
Date: Tue Apr 11 15:52:14 2017
New Revision: 1790995

URL: http://svn.apache.org/viewvc?rev=1790995&view=rev
Log:
[OPENMEETINGS-551] settings dialog seems to be implemented

Modified:
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml
    
openmeetings/application/trunk/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
    
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Tue Apr 11 15:52:14 2017
@@ -19,10 +19,15 @@
 package org.apache.openmeetings.core.remote.red5;
 
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_SECURE;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_SECURE_PROXY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_VIDEO_CODEC;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.awt.Point;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -32,6 +37,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicLong;
@@ -92,6 +98,8 @@ import org.red5.server.api.stream.IBroad
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import com.github.openjson.JSONObject;
+
 public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter 
implements IPendingServiceCallback {
        private static final Logger log = 
Red5LoggerFactory.getLogger(ScopeApplicationAdapter.class, webAppRootKey);
        private static final String SECURITY_CODE_PARAM = "securityCode";
@@ -108,7 +116,7 @@ public class ScopeApplicationAdapter ext
        @Autowired
        private RecordingService recordingService;
        @Autowired
-       private ConfigurationDao configurationDao;
+       private ConfigurationDao cfgDao;
        @Autowired
        private AppointmentDao appointmentDao;
        @Autowired
@@ -125,6 +133,7 @@ public class ScopeApplicationAdapter ext
        private RecordingDao recordingDao;
        @Autowired
        private ServerDao serverDao;
+       private JSONObject flashSettings;
 
        private static AtomicLong broadCastCounter = new AtomicLong(0);
 
@@ -147,6 +156,18 @@ public class ScopeApplicationAdapter ext
                        getCryptKey();
 
                        // init your handler here
+                       Properties props = new Properties();
+                       try (InputStream is = new FileInputStream(new File(new 
File(OmFileHelper.getRootDir(), "conf"), "red5.properties"))) {
+                               props.load(is);
+                       }
+                       flashSettings = new JSONObject()
+                                       .put("secure", 
"yes".equals(cfgDao.getConfValue(CONFIG_FLASH_SECURE, String.class, "no")))
+                                       .put("proxyType", 
cfgDao.getConfValue(CONFIG_FLASH_SECURE_PROXY, String.class, "none"))
+                                       .put("rtmpPort", 
props.getProperty("rtmp.port"))
+                                       .put("rtmpsPort", 
props.getProperty("rtmps.port"))
+                                       .put("videoCodec", 
cfgDao.getConfValue(CONFIG_FLASH_VIDEO_CODEC, String.class, "h263"))
+                                       .put("fps", 
cfgDao.getConfValue(OpenmeetingsVariables.CONFIG_FLASH_VIDEO_FPS, 
Integer.class, "30"))
+                                       ;
 
                        for (String scopeName : scope.getScopeNames()) {
                                log.debug("scopeName :: " + scopeName);
@@ -1847,11 +1868,11 @@ public class ScopeApplicationAdapter ext
        }
 
        private boolean getWhiteboardDrawStatus() {
-               return configurationDao.getWhiteboardDrawStatus();
+               return cfgDao.getWhiteboardDrawStatus();
        }
 
        public String getCryptKey() {
-               return configurationDao.getCryptKey();
+               return cfgDao.getCryptKey();
        }
 
        public IScope getRoomScope(String room) {
@@ -1940,4 +1961,8 @@ public class ScopeApplicationAdapter ext
 
                sendMessageToCurrentScope("addNewUser", currentClient, false);
        }
+
+       public JSONObject getFlashSettings() {
+               return flashSettings;
+       }
 }

Modified: 
openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml 
(original)
+++ openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml 
Tue Apr 11 15:52:14 2017
@@ -21,8 +21,8 @@
 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
                xmlns:s="library://ns.adobe.com/flex/spark"
                xmlns:mx="library://ns.adobe.com/flex/mx"
-               width="570" height="900" pageTitle="Openmeetings"
-               preinitialize="init()" fontSize="12" 
applicationComplete="appInit()">
+               width="570" height="900" pageTitle="Openmeetings" fontSize="12"
+               applicationComplete="appInit(event)" 
uncaughtError="uncaughtError(event)">
        <fx:Declarations>
                <!-- Place non-visual elements (e.g., services, value objects) 
here -->
                <mx:TraceTarget/>
@@ -32,10 +32,7 @@
 
                import org.apache.openmeetings.OmVideo;
 
-               private var sid:String;
-               private var roomid:int;
                private var audioOnly:Boolean = false;
-               private var labels:Object = new Object();
                private var FPS:int;
                private var bandwidth:int = 0;
                private var quality:int = 100;
@@ -46,36 +43,12 @@
                private var selectedCam:int = -1;
                private var video:OmVideo;
                private var recName:String;
-               private var codec:String = OmVideo.CODEC_H264;
-               private var protocol:String;
-               private var host:String;
-               private var port:String;
-               private var app:String;
+               private var mic:Microphone = null;
                [Bindable]
                private var interview:Boolean = false;
 
-               private function init():void {
-                       trace("init()");
-                       var tla:Object = FlexGlobals.topLevelApplication;
-                       sid = tla.parameters['sid'];
-                       roomid = tla.parameters['roomid'];
-                       audioOnly = 'true' == tla.parameters['audioOnly'];
-                       interview = 'true' == tla.parameters['interview'];
-                       var _fps:int = parseInt(tla.parameters['fps']);
-                       FPS = interview ? 24 : (isNaN(_fps) || _fps < 1 ? 30 : 
_fps);
-
-                       var lbls:Array = JSON.parse(tla.parameters['labels']) 
as Array;
-                       for (var i:int = 0; i < lbls.length; ++i) {
-                               labels[lbls[i].id] = lbls[i].value;
-                       }
-                       protocol = tla.parameters['protocol'];
-                       host = tla.parameters['host'];
-                       port = tla.parameters['port'];
-                       app = tla.parameters['app'];
-               }
-
-               private function debug(str:String):void {
-                       ExternalInterface.call("console.log", str);
+               private function debug(...rest):void {
+                       ExternalInterface.call("console.log", rest);
                }
 
                private function camAvail():Boolean {
@@ -86,10 +59,15 @@
                        return Microphone.names.length > 0;
                }
 
-               private function appInit():void {
-                       video = new OmVideo(videoDisplay, codec, protocol + 
"://" + host + ":" + port + "/" + app);
-
+               private function appInit(evt:Event):void {
                        var tla:Object = FlexGlobals.topLevelApplication;
+                       debug("appInit()", tla.parameters);
+                       audioOnly = 'true' == tla.parameters['audioOnly'];
+                       interview = 'true' == tla.parameters['interview'];
+                       var _fps:int = parseInt(tla.parameters['fps']);
+                       FPS = (isNaN(_fps) || _fps < 1 ? 30 : _fps);
+                       video = new OmVideo(videoDisplay, tla.parameters);
+
                        ExternalInterface.addCallback("getDevices", function 
():Object {
                                return {
                                        cams: Camera.names
@@ -115,25 +93,34 @@
                                selectedMic = micIdx;
                                setResolution(width, height, true);
                        });
+                       ExternalInterface.addCallback("startRec", function 
():void {
+                               startTestRecording();
+                       });
+                       ExternalInterface.addCallback("play", function ():void {
+                               playTestRecording();
+                       });
                        ExternalInterface.call("VideoSettings.initSwf");
                }
 
+               private function uncaughtError(e:UncaughtErrorEvent):void {
+                       debug("Unexpected ERROR", e);
+               }
+
                private function getMic():Microphone {
                        debug("Entering getMic ...");
                        var _micro:Microphone = null;
                        if (selectedMic > -1) {
                                _micro = echoPath == 0 ? 
Microphone.getMicrophone(selectedMic) : 
Microphone.getEnhancedMicrophone(selectedMic);
 
-                               if (_micro != null && echoPath == 256) {
-                                       var options:MicrophoneEnhancedOptions = 
new MicrophoneEnhancedOptions();
-                                       options.mode = 
MicrophoneEnhancedMode.FULL_DUPLEX;
-                                       options.echoPath = 256;
-                                       options.nonLinearProcessing = true;
-                                       _micro.enhancedOptions = options;
-                                       debug("echoPath set to 256 " + 
_micro.enhancedOptions);
-                               }
-
                                if (_micro != null) {
+                                       if (echoPath == 256) {
+                                               var 
options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
+                                               options.mode = 
MicrophoneEnhancedMode.FULL_DUPLEX;
+                                               options.echoPath = echoPath;
+                                               options.nonLinearProcessing = 
true;
+                                               _micro.enhancedOptions = 
options;
+                                               debug("echoPath set to " + 
echoPath + ", " + _micro.enhancedOptions);
+                                       }
                                        _micro.codec = SoundCodec.NELLYMOSER;
                                        _micro.framesPerPacket = 1;
                                        _micro.setSilenceLevel(0, 2000);
@@ -186,12 +173,13 @@
                                        video.attachCamera(cam);
                                        
cam.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
                                                debug("cameraStatusHandler! " + 
event);
-                                               
//cam.removeEventListener(StatusEvent.STATUS, arguments.callee);
+                                               
cam.removeEventListener(StatusEvent.STATUS, arguments.callee);
                                                switch (event.code) {
                                                        case 'Camera.Muted':
                                                                debug("Unable 
to connect to active camera.");
                                                                break;
                                                        case 'Camera.Unmuted':
+                                                               
ExternalInterface.call("VideoSettings.allowRec", true);
                                                                
_attachCamera(getCam());
                                                                break;
                                                }
@@ -200,20 +188,22 @@
                                        _attachCamera(cam);
                                }
                        } else {
-                               var mic:Microphone = getMic();
-                               if (mic != null) {
-                                       if (mic.muted) {
+                               var _mic:Microphone = getMic();
+                               if (_mic != null) {
+                                       if (_mic.muted) {
                                                var nc:NetConnection = new 
NetConnection();
                                                nc.connect(null);
                                                var ns:NetStream = new 
NetStream(nc);
-                                               ns.attachAudio(mic);
-                                               
mic.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
+                                               ns.attachAudio(_mic);
+                                               
_mic.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
                                                        
debug("micStatusHandler! " + event);
-                                                       
mic.removeEventListener(StatusEvent.STATUS, arguments.callee);
+                                                       
_mic.removeEventListener(StatusEvent.STATUS, arguments.callee);
                                                        ns.close();
                                                        nc.close();
-                                                       if (mic.muted) {
+                                                       if (_mic.muted) {
                                                                debug("Unable 
to connect to active microphone.");
+                                                       } else {
+                                                               
ExternalInterface.call("VideoSettings.allowRec", true);
                                                        }
                                                });
                                        }
@@ -257,39 +247,39 @@
                }
 
                private function startTestRecording():void {
-                       var counter:int = 5;
-                       timerText.visible = true;
-                       timerText.text = "5 sec";
-                       var recTimer:Timer = new Timer(1000, counter);
-                       var t:Date = new Date();
-                       recName = "TEST_SETUP_" + t.getTime();
-                       var mic:Microphone = getMic();
-                       video.record(recName, getCam(), mic, function ():void {
-                               mic.addEventListener(ActivityEvent.ACTIVITY, 
micActivityHandler);
-                               //mic.onA
-                               var micTimer:Timer = new Timer(100, 0);
-                               micTimer.addEventListener(TimerEvent.TIMER, 
function (event:TimerEvent):void {
-                                       //FIXME TODO fill.width = 
mic.activityLevel * RIGHT_WIDTH / 100;
-                                       debug("activity: " + mic.activityLevel);
+                       try {
+                               var counter:int = 5;
+                               timerText.visible = true;
+                               timerText.text = "5 sec";
+                               var recTimer:Timer = new Timer(1000, counter);
+                               var t:Date = new Date();
+                               recName = "TEST_SETUP_" + t.getTime();
+                               mic = getMic();
+                               var activityTimer:Timer = new Timer(100);
+                               
activityTimer.addEventListener(TimerEvent.TIMER, function 
(event:TimerEvent):void {
+                                       
ExternalInterface.call("VideoSettings.micActivity", mic.activityLevel);
                                });
-                               recTimer.addEventListener(TimerEvent.TIMER, 
function (event:TimerEvent):void {
-                                       timerText.text = --counter + " sec";
-                                       if (counter == 0) {
-                                               timerText.visible = false;
-                                               playTestRecording();
-                                               micTimer.stop();
-                                               
mic.removeEventListener(ActivityEvent.ACTIVITY, micActivityHandler);
+                               video.record(recName, getCam(), mic, function 
():void {
+                                       if (mic != null) {
+                                               activityTimer.start();
                                        }
+                                       
recTimer.addEventListener(TimerEvent.TIMER, function (event:TimerEvent):void {
+                                               timerText.text = --counter + " 
sec";
+                                               if (counter == 0) {
+                                                       timerText.visible = 
false;
+                                                       
ExternalInterface.call("VideoSettings.allowPlay");
+                                                       playTestRecording();
+                                                       activityTimer.stop();
+                                                       mic = null;
+                                               }
+                                       });
+                                       recTimer.start();
                                });
-                               recTimer.start();
-                               micTimer.start();
-                       });
-               }
-
-               private function micActivityHandler(event:ActivityEvent):void {
-                       //Do nothing, it just need to be there.
+                       } catch (err:Error) {
+                               debug("ERROR: " + err);
+                       }
                }
-       ]]></fx:Script>
+               ]]></fx:Script>
 
        <mx:UIComponent id="videoDisplay" width="0" height="0" />
        <s:Label id="timerText" height="20" width="45" x="20" y="5" 
paddingLeft="5" paddingTop="5"

Modified: 
openmeetings/application/trunk/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
 (original)
+++ 
openmeetings/application/trunk/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
 Tue Apr 11 15:52:14 2017
@@ -19,6 +19,7 @@
 package org.apache.openmeetings {
 import flash.events.AsyncErrorEvent;
 import flash.events.NetStatusEvent;
+import flash.external.ExternalInterface;
 import flash.media.Camera;
 import flash.media.H264Level;
 import flash.media.H264Profile;
@@ -43,13 +44,12 @@ public class OmVideo {
        public var width:int;
        public var height:int;
        private var mode:String;
-       private var codec:String;
-       private var url:String;
+       private var params:Object;
+       private var fallback:Boolean;
 
-       public function OmVideo(ui:UIComponent, codec:String, url:String) {
+       public function OmVideo(ui:UIComponent, params:Object) {
                this.ui = ui;
-               this.codec = codec;
-               this.url = url;
+               this.params = params;
        }
 
        private function getVideo():Video {
@@ -84,44 +84,42 @@ public class OmVideo {
                vid = null;
        }
 
+       private function debug(... rest):void {
+               ExternalInterface.call("console.log", rest);
+       }
+
        private function createStream():void {
+               debug("createStream: ");
                ns = new NetStream(nc);
                //see: 
http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
                //according to the docs the construct to catch event has to be 
implemented like this.
                //var t = this;
-               var clientObject:Object = new Object();
-               clientObject.onMetaData = function(metadata:Object):void {
-                       //t.onMetaData(metadata);
-                       trace("onMetaData: ", metadata);
-               };
-               clientObject.onPlayStatus = function(metadata:Object):void {
-                       //t.onPlayStatus(metadata);
-                       trace("onPlayStatus: ", metadata);
-               };
-               clientObject.onCuePoint = function(metadata:Object):void {
-                       //t.onCuePoint(metadata);
-                       trace("onCuePoint: ", metadata);
-               };
-               clientObject.ioError = function(error:Object):void {
-                       //t.ioError(error);
-                       trace("ioError: ", error);
-               };
-               clientObject.netStatus = function(status:Object):void {
-                       //t.netStatus(status);
-                       trace("netStatus: ", status);
-               };
-               clientObject.asyncError = function(error:Object):void {
-                       //t.asyncError(error);
-                       trace("asyncError: ", error);
+               ns.client = {
+                       onMetaData: function(metadata:Object):void {
+                               debug("onMetaData: ", metadata);
+                       }
+                       , onPlayStatus: function(metadata:Object):void {
+                               debug("onPlayStatus: ", metadata);
+                       }
+                       , onCuePoint: function(metadata:Object):void {
+                               debug("onCuePoint: ", metadata);
+                       }
+                       , ioError: function(error:Object):void {
+                               debug("ioError: ", error);
+                       }
+                       , netStatus: function(status:Object):void {
+                               debug("netStatus: ", status);
+                       }
+                       , asyncError: function(error:Object):void {
+                               debug("asyncError: ", error);
+                       }
                };
-               ns.client = clientObject;
                //this is a workaround, attaching the event to the client 
object does not work
                ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
        }
 
        private function onNetStatus2(evt:Object):void {
-               trace("netStream_onNetStatus: ", evt.info.code, evt.target);
-               //this.onNetStatus.sendEvent(evt.info);
+               debug("netStream_onNetStatus: ", evt.info.code, evt.target);
        }
 
        private function _publish(mode:String, name:String, cam:Camera, 
mic:Microphone, f:Function):void {
@@ -137,8 +135,8 @@ public class OmVideo {
                        attachCamera(cam);
 
                        var videoStreamSettings:VideoStreamSettings = null;
-                       trace("codec = " + codec);
-                       if (codec === CODEC_H264) {
+                       debug("codec = " + params.videoCodec);
+                       if (params.videoCodec === CODEC_H264) {
                                var vss:H264VideoStreamSettings = new 
H264VideoStreamSettings();
                                vss.setProfileLevel(H264Profile.BASELINE, 
H264Level.LEVEL_5_1);
                                videoStreamSettings = vss;
@@ -147,7 +145,7 @@ public class OmVideo {
                        }
                        videoStreamSettings.setQuality(cam.bandwidth, 
cam.quality);
                        
videoStreamSettings.setKeyFrameInterval(cam.keyFrameInterval);
-                       trace("::keyFrameInterval " + cam.keyFrameInterval);
+                       debug("::keyFrameInterval " + cam.keyFrameInterval);
                        videoStreamSettings.setMode(cam.width, cam.height, 
cam.fps);
                        ns.videoStreamSettings = videoStreamSettings;
                }
@@ -162,12 +160,22 @@ public class OmVideo {
                }
        }
 
+       private function getUrl():String {
+               var secure:Boolean = ('true' === params.secure);
+               var url:String = (secure ? "rtmps" : "rtmp") + "://"
+                               + params.host + ":" + (secure ? 
params.rtmpsPort : params.rtmpPort)
+                               + "/" + params.app;
+               //TODO fallback
+               return url;
+       }
+
        private function publish(mode:String, name:String, cam:Camera, 
mic:Microphone, f:Function):void {
                if (nc == null || !nc.connected) {
-                       trace("NetConnection is not connected");
+                       var url:String = getUrl();
+                       debug("NetConnection is not connected", url);
                        nc = new NetConnection();
                        nc.addEventListener(NetStatusEvent.NET_STATUS, function 
onConnectionStatus(e:NetStatusEvent):void {
-                               trace("ConnectionStatus: " + e.info.code);
+                               debug("ConnectionStatus: " + e.info.code);
                                if (e.info.code == 
"NetConnection.Connect.Success") {
                                        _publish(mode, name, cam, mic, f);
                                } else {
@@ -175,26 +183,28 @@ public class OmVideo {
                                }
                        });
                        nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, 
function (event:AsyncErrorEvent):void {
-                               trace("login Async error" + event);
+                               debug("login Async error" + event);
                        });
                        nc.client = {
                                onMetaData: function (infoObject:Object):void {
-                                       for (var propName:String in infoObject) 
{
-                                               trace(propName + " = " + 
infoObject[propName]);
-                                       }
+                                       debug("onMetaData::", infoObject);
                                }
                                , onBWDone: function(...rest):void {
-                                       trace("onBWDone");
+                                       debug("onBWDone");
                                }
                                , onBWCheck: function(...rest):Number {
-                                       trace("onBWCheck");
+                                       debug("onBWCheck");
                                        return 0;
                                }
                                , setId: function (id:Number):void {
-                                       trace("id: " + id); //TODO save 
connection id
+                                       debug("id: " + id); //TODO save 
connection id
                                }
                        };
-                       nc.connect(url);
+                       nc.connect(url, {
+                               uid: params.uid
+                               , sid: params.sid
+                               , nativeSsl: 'best' == params.proxyType
+                       });
                } else {
                        _publish(mode, name, cam, mic, f);
                }
@@ -205,6 +215,7 @@ public class OmVideo {
        }
 
        public function play(name:String):void {
+               debug("PLAY::", name);
                if (ns != null){
                        reset();
                }
@@ -215,16 +226,15 @@ public class OmVideo {
                //FIXME: Commented out, cause this leads to 
Buffer-Full/Buffer-Empty Events
                //after re-syncing the stream
                //this.setBuffer(0.1);
-               ns.play(name);
+               ns.play(name + ".flv");
        }
 
        public function reset():void {
-               var vid:Video = getVideo();
                if (ns != null) {
                        switch (mode) {
                                case PLAY:
                                        ns.pause();
-                                       ns.close();
+                                       ns.dispose();
                                        clear();
                                        break;
                                case BROADCAST:
@@ -232,7 +242,7 @@ public class OmVideo {
                                        ns.publish(null); //false in original 
code
                                default:
                                        clear();
-                                       ns.close();
+                                       ns.dispose();
                                        break;
                        }
                } else {

Modified: 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 Tue Apr 11 15:52:14 2017
@@ -34,6 +34,10 @@ import static org.apache.openmeetings.ut
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LDAP_ID;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DOCUMENT_DPI;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DOCUMENT_QUALITY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_SECURE;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_SECURE_PROXY;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_VIDEO_CODEC;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_VIDEO_FPS;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_GOOGLE_ANALYTICS_CODE;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
@@ -352,6 +356,10 @@ public class ImportInitvalues {
                                "Users entered the room via invitationHash or 
secureHash will be redirected to this URL on connection lost");
                cfgDao.add(CONFIG_CALENDAR_FIRST_DAY, "0", null, "The day that 
each week begins. The value must be a number that represents the day of the 
week. Sunday=0, Monday=1, Tuesday=2, etc.");
                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_FPS, "30", null, "Camera FPS, 
should be positive number in range (0, 60]");
 
                log.debug("Configurations ADDED");
        }

Modified: 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 Tue Apr 11 15:52:14 2017
@@ -51,6 +51,10 @@ public class OpenmeetingsVariables {
        public static final String CONFIG_IMAGEMAGIC_PATH = "imagemagick_path";
        public static final String CONFIG_DOCUMENT_DPI = "document.dpi";
        public static final String CONFIG_DOCUMENT_QUALITY = "document.quality";
+       public static final String CONFIG_FLASH_SECURE = "flash.secure";
+       public static final String CONFIG_FLASH_SECURE_PROXY = 
"flash.secure.proxy";
+       public static final String CONFIG_FLASH_VIDEO_CODEC = 
"flash.video.codec";
+       public static final String CONFIG_FLASH_VIDEO_FPS = "flash.video.fps";
        public static final String MENU_ROOMS_NAME = "Conference Rooms";
        public static final int RECENT_ROOMS_COUNT = 5;
        public static final int LEVEL_USER = 1;

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 Tue Apr 11 15:52:14 2017
@@ -16,12 +16,9 @@
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-  
+
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
-<wicket:head>
-       <script type="text/javascript" 
src="js/openmeetings_functions.js"></script>
-</wicket:head>
 <wicket:panel>
        <form wicket:id="signin" class="signin">
                <table>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
 Tue Apr 11 15:52:14 2017
@@ -7,20 +7,19 @@
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at
-  
+
       http://www.apache.org/licenses/LICENSE-2.0
-         
+
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-  
+
 -->
 <html xmlns:wicket="http://wicket.apache.org";>
 <wicket:head>
-       <script type="text/javascript" src="js/openmeetings_functions.js" 
></script>
        <style type="text/css">
                .abstractWizard .adminForm div.formelement {
                        max-width: 600px;

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 Tue Apr 11 15:52:14 2017
@@ -36,6 +36,7 @@ import java.util.Set;
 import java.util.UUID;
 
 import org.apache.directory.api.util.Strings;
+import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
@@ -123,14 +124,12 @@ public class RoomPanel extends BasePanel
                                String path = url.getPath();
                                path = path.substring(1, path.indexOf('/', 2) + 
1);
                                ClientProperties cp = 
WebSession.get().getClientInfo().getProperties();
-                               
target.appendJavaScript(String.format("VideoSettings.init(%s);", new 
JSONObject()
+                               
target.appendJavaScript(String.format("VideoSettings.init(%s);", new 
JSONObject(getBean(ScopeApplicationAdapter.class).getFlashSettings().toString())
                                                .put("uid", 
getClient().getUid())
                                                .put("audioOnly", 
r.isAudioOnly())
                                                .put("SID", WebSession.getSid())
                                                .put("interview", 
Room.Type.interview == r.getType())
-                                               //.put("protocol", 
cfgDao.getConfValue(CONFIG_FLASH_PROTOCOL, String.class, ""))
                                                .put("host", url.getHost())
-                                               //.put("port", 
cfgDao.getConfValue(CONFIG_FLASH_PORT, String.class, ""))
                                                .put("app", path + r.getId())
                                                .put("wmode", 
cp.isBrowserInternetExplorer() && cp.getBrowserVersionMajor() == 11 ? "opaque" 
: "direct")
                                                .toString()

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/SwfPanel.java
 Tue Apr 11 15:52:14 2017
@@ -79,7 +79,6 @@ public class SwfPanel extends BasePanel
        public void renderHead(IHeaderResponse response) {
                super.renderHead(response);
                response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forReference(newResourceReference())));
-               response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forUrl("js/openmeetings_functions.js")));
                
response.render(OnDomReadyHeaderItem.forScript(panelLoaded.getCallbackScript()));
        }
 

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
 Tue Apr 11 15:52:14 2017
@@ -93,7 +93,8 @@ function startPrivateChat(el) {
        $('#chatMessage .wysiwyg-editor').click();
 }
 var VideoSettings = (function() {
-       var self = {}, vs, lm, swf, s, cam, mic, res, inited = false;
+       var self = {}, vs, lm, swf, s, cam, mic, res,
+               vidScroll, recBtn, playBtn, inited = false, recAllowed = false;
        function _load() {
                s = {};
                try {
@@ -112,6 +113,14 @@ var VideoSettings = (function() {
                cam = vs.find('select.cam');
                mic = vs.find('select.mic');
                res = vs.find('select.cam-resolution');
+               vidScroll = vs.find('.vid-block .video-conainer');
+               recBtn = vs.find('.rec-start').click(function() {
+                       recBtn.prop('disabled', true).button('refresh'); //TODO 
disable drop-downs
+                       swf.startRec();
+               });
+               playBtn = vs.find('.play').click(function() {
+                       swf.play();
+               });
                vs.dialog({
                        classes: {
                                'ui-dialog': 'ui-corner-all video'
@@ -140,18 +149,43 @@ var VideoSettings = (function() {
                lm.progressbar({ value: 0 });
                options.width = 300;
                options.height = 200;
-               swf = initVideo(vs.find('.vid-block .video-conainer'), 
'video-settings-swf', options)[0];
+               swf = initVideo(vidScroll, 'video-settings-swf', options)[0];
                vs.find('input, button').prop('disabled', true);
                vs.find('button').button();
+               var rr = vs.find('.cam-resolution').parent('.sett-row');
+               if (!!options.interview) {
+                       rr.show();
+               } else {
+                       rr.hide();
+               }
                _load();
        }
+       function _updateRec() {
+               recBtn.prop('disabled', !recAllowed && (s.video.cam > -1 || 
s.video.mic > -1)).button('refresh');
+       }
        function _readValues() {
-               s.video.cam = cam.val();
-               s.video.mic = mic.val();
+               s.video.cam = 1 * cam.val();
+               s.video.mic = 1 * mic.val();
                var o = res.find('option:selected').data();
                s.video.width = o.width;
                s.video.height = o.height;
                $(swf).attr('width', Math.max(300, 
s.video.width)).attr('height', Math.max(200, s.video.height));
+               vidScroll.scrollLeft(Math.max(0, s.video.width / 2 - 150))
+                       .scrollTop(Math.max(0, s.video.height / 2 - 110));
+               _updateRec();
+       }
+       
+       function _allowRec(allow) {
+               recAllowed = allow;
+               _updateRec();
+       }
+       function _allowPlay() {
+               _updateRec();
+               playBtn.prop('disabled', false).button('refresh');
+       }
+       function _micActivity(level) {
+               console.log("activity: ", level)
+               lm.progressbar("value", Math.max(0, level));
        }
        function _initSwf() {
                if (!inited) {
@@ -193,19 +227,17 @@ var VideoSettings = (function() {
                _readValues();
                swf.init(s.video.cam, s.video.mic, s.video.width, 
s.video.height);
        }
-       function _open(interview) {
-               var rr = vs.find('.cam-resolution').parent('.sett-row');
-               if (interview) {
-                       rr.show();
-               } else {
-                       rr.hide();
-               }
+       function _open() {
+               recAllowed = false;
                vs.dialog('open');
        }
        return {
                init: _init
                , initSwf: _initSwf
                , open: _open
+               , allowRec: _allowRec
+               , allowPlay: _allowPlay
+               , micActivity: _micActivity
                , close: function() { vs.dialog('close'); }
        };
 })();

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
 Tue Apr 11 15:52:14 2017
@@ -88,14 +88,14 @@
                                        </div>
                                </div>
                                <div class="sett-row right">
-                                       <div><button><wicket:message 
key="775"/></button></div>
+                                       <div><button 
class="rec-start"><wicket:message key="775"/></button></div>
                                </div>
                        </div>
                        <div class="vid-block">
                                <div class="video-conainer"></div>
                                <div class="level-meter"></div>
                                <div class="sett-row right">
-                                       <div><button><wicket:message 
key="764"/></button></div>
+                                       <div><button 
class="play"><wicket:message key="764"/></button></div>
                                </div>
                        </div>
                </div>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java?rev=1790995&r1=1790994&r2=1790995&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/SettingsIcon.java
 Tue Apr 11 15:52:14 2017
@@ -19,7 +19,6 @@
 package org.apache.openmeetings.web.room.sidebar.icon;
 
 import org.apache.openmeetings.db.entity.basic.Client;
-import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class SettingsIcon extends ClientIcon {
@@ -42,6 +41,6 @@ public class SettingsIcon extends Client
 
        @Override
        protected String getScript() {
-               return String.format("VideoSettings.open(%s);", 
Room.Type.interview == room.getRoom().getType());
+               return String.format("VideoSettings.open();");
        }
 }


Reply via email to