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/07/25 16:17:17 UTC
[openmeetings] branch 4.0.x updated: [OPENMEETINGS-1142] fallback
device list retrieval is added
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch 4.0.x
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/4.0.x by this push:
new a1290e6 [OPENMEETINGS-1142] fallback device list retrieval is added
a1290e6 is described below
commit a1290e644095498f7b3e07f1f80d910a6074989f
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Jul 25 23:17:07 2018 +0700
[OPENMEETINGS-1142] fallback device list retrieval is added
---
openmeetings-flash/src/main/flex/main.mxml | 18 ++++
.../org/apache/openmeetings/web/room/settings.js | 120 +++++++++++----------
2 files changed, 80 insertions(+), 58 deletions(-)
diff --git a/openmeetings-flash/src/main/flex/main.mxml b/openmeetings-flash/src/main/flex/main.mxml
index d17a2a9..73ca00b 100644
--- a/openmeetings-flash/src/main/flex/main.mxml
+++ b/openmeetings-flash/src/main/flex/main.mxml
@@ -131,6 +131,24 @@
ExternalInterface.addCallback("vidResize", vidResize);
switch (params.mode) {
case 'settings': {
+ ExternalInterface.addCallback("getDevices", function ():Object {
+ var devices:Array = [];
+ for (var i = 0; i < Camera.names.length; ++i) {
+ devices.push({
+ kind: "videoinput"
+ , label: Camera.names[i] || "Camera " + i
+ , deviceId: "camDevice" + i
+ });
+ }
+ for (var i = 0; i < Microphone.names.length; ++i) {
+ devices.push({
+ kind: "audioinput"
+ , label: Microphone.names[i] || "Microphone " + i
+ , deviceId: "micDevice" + i
+ });
+ }
+ return devices;
+ });
ExternalInterface.addCallback("camChanged", function (val:int):void {
selectedCam = val;
video.reset();
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 a7b974b..ae8e585 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
@@ -153,68 +153,72 @@ var VideoSettings = (function() {
el.append(OmUtil.tmpl('#settings-option-loading'));//!settings-option-disabled
el.iconselectmenu('refresh');
}
+ function _fillDevices(devices) {
+ let cCount = 0, mCount = 0;
+ _load();
+ cam.find('option').remove();
+ cam.append(OmUtil.tmpl('#settings-option-disabled'));
+ mic.find('option').remove();
+ mic.append(OmUtil.tmpl('#settings-option-disabled'));
+ 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.mic) {
+ 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.iconselectmenu('refresh');
+ mic.iconselectmenu('refresh');
+ 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;
+ }
+ });
+ res.iconselectmenu('refresh');
+ _readValues();
+ swf.init(s.video.cam, s.video.mic
+ , o.interview ? 320 : s.video.width, o.interview ? 260 : s.video.height);
+ }
function _initDevices() {
- if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
- OmUtil.error('enumerateDevices() not supported.');
- return;
- }
_setLoading(cam);
_setLoading(mic);
- navigator.mediaDevices.getUserMedia({video:true, audio:true})
- .then(function(stream) {
- const devices = navigator.mediaDevices.enumerateDevices()
- .then(function(devices) {
- _clear(stream);
- return devices;
- })
- .catch(function(err) {
- _clear(stream);
- throw err;
- });
- return devices;
- })
- .then(function(devices) {
- let cCount = 0, mCount = 0;
- _load();
- cam.find('option').remove();
- cam.append(OmUtil.tmpl('#settings-option-disabled'));
- mic.find('option').remove();
- mic.append(OmUtil.tmpl('#settings-option-disabled'));
- 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.mic) {
- 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.iconselectmenu('refresh');
- mic.iconselectmenu('refresh');
- 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;
- }
+ if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
+ _fillDevices(swf.getDevices());
+ } else {
+ navigator.mediaDevices.getUserMedia({video:true, audio:true})
+ .then(function(stream) {
+ const devices = navigator.mediaDevices.enumerateDevices()
+ .then(function(devices) {
+ _clear(stream);
+ return devices;
+ })
+ .catch(function(err) {
+ _clear(stream);
+ throw err;
+ });
+ return devices;
+ })
+ .then(function(devices) {
+ _fillDevices(devices);
+ })
+ .catch(function(err) {
+ OmUtil.error(err);
});
- _readValues();
- swf.init(s.video.cam, s.video.mic
- , o.interview ? 320 : s.video.width, o.interview ? 260 : s.video.height);
- })
- .catch(function(err) {
- OmUtil.error(err);
- });
+ }
}
function _initSwf() {
_initDevices();