提交 2a5d664c authored 作者: Brian West's avatar Brian West

Merge pull request #453 in FS/freeswitch from…

Merge pull request #453 in FS/freeswitch from ~JMESQUITA/freeswitch:bugfix/FS-8043-doesn-t-appear-to-use-the-selected to master

* commit '045550b0':
  FS-8043: [verto_communicator] Adjust to improved verto API and refactor how we select cameras
...@@ -110,6 +110,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora ...@@ -110,6 +110,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
videoDevices: [], videoDevices: [],
audioDevices: [], audioDevices: [],
shareDevices: [], shareDevices: [],
videoQuality: [],
extension: $cookieStore.get('verto_demo_ext'), extension: $cookieStore.get('verto_demo_ext'),
name: $cookieStore.get('verto_demo_name'), name: $cookieStore.get('verto_demo_name'),
email: $cookieStore.get('verto_demo_email'), email: $cookieStore.get('verto_demo_email'),
...@@ -155,34 +156,34 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora ...@@ -155,34 +156,34 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
$rootScope.$emit('call.incoming', number); $rootScope.$emit('call.incoming', number);
} }
function getVideoParams() { function updateResolutions(supportedResolutions) {
var maxWidth, maxHeight; console.debug('Attempting to sync supported and available resolutions');
maxWidth = data.bestWidth; var removed = 0;
maxHeight = data.bestHeight;
if(!data.bestWidth) { angular.forEach(videoQuality, function(resolution, id) {
if (videoResolution[data.vidQual]) { var supported = false;
maxWidth = videoResolution[data.vidQual].width; angular.forEach(supportedResolutions, function(res) {
} var width = res[0];
} var height = res[1];
if(resolution.width == width && resolution.height == height) {
supported = true;
}
});
if(!data.bestHeight) { if(!supported) {
if (videoResolution[data.vidQual]) { delete videoQuality[id];
maxHeight = videoResolution[data.vidQual].height; ++removed;
} }
} });
return { videoQuality.length = videoQuality.length - removed;
minWidth: videoResolution[data.vidQual].width, data.videoQuality = videoQuality;
minHeight: videoResolution[data.vidQual].height, data.vidQual = (videoQuality.length > 0) ? videoQuality[videoQuality.length - 1].id : null;
maxWidth: maxWidth,
maxHeight: maxHeight,
minFrameRate: 15,
vertoBestFrameRate: 30
}; return videoQuality;
} };
var callState = { var callState = {
muteMic: false, muteMic: false,
...@@ -199,118 +200,122 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora ...@@ -199,118 +200,122 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
videoResolution: videoResolution, videoResolution: videoResolution,
bandwidth: bandwidth, bandwidth: bandwidth,
refreshDevices: function(callback) { refreshDevicesCallback : function refreshDevicesCallback() {
console.debug('Attempting to refresh the devices.'); data.videoDevices = [];
function refreshDevicesCallback() { data.shareDevices = [{
data.videoDevices = [{ id: 'screen',
id: 'none', label: 'Screen'
label: 'No camera' }];
}]; data.audioDevices = [];
data.shareDevices = [{
id: 'screen', for (var i in jQuery.verto.videoDevices) {
label: 'Screen' var device = jQuery.verto.videoDevices[i];
}]; if (!device.label) {
data.audioDevices = []; data.videoDevices.push({
id: 'Camera ' + i,
for (var i in jQuery.verto.videoDevices) { label: 'Camera ' + i
var device = jQuery.verto.videoDevices[i]; });
if (!device.label) { } else {
data.videoDevices.push({ data.videoDevices.push({
id: 'Camera ' + i, id: device.id,
label: 'Camera ' + i label: device.label || device.id
}); });
} else { }
data.videoDevices.push({
id: device.id,
label: device.label || device.id
});
}
// Selecting the first source.
if (i == 0) {
data.selectedVideo = device.id;
}
if (!device.label) { // Selecting the first source.
data.shareDevices.push({ if (i == 0) {
id: 'Share Device ' + i, storage.data.selectedVideo = device.id;
label: 'Share Device ' + i }
});
continue;
}
if (!device.label) {
data.shareDevices.push({ data.shareDevices.push({
id: device.id, id: 'Share Device ' + i,
label: device.label || device.id label: 'Share Device ' + i
}); });
continue;
} }
for (var i in jQuery.verto.audioInDevices) { data.shareDevices.push({
var device = jQuery.verto.audioInDevices[i]; id: device.id,
// Selecting the first source. label: device.label || device.id
if (i == 0) { });
data.selectedAudio = device.id; }
}
if (!device.label) { for (var i in jQuery.verto.audioInDevices) {
data.audioDevices.push({ var device = jQuery.verto.audioInDevices[i];
id: 'Microphone ' + i, // Selecting the first source.
label: 'Microphone ' + i if (i == 0) {
}); storage.data.selectedAudio = device.id;
continue; }
}
if (!device.label) {
data.audioDevices.push({ data.audioDevices.push({
id: device.id, id: 'Microphone ' + i,
label: device.label || device.id label: 'Microphone ' + i
}); });
continue;
} }
console.debug('Devices were refreshed.'); data.audioDevices.push({
}; id: device.id,
label: device.label || device.id
jQuery.verto.refreshDevices(refreshDevicesCallback); });
}
console.debug('Devices were refreshed, checking that we have cameras.');
// This means that we cannot use video!
if (data.videoDevices.length === 0) {
console.log('No camera, disabling video.');
data.canVideo = false;
data.videoDevices.push({
id: 'none',
label: 'No camera'
});
} else {
data.canVideo = true;
}
},
refreshDevices: function(callback) {
console.debug('Attempting to refresh the devices.');
jQuery.verto.refreshDevices(this.refreshDevicesCallback);
}, },
/** /**
* Updates the video resolutions based on settings. * Updates the video resolutions based on settings.
*/ */
refreshVideoResolution: function() { refreshVideoResolution: function(resolutions) {
console.debug('Attempting to refresh video resolutions.'); console.debug('Attempting to refresh video resolutions.');
if (data.instance) { if (data.instance) {
data.instance.videoParams(getVideoParams()); var w = resolutions['bestResSupported'][0];
} else { var h = resolutions['bestResSupported'][1];
console.debug('There is no instance of verto.');
}
},
updateResolutions: function(supportedResolutions) {
console.debug('Attempting to sync supported and available resolutions');
var removed = 0;
angular.forEach(videoQuality, function(resolution, id) { if (h === 1080) {
var supported = false; w = 1280;
angular.forEach(supportedResolutions, function(res) { h = 720;
var width = res[0]; }
var height = res[1];
if(resolution.width == width && resolution.height == height) { updateResolutions(resolutions['validRes']);
supported = true; data.instance.videoParams({
} minWidth: w,
minHeight: h,
maxWidth: w,
maxHeight: h,
minFrameRate: 15,
vertoBestFrameRate: 30
}); });
videoQuality.forEach(function(qual){
if (w === qual.width && h === qual.height) {
if (storage.data.vidQual !== qual.id) {
storage.data.vidQual = qual.id;
}
}
if(!supported) { });
delete videoQuality[id];
++removed;
}
});
videoQuality.length = videoQuality.length - removed;
this.videoQuality = videoQuality;
this.data.vidQual = (videoQuality.length > 0) ? videoQuality[videoQuality.length - 1].id : null;
return videoQuality; } else {
console.debug('There is no instance of verto.');
}
}, },
/** /**
...@@ -502,24 +507,11 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora ...@@ -502,24 +507,11 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
} }
}; };
var init = function(resolutions) { var that = this;
// This means that we cannot use video! function ourBootstrap() {
if (resolutions.validRes.length === 0) {
console.log('No valid resolutions, disabling video.');
data.canVideo = false;
} else {
data.canVideo = true;
}
data.bestWidth = resolutions['bestResSupported'][0];
data.bestHeight = resolutions['bestResSupported'][1];
if (data.canVideo) {
that.updateResolutions(resolutions['validRes']);
that.refreshVideoResolution();
}
// Checking if we have a failed connection attempt before // Checking if we have a failed connection attempt before
// connecting again. // connecting again.
that.refreshDevicesCallback();
if (data.instance && !data.instance.rpcClient.socketReady()) { if (data.instance && !data.instance.rpcClient.socketReady()) {
clearTimeout(data.instance.rpcClient.to); clearTimeout(data.instance.rpcClient.to);
data.instance.logout(); data.instance.logout();
...@@ -530,7 +522,6 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora ...@@ -530,7 +522,6 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
socketUrl: data.wsURL, socketUrl: data.wsURL,
tag: "webcam", tag: "webcam",
ringFile: "sounds/bell_ring2.wav", ringFile: "sounds/bell_ring2.wav",
videoParams: getVideoParams(),
// TODO: Add options for this. // TODO: Add options for this.
audioParams: { audioParams: {
googEchoCancellation: storage.data.googEchoCancellation || false, googEchoCancellation: storage.data.googEchoCancellation || false,
...@@ -540,10 +531,15 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora ...@@ -540,10 +531,15 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
iceServers: data.useSTUN iceServers: data.useSTUN
}, callbacks); }, callbacks);
that.refreshDevices(); data.instance.deviceParams({
}; useCamera: storage.data.selectedVideo,
useMic: storage.data.selectedAudio,
resCheck: that.refreshVideoResolution
});
}
jQuery.verto.init({}, init); $.verto.init({}, ourBootstrap);
}, },
/** /**
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论