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 2019/03/13 10:08:19 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2027] Chrome 72+ uses native screen-sharing, sharer dialog displays alert if sharing is not supported

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

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new e7d1ff5  [OPENMEETINGS-2027] Chrome 72+ uses native screen-sharing, sharer dialog displays alert if sharing is not supported
e7d1ff5 is described below

commit e7d1ff51d1bb335dbd12418bd3b52f2899325cab
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Mar 13 17:08:07 2019 +0700

    [OPENMEETINGS-2027] Chrome 72+ uses native screen-sharing, sharer dialog displays alert if sharing is not supported
---
 .../apache/openmeetings/web/room/RoomPanel.html    |  65 ++++++------
 .../org/apache/openmeetings/web/room/raw-sharer.js | 109 +++++++++++----------
 .../apache/openmeetings/web/room/raw-video-util.js |  12 +++
 .../org/apache/openmeetings/web/room/raw-video.js  |   5 +
 4 files changed, 108 insertions(+), 83 deletions(-)

diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
index 50ded0c..fd199e0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
@@ -91,38 +91,41 @@
 			<wicket:message key="1419"/>
 		</div>
 		<div id="sharer" wicket:message="title:730">
-			<div>
-				<span class="label"><wicket:message key="734"/></span>
-				<select name="type" class="type">
-					<option value="screen">Screen</option>
-					<option value="window">Window</option>
-					<option value="application">Application</option>
-					<option value="tab">Tab</option>
-				</select>
+			<h2 class="alert" style="display: none">Screen-sharing is not supported in your browser</h2>
+			<div class="container">
+				<div>
+					<span class="label"><wicket:message key="734"/></span>
+					<select name="type" class="type">
+						<option value="screen">Screen</option>
+						<option value="window">Window</option>
+						<option value="application">Application</option>
+						<option value="tab">Tab</option>
+					</select>
+				</div>
+				<div>
+					<span class="label"><wicket:message key="740"/></span>
+					<input class="width" type="number" value="800"/>
+				</div>
+				<div>
+					<span class="label"><wicket:message key="741"/></span>
+					<input class="height" type="number" value="600"/>
+				</div>
+				<div>
+					<span class="label"><wicket:message key="1089"/></span>
+					<select name="fps" class="fps">
+						<option value="2">2 FPS</option>
+						<option value="5">5 FPS</option>
+						<option value="10" selected>10 FPS</option>
+						<option value="15">15 FPS</option>
+						<option value="20">20 FPS</option>
+						<option value="25">25 FPS</option>
+						<option value="30">30 FPS</option>
+					</select>
+				</div>
+				<hr/>
+				<button class="share-start-stop" wicket:message="data-start:732, data-stop:733"><wicket:message key="732"/></button>
+				<button class="record-start-stop ui-state-error" wicket:message="data-start:871, data-stop:872"><wicket:message key="871"/></button>
 			</div>
-			<div>
-				<span class="label"><wicket:message key="740"/></span>
-				<input class="width" type="number" value="800"/>
-			</div>
-			<div>
-				<span class="label"><wicket:message key="741"/></span>
-				<input class="height" type="number" value="600"/>
-			</div>
-			<div>
-				<span class="label"><wicket:message key="1089"/></span>
-				<select name="fps" class="fps">
-					<option value="2">2 FPS</option>
-					<option value="5">5 FPS</option>
-					<option value="10" selected>10 FPS</option>
-					<option value="15">15 FPS</option>
-					<option value="20">20 FPS</option>
-					<option value="25">25 FPS</option>
-					<option value="30">30 FPS</option>
-				</select>
-			</div>
-			<hr/>
-			<button class="share-start-stop" wicket:message="data-start:732, data-stop:733"><wicket:message key="732"/></button>
-			<button class="record-start-stop ui-state-error" wicket:message="data-start:871, data-stop:872"><wicket:message key="871"/></button>
 		</div>
 		<div id="ask-permission" wicket:message="title:video.permission.title, data-btn-ok:54">
 			<wicket:message key="video.permission.text"/>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
index 7525049..3a764d8 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
@@ -14,57 +14,62 @@ var Sharer = (function() {
 			width: 450
 			, autoOpen: false
 		});
-		type = sharer.find('select.type');
-		const b = kurentoUtils.WebRtcPeer.browser;
-		type.find('option[value="' + (b.name === 'Chrome' ? 'application' : 'tab') + '"]').remove();
-		type.selectmenu({
-			width: 150
-			, disabled: VideoUtil.isEdge()
-		});
-		fps = sharer.find('select.fps').selectmenu({
-			width: 120
-			, disabled: VideoUtil.isEdge()
-		});
-		sbtn = sharer.find('.share-start-stop').button({
-			icon: 'ui-icon-image'
-		}).off().click(function() {
-			if (shareState === SHARE_STOPED) {
-				_setShareState(SHARE_STARTING);
-				VideoManager.sendMessage({
-					id: 'wannaShare'
-					, shareType: type.val()
-					, fps: fps.val()
-					, width: width.val()
-					, height: height.val()
-				});
-			} else {
-				VideoManager.sendMessage({
-					id: 'pauseSharing'
-					, uid: _getShareUid()
-				});
-			}
-		});
-		width = sharer.find('.width');
-		height = sharer.find('.height');
-		rbtn = sharer.find('.record-start-stop').button({
-			icon: 'ui-icon-bullet'
-		}).off().click(function() {
-			if (recState === SHARE_STOPED) {
-				_setRecState(SHARE_STARTING);
-				VideoManager.sendMessage({
-					id: 'wannaRecord'
-					, shareType: type.val()
-					, fps: fps.val()
-					, width: width.val()
-					, height: height.val()
-				});
-			} else {
-				VideoManager.sendMessage({
-					id: 'stopRecord'
-					, uid: _getShareUid()
-				});
-			}
-		});
+		if (!VideoUtil.sharingSupported()) {
+			sharer.find('.container').remove();
+			sharer.find('.alert').show();
+		} else {
+			type = sharer.find('select.type');
+			const b = kurentoUtils.WebRtcPeer.browser;
+			type.find('option[value="' + (b.name === 'Chrome' ? 'application' : 'tab') + '"]').remove();
+			type.selectmenu({
+				width: 150
+				, disabled: VideoUtil.isEdge() || VideoUtil.isChrome72()
+			});
+			fps = sharer.find('select.fps').selectmenu({
+				width: 120
+				, disabled: VideoUtil.isEdge()
+			});
+			sbtn = sharer.find('.share-start-stop').button({
+				icon: 'ui-icon-image'
+			}).off().click(function() {
+				if (shareState === SHARE_STOPED) {
+					_setShareState(SHARE_STARTING);
+					VideoManager.sendMessage({
+						id: 'wannaShare'
+						, shareType: type.val()
+						, fps: fps.val()
+						, width: width.val()
+						, height: height.val()
+					});
+				} else {
+					VideoManager.sendMessage({
+						id: 'pauseSharing'
+						, uid: _getShareUid()
+					});
+				}
+			});
+			width = sharer.find('.width');
+			height = sharer.find('.height');
+			rbtn = sharer.find('.record-start-stop').button({
+				icon: 'ui-icon-bullet'
+			}).off().click(function() {
+				if (recState === SHARE_STOPED) {
+					_setRecState(SHARE_STARTING);
+					VideoManager.sendMessage({
+						id: 'wannaRecord'
+						, shareType: type.val()
+						, fps: fps.val()
+						, width: width.val()
+						, height: height.val()
+					});
+				} else {
+					VideoManager.sendMessage({
+						id: 'stopRecord'
+						, uid: _getShareUid()
+					});
+				}
+			});
+		}
 	}
 	function _setShareState(state) {
 		shareState = state;
@@ -148,7 +153,7 @@ var Sharer = (function() {
 		});
 	};
 	function _getScreenConstraints(sd, sourceId) {
-		//Chrom screen constraints requires old school definition
+		//Chrome screen constraints requires old school definition
 		const cnts = {
 			audio: false
 			, video: {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
index 45941d8..5a43a27 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
@@ -128,6 +128,10 @@ var VideoUtil = (function() {
 			peer = null;
 		}
 	}
+	function _isChrome72() {
+		const b = kurentoUtils.WebRtcPeer.browser;
+		return b.name === 'Chrome' && b.major > 71;
+	}
 	function _isEdge() {
 		const b = kurentoUtils.WebRtcPeer.browser;
 		return b.name === 'Edge';
@@ -165,6 +169,12 @@ var VideoUtil = (function() {
 			//no-op
 		}
 	}
+	function _sharingSupported() {
+		const b = kurentoUtils.WebRtcPeer.browser;
+		return (b.name === 'Edge' && b.major > 16)
+			|| (b.name === 'Firefox')
+			|| (b.name === 'Chrome');
+	}
 
 	self.getVid = _getVid;
 	self.isSharing = _isSharing;
@@ -184,8 +194,10 @@ var VideoUtil = (function() {
 		return opts;
 	};
 	self.isEdge = _isEdge;
+	self.isChrome72 = _isChrome72;
 	self.setPos = _setPos;
 	self.askPermission = _askPermission;
 	self.disconnect = _disconnect;
+	self.sharingSupported = _sharingSupported;
 	return self;
 })();
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
index cd9309a..f34bae5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
@@ -59,6 +59,11 @@ var Video = (function() {
 			cnts = Sharer.baseConstraints(sd);
 			cnts.video.mediaSource = sd.shareType;
 			promise = navigator.mediaDevices.getUserMedia(cnts);
+		} else if (VideoUtil.isChrome72()) {
+			cnts = {
+				video: true
+			};
+			promise = navigator.mediaDevices.getDisplayMedia(cnts);
 		} else if (b.name === 'Chrome') {
 			promise = Sharer.getChromeConstraints(sd).then((_cnts) => {
 				cnts = _cnts;