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/02/28 16:34:21 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2017] initial attempt to fix Safari permission multimedia issue

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 9787b39  [OPENMEETINGS-2017] initial attempt to fix Safari permission multimedia issue
9787b39 is described below

commit 9787b39e6cd607d016e1aad3574c13411dc0c086
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Feb 28 23:31:36 2019 +0700

    [OPENMEETINGS-2017] initial attempt to fix Safari permission multimedia issue
---
 .../apache/openmeetings/web/room/RoomPanel.html    |  3 +++
 .../apache/openmeetings/web/room/raw-video-util.js | 24 ++++++++++++++++++
 .../apache/openmeetings/web/room/wb/raw-player.js  | 29 ++++++++++++++++++----
 3 files changed, 51 insertions(+), 5 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 a0f3dda..2ea2711 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
@@ -123,6 +123,9 @@
 			<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" title="Ask Permission" data-btn-ok="OK">
+			Extra permission is required to play audio/video. Press OK to play video.
+		</div>
 	</div>
 </wicket:panel>
 </html>
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 dcf7304..e14656a 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
@@ -135,6 +135,29 @@ var VideoUtil = (function() {
 	function _setPos(v, pos) {
 		v.dialog('widget').css(pos);
 	}
+	function _askPermission(callback) {
+		const perm = $('#ask-permission');
+		if (undefined === perm.dialog('instance')) {
+			perm.data('callbacks', [callback]).dialog({
+				appendTo: '.room.holder .room.box'
+				, autoOpen: true
+				, buttons: [
+					{
+						text: perm.data('btn-ok')
+						, click: function() {
+							while (perm.data('callbacks').length > 0) {
+								perm.data('callbacks').pop()();
+							}
+							$(this).dialog('close');
+						}
+					}
+				]
+			});
+		} else if (!perm.dialog('isOpen')) {
+			perm.dialog('open')
+		}
+		perm.data('callbacks').push(callback);
+	}
 
 	self.getVid = _getVid;
 	self.isSharing = _isSharing;
@@ -155,5 +178,6 @@ var VideoUtil = (function() {
 	};
 	self.isEdge = _isEdge;
 	self.setPos = _setPos;
+	self.askPermission = _askPermission;
 	return self;
 })();
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-player.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-player.js
index b273d14..83e16d4 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-player.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-player.js
@@ -83,9 +83,15 @@ var Player = (function() {
 	}
 
 	player.create = function(canvas, _o, wb) {
-		const vid = $('<video>').hide().attr('class', 'wb-video slide-' + canvas.slide).attr('id', 'wb-video-' + _o.uid)
-			.attr("width", _o.width).attr("height", _o.height)
-			.append($('<source>').attr('type', 'video/mp4').attr('src', _o._src));
+		const vid = $('<video>').hide()
+			.attr('class', 'wb-video slide-' + canvas.slide)
+			.attr('id', 'wb-video-' + _o.uid)
+			.attr("width", _o.width)
+			.attr("height", _o.height)
+			.prop('controls', true)
+			.append($('<source>')
+				.attr('type', 'video/mp4')
+				.attr('src', _o._src));
 		$('#wb-tab-' + canvas.wbId).append(vid);
 		fabric.Image.fromURL(_o._poster, function(poster) {
 			poster.scaleX = poster.scaleY = _o.width / poster.getOriginalSize().width;
@@ -205,8 +211,21 @@ var Player = (function() {
 				if (group.status.paused) {
 					video.getElement().pause();
 				} else {
-					video.getElement().play();
-					fabric.util.requestAnimFrame(render);
+					const prom = video.getElement().play();
+					if (prom !== undefined) {
+						prom.then(function() {
+							fabric.util.requestAnimFrame(render);
+						}).catch(function(err) {
+							if ('NotAllowedError' === err.name) {
+								VideoUtil.askPermission(function() {
+									video.getElement().play();
+									fabric.util.requestAnimFrame(render);
+								});
+							}
+						});
+					} else {
+						fabric.util.requestAnimFrame(render);
+					}
 				}
 			}
 			group.setPlayable(wb.getRole());