You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/04/10 16:58:56 UTC
svn commit: r1790877 - in /openmeetings/application/trunk:
openmeetings-flash/ openmeetings-flash/src/main/flex/
openmeetings-web/src/main/java/org/apache/openmeetings/web/room/
openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/ o...
Author: solomax
Date: Mon Apr 10 16:58:56 2017
New Revision: 1790877
URL: http://svn.apache.org/viewvc?rev=1790877&view=rev
Log:
[OPENMEETINGS-551] basic work on settings dialog
Removed:
openmeetings/application/trunk/openmeetings-web/src/main/webapp/js/
Modified:
openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml
openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml
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/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/webapp/css/room.css
Modified: openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml?rev=1790877&r1=1790876&r2=1790877&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml (original)
+++ openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml Mon Apr 10 16:58:56 2017
@@ -7,9 +7,9 @@
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
@@ -19,10 +19,10 @@
-->
<!DOCTYPE project>
<project name="openmeetings" basedir="./" default="client.only"
- xmlns="antlib:org.apache.tools.ant"
- xmlns:rat="antlib:org.apache.rat.anttasks"
- xmlns:ivy="antlib:org.apache.ivy.ant"
- xmlns:artifact="antlib:org.apache.maven.artifact.ant"
+ xmlns="antlib:org.apache.tools.ant"
+ xmlns:rat="antlib:org.apache.rat.anttasks"
+ xmlns:ivy="antlib:org.apache.ivy.ant"
+ xmlns:artifact="antlib:org.apache.maven.artifact.ant"
>
<property name="laszlo46.home" value="${openlaszlo}/openlaszlo46" />
<!-- LPS Properties -->
@@ -32,7 +32,7 @@
<path id="laszlo46.lib">
<fileset dir="${laszlo46.home}/WEB-INF/lib" includes="*.jar" />
</path>
-
+
<target name="client.only" depends="compile.flex, compile.laszlo.networktesting" unless="client-already-built">
<property name="client-already-built" value="true"/>
</target>
@@ -77,19 +77,19 @@
<condition property="isWindows">
<os family="windows" />
</condition>
-
+
<condition property="isUnix">
<os family="unix" />
</condition>
-
+
<target name="if_windows" if="isWindows">
<property name="mxmlc_bin" value="mxmlc.bat" />
</target>
-
+
<target name="if_unix" if="isUnix">
<property name="mxmlc_bin" value="mxmlc" />
</target>
-
+
<target name="-compile.flex" description="compile flash application" depends="if_windows, if_unix">
<exec dir="${flex.src.dir}" executable="${laszlo46.home}/WEB-INF/flexsdk/4.15.0/bin/${mxmlc_bin}">
<arg value="main.mxml"/>
@@ -97,11 +97,11 @@
<env key="PLAYERGLOBAL_HOME" value="${laszlo46.home}/WEB-INF/flexsdk/4.15.0/frameworks/libs/player"/>
</exec>
</target>
-
+
<target name="compile.flex" depends="compile.flex.debug">
<antcall target="-compile.flex" inheritAll="true" inheritRefs="true"/>
</target>
-
+
<target name="compile.flex.debug">
<!--antcall target="-compile.flex" inheritAll="true" inheritRefs="true"/-->
</target>
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=1790877&r1=1790876&r2=1790877&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml (original)
+++ openmeetings/application/trunk/openmeetings-flash/src/main/flex/main.mxml Mon Apr 10 16:58:56 2017
@@ -20,25 +20,18 @@
-->
<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"
+ xmlns:mx="library://ns.adobe.com/flex/mx"
+ width="570" height="900" pageTitle="Openmeetings"
preinitialize="init()" fontSize="12" applicationComplete="appInit()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<mx:TraceTarget/>
</fx:Declarations>
<fx:Script><![CDATA[
- import mx.collections.ArrayCollection;
import mx.core.FlexGlobals;
+
import org.apache.openmeetings.OmVideo;
- private static const MODE_N:String = "n";
- private static const MODE_A:String = "a";
- private static const MODE_V:String = "v";
- private static const MODE_AV:String = "av";
- private static const APP_WIDTH:int = 540;
- private static const LEFT_WIDTH:int = 280;
- private static const RIGHT_WIDTH:int = 240;
- private var debugEnabled:Boolean = true;
private var sid:String;
private var roomid:int;
private var audioOnly:Boolean = false;
@@ -49,6 +42,8 @@
private var echoPath:int = 256;
private var echoSuppression:Boolean = true;
private var microphoneRateBest:int = 22;//5, 8, 11, 22, and 44
+ private var selectedMic:int = -1;
+ private var selectedCam:int = -1;
private var video:OmVideo;
private var recName:String;
private var codec:String = OmVideo.CODEC_H264;
@@ -58,42 +53,9 @@
private var app:String;
[Bindable]
private var interview:Boolean = false;
- [Bindable]
- private var debugStr:String = "";
-
- private function setDimensions(width:int, height:int):void {
- mainSetupGroup.width = width;
- //mainSetupGroup.height = height;
- }
-
- public function debug(str:String):void {
- if (debugEnabled) {
- debugStr += str + "\n";
- trace(str + "\n");
- }
- }
-
- private function store():void {
- var t:SharedObject = SharedObject.getLocal('userdata');
- var g:Object = t.data ? t.data : new Object();
- g["cam"] = cams.selectedItem.data;
- g["mic"] = mics.selectedItem.data;
- g["avstored"] = modes.selectedItem.data;
- g["savecamdata"] = remember.selected;
- g["width"] = ress.selectedItem.width;
- g["height"] = ress.selectedItem.height;
- t.flush();
- }
-
- private static function getStoredProp(prop:String):String {
- //Initialize and get eventually stored property
- var t:SharedObject = SharedObject.getLocal('userdata');
- var g:Object = t.data;
- return g != null ? "" + g[prop] : null;
- }
private function init():void {
- debug("init()");
+ trace("init()");
var tla:Object = FlexGlobals.topLevelApplication;
sid = tla.parameters['sid'];
roomid = tla.parameters['roomid'];
@@ -112,40 +74,8 @@
app = tla.parameters['app'];
}
- private function selectListItem(combo:ComboBox, selected:int):void {
- combo.callLater(function ():void {
- if (combo.dataProvider && combo.dataProvider.length > 0) {
- combo.selectedItem = combo.dataProvider.getItemAt(selected < combo.dataProvider.length ? selected : 0);
- }
- });
- }
-
- private function getItemIdx(combo:ComboBox, data:String):int {
- var idx:int = 0;
- for (var i:int = 0; i < combo.dataProvider.length; ++i) {
- if (combo.dataProvider[i].data == data) {
- idx = i;
- break;
- }
- }
- return idx;
- }
-
- private function fillDeviceList(list:Array, combo:ComboBox, prop:String):int {
- //Initialize and get eventually stored property
- var dev:int = parseInt(getStoredProp(prop));
-
- var items:ArrayCollection = new ArrayCollection();
- //Get all available devices
- var foundStoredDev:int = -1;
- for (var i:int = 0; i < list.length; ++i) {
- items.addItem({label: list[i], data: i});
- if (i == dev) {
- foundStoredDev = i;
- }
- }
- combo.dataProvider = items;
- return foundStoredDev;
+ private function debug(str:String):void {
+ ExternalInterface.call("console.log", str);
}
private function camAvail():Boolean {
@@ -158,101 +88,41 @@
private function appInit():void {
video = new OmVideo(videoDisplay, codec, protocol + "://" + host + ":" + port + "/" + app);
- var modItems:ArrayCollection = new ArrayCollection();
- if (camAvail() && micAvail()) {
- modItems.addItem({label: getLabel(448), data: MODE_AV});
- }
- if (camAvail()) {
- var cameras:Array = Camera.names;
- var foundedCam:int = fillDeviceList(cameras, cams, "cam");
- selectListItem(cams, foundedCam);
- modItems.addItem({label: getLabel(450), data: MODE_V});
- }
- if (micAvail()) {
- var micros:Array = Microphone.names;
- var foundedMic:int = fillDeviceList(micros, mics, "mic");
- selectListItem(mics, foundedMic);
- modItems.addItem({label: getLabel(449), data: MODE_A});
- }
- modItems.addItem({label: getLabel(451), data: MODE_N});
- modes.dataProvider = modItems;
-
- var avIdx:int = getItemIdx(modes, getStoredProp("avstored"));
- debug("selected avIdx::" + avIdx);
- selectListItem(modes, avIdx);
var tla:Object = FlexGlobals.topLevelApplication;
- var resolutions:Array = JSON.parse(tla.parameters['resolutions']) as Array;
- var resItems:ArrayCollection = new ArrayCollection();
- var idx:int = 0;
- var storedWidth:int = parseInt(getStoredProp("width"));
- var storedHeight:int = parseInt(getStoredProp("height"));
- for (var i:int = 0; i < resolutions.length; ++i) {
- var r:Object = resolutions[i];
- resItems.addItem({label: r.width + 'x' + r.height + ' [' + r.label + ']', width: r.width, height: r.height});
- if (!isNaN(storedWidth) && storedWidth > 0 && !isNaN(storedHeight) && storedHeight > 0) {
- if (r.width == storedWidth && r.height == storedHeight) {
- idx = i;
- }
- } else if (r.default) {
- idx = i;
- }
- }
- ress.dataProvider = resItems;
- selectListItem(ress, idx);
- var resI:Object = ress.dataProvider.getItemAt(idx > -1 ? idx : 0);
- setResolution(resI.width, resI.height, false);
- setMode(modes.dataProvider.getItemAt(avIdx < modes.dataProvider.length ? avIdx : 0).data);
-
- remember.selected = true == getStoredProp("savecamdata");
- }
-
- public function getLabel(id:int):String {
- return labels.hasOwnProperty("" + id) ? labels[id] : (debugEnabled ? "[Missing " + id + "]" : "");
- }
-
- private function setMode(mode:String):void {
- var camVisible:Boolean = true;
- var micVisible:Boolean = true;
- var textVisible:Boolean = false;
- switch (mode) {
- case MODE_AV:
- break;
- case MODE_A:
- camVisible = false;
- break;
- case MODE_V:
- micVisible = false;
- break;
- case MODE_N:
- camVisible = false;
- micVisible = false;
- textVisible = true;
- break;
- default:
- debug("no valid device Setup chosen");
- break;
- }
- camGroup.visible = camVisible;
- micGroup.visible = micVisible;
- noAv.visible = textVisible;
- startTest.visible = !textVisible;
- videoGroup.visible = !textVisible;
- videoScroller.visible = camVisible;
- playGroup.visible = !textVisible;
- resGroup.visible = interview ? false : camVisible;
- attachCamera();
- }
-
- private function modeChanged(e:Event):void {
- setMode(e.target.selectedItem.data);
+ ExternalInterface.addCallback("getDevices", function ():Object {
+ return {
+ cams: Camera.names
+ , mics: Microphone.names
+ };
+ });
+ ExternalInterface.addCallback("camChanged", function (val:int):void {
+ selectedCam = val;
+ camChanged(null);
+ });
+ ExternalInterface.addCallback("micChanged", function (val:int):void {
+ selectedMic = val;
+ camChanged(null);
+ });
+ ExternalInterface.addCallback("resChanged", function (width:int, height:int):void {
+ setResolution(width, height, true);
+ });
+ ExternalInterface.addCallback("close", function ():void {
+ video.reset();
+ });
+ ExternalInterface.addCallback("init", function (camIdx:int, micIdx:int, width:int, height:int):void {
+ selectedCam = camIdx;
+ selectedMic = micIdx;
+ setResolution(width, height, true);
+ });
+ ExternalInterface.call("VideoSettings.initSwf");
}
private function getMic():Microphone {
debug("Entering getMic ...");
var _micro:Microphone = null;
- if (micGroup.visible) {
- _micro = echoPath == 0 ? Microphone.getMicrophone(mics.selectedItem.data) : Microphone.getEnhancedMicrophone(mics.selectedItem.data);
+ if (selectedMic > -1) {
+ _micro = echoPath == 0 ? Microphone.getMicrophone(selectedMic) : Microphone.getEnhancedMicrophone(selectedMic);
if (_micro != null && echoPath == 256) {
var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
@@ -275,31 +145,31 @@
debug("canvas.echoSuppression: " + echoSuppression);
_micro.setUseEchoSuppression(echoSuppression);
}
+ debug("... getMic DONE" + _micro);
}
- debug("... getMic DONE" + _micro);
return _micro;
}
private function getCam():Camera {
debug("Entering getCam ...");
- if (!videoScroller.visible) {
- return null;
- }
- var _camera:Camera = Camera.getCamera(cams.selectedItem.data);
- if (_camera != null && !_camera.muted) {
- //FIXME need to be unified
- if (interview) {
- //we need a fixed frame rate for the videos to merge them later on
- _camera.setMode(video.width, video.height, 24);
- debug("IS INTERVIEW ");
- _camera.setQuality(0, 98);
- } else {
- _camera.setMode(video.width, video.height, FPS);
- debug("IS NO INTERVIEW ");
- _camera.setQuality(bandwidth, quality);
+ var _camera:Camera = null;
+ if (selectedCam > -1) {
+ _camera = Camera.getCamera("" + selectedCam);
+ if (_camera != null && !_camera.muted) {
+ //FIXME need to be unified
+ if (interview) {
+ //we need a fixed frame rate for the videos to merge them later on
+ _camera.setMode(video.width, video.height, 24);
+ debug("IS INTERVIEW ");
+ _camera.setQuality(0, 98);
+ } else {
+ _camera.setMode(video.width, video.height, FPS);
+ debug("IS NO INTERVIEW ");
+ _camera.setQuality(bandwidth, quality);
+ }
}
+ debug("... getCam DONE " + _camera);
}
- debug("... getCam DONE " + _camera);
return _camera;
}
@@ -307,7 +177,7 @@
if (!camAvail()) {
return;
}
- debug("Camera selected:: " + cams.selectedItem.data);
+ debug("Camera selected:: " + selectedCam);
var cam:Camera = getCam();
debug("Camera selected:: " + cam);
if (cam != null) {
@@ -316,11 +186,14 @@
video.attachCamera(cam);
cam.addEventListener(StatusEvent.STATUS, function (event:StatusEvent):void {
debug("cameraStatusHandler! " + event);
- cam.removeEventListener(StatusEvent.STATUS, arguments.callee);
- if (cam.muted) {
- debug("Unable to connect to active camera.");
- } else {
- _attachCamera(cam);
+ //cam.removeEventListener(StatusEvent.STATUS, arguments.callee);
+ switch (event.code) {
+ case 'Camera.Muted':
+ debug("Unable to connect to active camera.");
+ break;
+ case 'Camera.Unmuted':
+ _attachCamera(getCam());
+ break;
}
});
} else {
@@ -345,7 +218,7 @@
});
}
}
- }
+ }
}
private function _attachCamera(cam:Camera):void {
@@ -368,141 +241,57 @@
debug("onselect WxH :: " + width + "x" + height);
video.resize(width, height);
- videoScroller.width = Math.min(width, RIGHT_WIDTH);
- videoScroller.height = Math.min(height, 200);
- var newWidth:int = Math.max(APP_WIDTH, APP_WIDTH + videoScroller.width - RIGHT_WIDTH);
- var newHeight:int = Math.max(500, 500 + videoScroller.height - 180);
-
- var yPos:int = (startTest as DisplayObject).localToGlobal(new Point()).y;
- debug("GLOBAL Y:: " + yPos);
- playGroup.y = Math.max(yPos, videoScroller.height);
- setDimensions(newWidth, newHeight);
+
if (attach) {
attachCamera();
}
}
}
- private function resChanged(e:Event):void {
- setResolution(e.target.selectedItem.width, e.target.selectedItem.height, true);
- }
-
private function camChanged(e:Event):void {
attachCamera();
}
- private function startConf(e:Event):void {
- store();
- }
-
private function playTestRecording():void {
video.play(recName);
}
private function startTestRecording():void {
- if (!noAv.visible) {
- startTest.enabled = false;
- play.enabled = false;
- 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 {
- fill.width = mic.activityLevel * RIGHT_WIDTH / 100;
- trace("activity: " + mic.activityLevel);
- });
- recTimer.addEventListener(TimerEvent.TIMER, function (event:TimerEvent):void {
- timerText.text = --counter + " sec";
- if (counter == 0) {
- timerText.visible = false;
- startTest.enabled = true;
- play.enabled = true;
- playTestRecording();
- micTimer.stop();
- mic.removeEventListener(ActivityEvent.ACTIVITY, micActivityHandler);
- }
- });
- recTimer.start();
- micTimer.start();
+ 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);
});
- }
+ 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);
+ }
+ });
+ recTimer.start();
+ micTimer.start();
+ });
}
- function micActivityHandler(event:ActivityEvent):void{
+ private function micActivityHandler(event:ActivityEvent):void {
//Do nothing, it just need to be there.
}
- ]]>
- </fx:Script>
+ ]]></fx:Script>
- <s:Group id="mainSetupGroup" width="{APP_WIDTH}">
- <s:layout>
- <s:VerticalLayout paddingLeft="5" paddingRight="5"/>
- </s:layout>
- <mx:Text width="100%" fontWeight="bold" text="{getLabel(758)}"/>
- <s:HGroup>
- <s:VGroup width="{LEFT_WIDTH}">
- <mx:Text text="{getLabel(447)}"/>
- <mx:ComboBox id="modes" width="{LEFT_WIDTH}" change="modeChanged(event)"/>
- <s:VGroup id="av">
- <s:VGroup id="camGroup">
- <mx:Text text="{getLabel(52)}"/>
- <mx:ComboBox id="cams" width="{LEFT_WIDTH}" change="camChanged(event)"/>
- </s:VGroup>
- <s:VGroup id="micGroup">
- <mx:Text text="{getLabel(53)}"/>
- <mx:ComboBox id="mics" width="{LEFT_WIDTH}"/>
- </s:VGroup>
- <s:VGroup id="resGroup">
- <s:Group><mx:Text text="{getLabel(1429)}"/><mx:Image x="260" source="../images/error.png" toolTip="{getLabel(1430)}"/></s:Group>
- <mx:ComboBox id="ress" width="{LEFT_WIDTH}" change="resChanged(event)"/>
- </s:VGroup>
- <s:Group width="100%">
- <s:layout><s:HorizontalLayout horizontalAlign="right"/></s:layout>
- <s:Button id="startTest" label="{getLabel(775)}" click="startTestRecording()"/><!--FIXME should be disabled until stream is attached-->
- </s:Group>
- </s:VGroup>
- <mx:Text text="{getLabel(452)}" id="noAv" visible="false"/>
- </s:VGroup>
- <s:Group id="videoGroup">
- <s:Scroller id="videoScroller">
- <s:Group id="videoScrollGroup">
- <mx:UIComponent id="videoDisplay" width="0" height="0" />
- </s:Group>
- </s:Scroller>
- <s:Label id="timerText" height="20" width="45" x="{videoGroup.width - 60}" y="5" paddingLeft="5" paddingTop="5"
- visible="false" backgroundColor="0xf5f5f5" fontWeight="bold"><s:text></s:text></s:Label>
- <s:VGroup id="playGroup">
- <s:Group>
- <s:Graphic x="0" z="1">
- <s:Rect width="{RIGHT_WIDTH}" height="20">
- <s:fill><s:SolidColor color="white"/></s:fill>
- <s:stroke><s:SolidColorStroke color="black" weight="2"/></s:stroke>
- </s:Rect>
- </s:Graphic>
- <mx:Image id="fill" source="../images/level_meter.png" x="2" y="1" z="3" width="0"/>
- <mx:Text text="{getLabel(767)}" x="0" z="5"/>
- </s:Group>
- <s:Group width="100%">
- <s:layout><s:HorizontalLayout horizontalAlign="right"/></s:layout>
- <s:Button id="play" label="{getLabel(764)}" enabled="false" click="playTestRecording()"/>
- </s:Group>
- </s:VGroup>
- </s:Group>
- </s:HGroup>
- <s:HGroup><mx:Image source="../images/info.png"/><mx:Text text="{getLabel(765)}" width="{APP_WIDTH - 70}"/></s:HGroup>
- <s:Group width="100%">
- <s:layout><s:HorizontalLayout horizontalAlign="right"/></s:layout>
- <s:Button id="cancel" label="{getLabel(918)}"/>
- <s:Button id="start" label="{getLabel(interview ? 54 : 761)}" click="startConf(event)"/>
- </s:Group>
- <s:CheckBox id="remember" label="{getLabel(762)}" />
- </s:Group>
- <s:TextArea id="traceArea" y="460" width="400" height="400" text="{debugStr}"/>
+ <mx:UIComponent id="videoDisplay" width="0" height="0" />
+ <s:Label id="timerText" height="20" width="45" x="20" y="5" paddingLeft="5" paddingTop="5"
+ visible="false" backgroundColor="0xf5f5f5" fontWeight="bold"><s:text></s:text></s:Label>
</s:Application>
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=1790877&r1=1790876&r2=1790877&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 Mon Apr 10 16:58:56 2017
@@ -76,6 +76,7 @@ import org.apache.wicket.markup.head.Jav
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.head.PriorityHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.protocol.http.ClientProperties;
import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
@@ -121,7 +122,8 @@ public class RoomPanel extends BasePanel
URL url = new URL(WebSession.get().getExtendedProperties().getCodebase());
String path = url.getPath();
path = path.substring(1, path.indexOf('/', 2) + 1);
- target.appendJavaScript(String.format("initVideo(%s);", new JSONObject()
+ ClientProperties cp = WebSession.get().getClientInfo().getProperties();
+ target.appendJavaScript(String.format("VideoSettings.init(%s);", new JSONObject()
.put("uid", getClient().getUid())
.put("audioOnly", r.isAudioOnly())
.put("SID", WebSession.getSid())
@@ -130,8 +132,7 @@ public class RoomPanel extends BasePanel
.put("host", url.getHost())
//.put("port", cfgDao.getConfValue(CONFIG_FLASH_PORT, String.class, ""))
.put("app", path + r.getId())
- .put("labels", SwfPanel.getStringLabels("448", "449", "450", "451", "758", "447", "52", "53"
- , "1429", "1430", "775", "452", "767", "764", "765", "918", "54", "761", "762"))
+ .put("wmode", cp.isBrowserInternetExplorer() && cp.getBrowserVersionMajor() == 11 ? "opaque" : "direct")
.toString()
));
} catch (NullPointerException|MalformedURLException e) {
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=1790877&r1=1790876&r2=1790877&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 Mon Apr 10 16:58:56 2017
@@ -16,45 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-function initVideo(_options) {
- return; //commented until video is implemented
- var options = $.extend({bgcolor: "#ffffff"
- , resolutions: JSON.stringify([{label: "4:3 (~6 KByte/sec)", width: 40, height: 30}
- , {label: "4:3 (~12 KByte/sec)", width: 80, height: 60}
- , {label: "4:3 (~20 KByte/sec)", width: 120, height: 90, "default": true}
- , {label: "QQVGA 4:3 (~36 KByte/sec)", width: 160, height: 120}
- , {label: "4:3 (~40 KByte/sec)", width: 240, height: 180}
- , {label: "HVGA 4:3 (~56 KByte/sec)", width: 320, height: 240}
- , {label: "4:3 (~60 KByte/sec)", width: 480, height: 360}
- , {label: "4:3 (~68 KByte/sec)", width: 640, height: 480}
- , {label: "XGA 4:3", width: 1024, height: 768}
- , {label: "16:9", width: 256, height: 150}
- , {label: "WQVGA 9:5", width: 432, height: 240}
- , {label: "pseudo 16:9", width: 480, height: 234}
- , {label: "16:9", width: 512, height: 300}
- , {label: "nHD 16:9", width: 640, height: 360}
- , {label: "16:9", width: 1024, height: 600}])
- }, _options);
+function initVideo(el, id, options) {
var type = 'application/x-shockwave-flash';
var src = 'public/main.swf?cache' + new Date().getTime();
- var r = $('<div class="room video">').attr("id", "video" + options.uid);
- var o = $('<object>').attr('type', type).attr('data', src).attr('width', 640).attr('height', 480);
+ var o = $('<object>').attr('id', id).attr('type', type).attr('data', src).attr('width', options.width).attr('height', options.height);
o.append($('<param>').attr('name', 'quality').attr('value', 'best'))
- .append($('<param>').attr('name', 'wmode').attr('value', 'transparent'))
+ .append($('<param>').attr('name', 'wmode').attr('value', options.wmode))
.append($('<param>').attr('name', 'allowscriptaccess').attr('value', 'sameDomain'))
.append($('<param>').attr('name', 'allowfullscreen').attr('value', 'false'))
.append($('<param>').attr('name', 'flashvars').attr('value', $.param(options)));
- $('#roomMenu').parent().append(r.append(o));
- /*
- .attr('wmode', 'window').attr('allowfullscreen', true)
- .attr('width', options.width).attr('height', options.height)
- .attr('id', 'lzapp').attr('name', 'lzapp')
- .attr('flashvars', escape($.param(options)))
- .attr('swliveconnect', true).attr('align', 'middle')
- .attr('allowscriptaccess', 'sameDomain').attr('type', 'application/x-shockwave-flash')
- .attr('pluginspage', 'http://www.macromedia.com/go/getflashplayer')
- */
- r.dialog({dialogClass: "video"});
+ el.append(o);
+ return o;
}
function setRoomSizes() {
@@ -105,7 +77,6 @@ function roomLoad() {
setRoomSizes();
}
});
- VideoSettings.init();
Wicket.Event.subscribe("/websocket/closed", roomClosed);
}
function roomUnload() {
@@ -122,10 +93,25 @@ function startPrivateChat(el) {
$('#chatMessage .wysiwyg-editor').click();
}
var VideoSettings = (function() {
- var self = {}, vs, lm;
- function _init() {
+ var self = {}, vs, lm, swf, s, cam, mic, res, inited = false;
+ function _load() {
+ s = {};
+ try {
+ s = JSON.parse(localStorage.getItem('openmeetings')) || s;
+ } catch (e) {}
+ if (!s.video) {
+ s.video = {};
+ }
+ }
+ function _save() {
+ localStorage.setItem('openmeetings', JSON.stringify(s));
+ }
+ function _init(options) {
vs = $('#video-settings');
lm = vs.find('.level-meter');
+ cam = vs.find('select.cam');
+ mic = vs.find('select.mic');
+ res = vs.find('select.cam-resolution');
vs.dialog({
classes: {
'ui-dialog': 'ui-corner-all video'
@@ -139,6 +125,7 @@ var VideoSettings = (function() {
primary: "ui-icon-disk"
}
, click: function() {
+ _save();
vs.dialog("close");
}
}
@@ -151,7 +138,60 @@ 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];
+ vs.find('input, button').prop('disabled', true);
vs.find('button').button();
+ _load();
+ }
+ function _readValues() {
+ s.video.cam = cam.val();
+ s.video.mic = 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));
+ }
+ function _initSwf() {
+ if (!inited) {
+ var obj = swf.getDevices();
+ for (var i = 0; i < obj.cams.length; ++i) {
+ var o = $('<option></option>').attr('value', i).text(obj.cams[i]);
+ if (i == s.video.cam) {
+ o.prop('selected', true);
+ }
+ cam.append(o);
+ }
+ cam.prop('disabled', false).change(function() {
+ _readValues();
+ swf.camChanged(s.video.cam);
+ });
+ for (var i = 0; i < obj.mics.length; ++i) {
+ var o = $('<option></option>').attr('value', i).text(obj.mics[i]);
+ if (i == s.video.mic) {
+ o.prop('selected', true);
+ }
+ mic.append(o);
+ }
+ mic.prop('disabled', false).change(function() {
+ _readValues();
+ swf.micChanged(s.video.mic);
+ });
+ res.change(function() {
+ _readValues();
+ swf.resChanged(s.video.width, s.video.height);
+ });
+ res.find('option').each(function(idx) {
+ var o = $(this).data();
+ if (o.width == s.video.width && o.height == s.video.height) {
+ $(this).prop('selected', true);
+ return false;
+ }
+ });
+ }
+ _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');
@@ -164,6 +204,7 @@ var VideoSettings = (function() {
}
return {
init: _init
+ , initSwf: _initSwf
, open: _open
, 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=1790877&r1=1790876&r2=1790877&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 Mon Apr 10 16:58:56 2017
@@ -87,16 +87,15 @@
</select>
</div>
</div>
- <div class="sett-row">
- <div class="align-right"><button><wicket:message key="775"/></button></div>
+ <div class="sett-row right">
+ <div><button><wicket:message key="775"/></button></div>
</div>
</div>
<div class="vid-block">
- <div>
- </div>
+ <div class="video-conainer"></div>
<div class="level-meter"></div>
- <div class="sett-row">
- <div class="align-right"><button><wicket:message key="764"/></button></div>
+ <div class="sett-row right">
+ <div><button><wicket:message key="764"/></button></div>
</div>
</div>
</div>
Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1790877&r1=1790876&r2=1790877&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css Mon Apr 10 16:58:56 2017
@@ -390,6 +390,13 @@
.ui-dialog.video .sett-row {
padding-top: 10px;
}
+.ui-dialog.video .sett-row.right {
+ text-align: right;
+}
+.ui-dialog.video .vid-block .video-conainer {
+ overflow: auto;
+ max-height: 300px;
+}
.ui-dialog.video .sett-row select, .ui-dialog.video .level-meter {
width: 250px;
}