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();");
}
}