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 2018/03/08 16:08:22 UTC

[openmeetings] branch OPENMEETINGS-1649-kurento updated: [OPENMEETINGS-1649] settings dialog is partially converted

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch OPENMEETINGS-1649-kurento
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/OPENMEETINGS-1649-kurento by this push:
     new 14db49f  [OPENMEETINGS-1649] settings dialog is partially converted
14db49f is described below

commit 14db49f0aebdfc8ae58d023ac4998c192bf48017
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Mar 8 23:08:11 2018 +0700

    [OPENMEETINGS-1649] settings dialog is partially converted
---
 openmeetings-web/pom.xml                           |   7 +-
 .../openmeetings/web/room/VideoSettings.html       |   2 +-
 .../org/apache/openmeetings/web/room/settings.js   | 164 +++++++++++++++------
 openmeetings-web/src/test/jetty/jetty-ssl.xml      |   4 +-
 openmeetings-web/src/test/jetty/jetty.xml          |   2 +-
 openmeetings-web/src/test/resources/keystore       | Bin 0 -> 1821 bytes
 6 files changed, 128 insertions(+), 51 deletions(-)

diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index ad26952..6d9b99b 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -481,12 +481,15 @@
 								<name>current_openmeetings_log_dir</name>
 								<value>${project.build.directory}</value>
 							</systemProperty>
+							<systemProperty>
+								<name>maven.project.build.directory.test-classes</name>
+								<value>${project.basedir}/src/test/resources</value>
+							</systemProperty>
 						</systemProperties>
 						<webApp>
 							<contextPath>/openmeetings</contextPath>
 						</webApp>
-						<!-- jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml</jettyXml-->
-						<jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-http.xml</jettyXml>
+						<jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml</jettyXml>
 					</configuration>
 				</plugin>
 			</plugins>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
index 0cd22a3..b6df63d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
@@ -71,7 +71,7 @@
 				</div>
 			</div>
 			<div class="vid-block">
-				<div class="video-conainer"></div>
+				<div class="video-conainer"><video autoplay="autoplay"></video></div>
 				<div class="level-meter" wicket:message="title:767"></div>
 				<div class="sett-row right">
 					<div><button class="play"><wicket:message key="764"/></button></div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
index dabf32c..b2d6a52 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
@@ -1,7 +1,7 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
 var VideoSettings = (function() {
-	let vs, lm, swf, s, cam, mic, res, o
-		, vidScroll, recBtn, playBtn, recAllowed = false;
+	let vs, lm, s, cam, mic, res, o
+		, vidScroll, vid, recBtn, playBtn, recAllowed = false;
 	function _load() {
 		s = Settings.load();
 		if (!s.video) {
@@ -18,6 +18,20 @@ var VideoSettings = (function() {
 			VideoManager.refresh(o.uid, s.video);
 		}
 	}
+	function _clear() {
+		if (vid.length === 1) {
+			const ms = vid[0].srcObject;
+			if (ms !== null && 'function' === typeof(ms.getAudioTracks)) {
+				ms.getAudioTracks().forEach(function(track) {
+					track.stop();
+				});
+				ms.getVideoTracks().forEach(function(track) {
+					track.stop();
+				});
+				vid[0].srcObject = null;
+			}
+		}
+	}
 	function _init(options) {
 		o = JSON.parse(JSON.stringify(options));
 		vs = $('#video-settings');
@@ -26,12 +40,13 @@ var VideoSettings = (function() {
 		mic = vs.find('select.mic');
 		res = vs.find('select.cam-resolution');
 		vidScroll = vs.find('.vid-block .video-conainer');
+		vid = vidScroll.find('video');
 		recBtn = vs.find('.rec-start').click(function() {
 			recBtn.prop('disabled', true).button('refresh'); //TODO disable drop-downs
-			swf.startRec();
+			//FIXME TODO swf.startRec();
 		});
 		playBtn = vs.find('.play').click(function() {
-			swf.play();
+			//FIXME TODO swf.play();
 		});
 		vs.dialog({
 			classes: {
@@ -47,12 +62,14 @@ var VideoSettings = (function() {
 					}
 					, click: function() {
 						_save(true);
+						_clear();
 						vs.dialog("close");
 					}
 				}
 				, {
 					text: vs.data('btn-cancel')
 					, click: function() {
+						_clear();
 						vs.dialog("close");
 					}
 				}
@@ -64,7 +81,6 @@ var VideoSettings = (function() {
 		o.mode = 'settings';
 		o.rights = (o.rights || []).join();
 		delete o.keycode;
-		//FIXME TODO swf = initSwf(vidScroll, 'main.swf', 'video-settings-swf', o)[0];
 		vs.find('input, button').prop('disabled', true);
 		vs.find('button').button();
 		const rr = vs.find('.cam-resolution').parents('.sett-row');
@@ -80,14 +96,50 @@ var VideoSettings = (function() {
 		recBtn.prop('disabled', !recAllowed && (s.video.cam > -1 || s.video.mic > -1)).button('refresh');
 	}
 	function _readValues() {
+		const v = cam.find('option:selected')
+			, m = mic.find('option:selected')
+			, o = res.find('option:selected').data();
 		s.video.cam = 1 * cam.val();
 		s.video.mic = 1 * mic.val();
-		const 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));
+		vid.width(o.width).height(o.height);
 		vidScroll.scrollLeft(Math.max(0, s.video.width / 2 - 150))
 			.scrollTop(Math.max(0, s.video.height / 2 - 110));
+		_clear();
+		let enabled = false;
+		const constraints = {};
+		//TODO add check if constraint is supported
+		if (s.video.cam > -1) {
+			constraints.video = {
+				width: o.width
+				, height: o.height
+				, deviceId: { exact: v.data('device-id')  }
+				, frameRate: { max: 30 }
+			};
+			enabled = true;
+		} else {
+			constraints.video = false;
+		}
+		//TODO enable audio for recordings only
+		if (s.video.mic > -1) {
+			constraints.audio = {
+				sampleSize: 22
+				, echoCancellation: true
+			};
+			enabled = true;
+		} else {
+			constraints.audio = false;
+		}
+		if (enabled) {
+			navigator.mediaDevices.getUserMedia(constraints)
+				.then(function(stream) {
+					vid[0].srcObject = stream;
+				})
+				.catch(function(err) {
+					_error(err.name + ": " + err.message);
+				});
+		}
 		_updateRec();
 	}
 
@@ -102,53 +154,75 @@ var VideoSettings = (function() {
 	function _micActivity(level) {
 		lm.progressbar("value", Math.max(0, level));
 	}
-	function _initSwf() {
-		const obj = swf.getDevices();
-		cam.find('option[value!="-1"]').remove();
-		for (let i = 0; i < obj.cams.length; ++i) {
-			const o = $('<option></option>').attr('value', i).text(obj.cams[i]);
-			if (i === s.video.cam) {
-				o.prop('selected', true);
-			}
-			cam.append(o);
+	function _error(msg) {
+		//FIXME TODO status field
+		console.error(msg);
+	}
+	function _initDevices() {
+		if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
+			_error("enumerateDevices() not supported.");
+			return;
 		}
-		cam.prop('disabled', false).change(function() {
-			_readValues();
-			swf.camChanged(s.video.cam);
-		});
+		cam.find('option[value!="-1"]').remove();
 		mic.find('option[value!="-1"]').remove();
-		for (let i = 0; i < obj.mics.length; ++i) {
-			const 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() {
-			const 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);
+		navigator.mediaDevices.getUserMedia({video:true, audio:true})
+			.then(function(stream) {
+				return navigator.mediaDevices.enumerateDevices()
+					.then(function(devices) {
+						return devices;
+					})
+					.catch(function(err) { throw err; });
+			})
+			.then(function(devices) {
+				let cCount = 0, mCount = 0;
+				devices.forEach(function(device) {
+					if ('audioinput' === device.kind) {
+						const o = $('<option></option>').attr('value', mCount).text(device.label)
+							.data('device-id', device.deviceId);
+						if (mCount === s.video.cam) {
+							o.prop('selected', true);
+						}
+						mic.append(o);
+						mCount++;
+					} else if ('videoinput' === device.kind) {
+						const o = $('<option></option>').attr('value', cCount).text(device.label)
+							.data('device-id', device.deviceId);
+						if (cCount === s.video.cam) {
+							o.prop('selected', true);
+						}
+						cam.append(o);
+						cCount++;
+					}
+				});
+				cam.prop('disabled', false).change(function() {
+					_readValues();
+				});
+				mic.prop('disabled', false).change(function() {
+					_readValues();
+				});
+				res.change(function() {
+					_readValues();
+				});
+				res.find('option').each(function() {
+					const o = $(this).data();
+					if (o.width === s.video.width && o.height === s.video.height) {
+						$(this).prop('selected', true);
+						return false;
+					}
+				});
+				_readValues();
+			})
+			.catch(function(err) {
+				_error(err.name + ": " + err.message);
+			});
 	}
 	function _open() {
 		recAllowed = false;
 		vs.dialog('open');
+		_initDevices();
 	}
 	return {
 		init: _init
-		, initSwf: _initSwf
 		, open: _open
 		, allowRec: _allowRec
 		, allowPlay: _allowPlay
diff --git a/openmeetings-web/src/test/jetty/jetty-ssl.xml b/openmeetings-web/src/test/jetty/jetty-ssl.xml
index dad4b38..a739639 100644
--- a/openmeetings-web/src/test/jetty/jetty-ssl.xml
+++ b/openmeetings-web/src/test/jetty/jetty-ssl.xml
@@ -23,8 +23,8 @@
 <!-- ============================================================= -->
 <Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
   <Set name="KeyStorePath"><Property name="maven.project.build.directory.test-classes" default="." />/<Property name="jetty.keystore" default="keystore"/></Set>
-  <Set name="KeyStorePassword"><Property name="jetty.keystore.password" default="wicket"/></Set>
-  <Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" default="wicket"/></Set>
+  <Set name="KeyStorePassword"><Property name="jetty.keystore.password" default="openmeetings"/></Set>
+  <Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" default="openmeetings"/></Set>
   <Set name="EndpointIdentificationAlgorithm"></Set>
   <Set name="ExcludeCipherSuites">
     <Array type="String">
diff --git a/openmeetings-web/src/test/jetty/jetty.xml b/openmeetings-web/src/test/jetty/jetty.xml
index edaeb72..8ddca51 100644
--- a/openmeetings-web/src/test/jetty/jetty.xml
+++ b/openmeetings-web/src/test/jetty/jetty.xml
@@ -23,7 +23,7 @@
 	<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
 		<Set name="secureScheme">https</Set>
 		<Set name="securePort">
-			<Property name="jetty.secure.port" default="8443" />
+			<Property name="jetty.secure.port" default="5443" />
 		</Set>
 		<Set name="outputBufferSize">32768</Set>
 		<Set name="requestHeaderSize">8192</Set>
diff --git a/openmeetings-web/src/test/resources/keystore b/openmeetings-web/src/test/resources/keystore
new file mode 100644
index 0000000..8cc07dc
Binary files /dev/null and b/openmeetings-web/src/test/resources/keystore differ

-- 
To stop receiving notification emails like this one, please contact
solomax@apache.org.