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;