diff --git a/html5/verto/verto_communicator/src/vertoService/services/vertoService.js b/html5/verto/verto_communicator/src/vertoService/services/vertoService.js index 65bd2f8644..dcf32a0515 100644 --- a/html5/verto/verto_communicator/src/vertoService/services/vertoService.js +++ b/html5/verto/verto_communicator/src/vertoService/services/vertoService.js @@ -110,6 +110,7 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora videoDevices: [], audioDevices: [], shareDevices: [], + videoQuality: [], extension: $cookieStore.get('verto_demo_ext'), name: $cookieStore.get('verto_demo_name'), email: $cookieStore.get('verto_demo_email'), @@ -155,34 +156,34 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora $rootScope.$emit('call.incoming', number); } - function getVideoParams() { - var maxWidth, maxHeight; + function updateResolutions(supportedResolutions) { + console.debug('Attempting to sync supported and available resolutions'); - maxWidth = data.bestWidth; - maxHeight = data.bestHeight; + var removed = 0; - if(!data.bestWidth) { - if (videoResolution[data.vidQual]) { - maxWidth = videoResolution[data.vidQual].width; + angular.forEach(videoQuality, function(resolution, id) { + var supported = false; + angular.forEach(supportedResolutions, function(res) { + var width = res[0]; + var height = res[1]; + + if(resolution.width == width && resolution.height == height) { + supported = true; + } + }); + + if(!supported) { + delete videoQuality[id]; + ++removed; } - } + }); - if(!data.bestHeight) { - if (videoResolution[data.vidQual]) { - maxHeight = videoResolution[data.vidQual].height; - } - } + videoQuality.length = videoQuality.length - removed; + data.videoQuality = videoQuality; + data.vidQual = (videoQuality.length > 0) ? videoQuality[videoQuality.length - 1].id : null; - return { - minWidth: videoResolution[data.vidQual].width, - minHeight: videoResolution[data.vidQual].height, - maxWidth: maxWidth, - maxHeight: maxHeight, - minFrameRate: 15, - vertoBestFrameRate: 30 - - }; - } + return videoQuality; + }; var callState = { muteMic: false, @@ -199,120 +200,124 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora videoResolution: videoResolution, bandwidth: bandwidth, - refreshDevices: function(callback) { - console.debug('Attempting to refresh the devices.'); - function refreshDevicesCallback() { - data.videoDevices = [{ + refreshDevicesCallback : function refreshDevicesCallback() { + data.videoDevices = []; + data.shareDevices = [{ + id: 'screen', + label: 'Screen' + }]; + data.audioDevices = []; + + for (var i in jQuery.verto.videoDevices) { + var device = jQuery.verto.videoDevices[i]; + if (!device.label) { + data.videoDevices.push({ + id: 'Camera ' + i, + label: 'Camera ' + i + }); + } else { + data.videoDevices.push({ + id: device.id, + label: device.label || device.id + }); + } + + // Selecting the first source. + if (i == 0) { + storage.data.selectedVideo = device.id; + } + + if (!device.label) { + data.shareDevices.push({ + id: 'Share Device ' + i, + label: 'Share Device ' + i + }); + continue; + } + + data.shareDevices.push({ + id: device.id, + label: device.label || device.id + }); + } + + for (var i in jQuery.verto.audioInDevices) { + var device = jQuery.verto.audioInDevices[i]; + // Selecting the first source. + if (i == 0) { + storage.data.selectedAudio = device.id; + } + + if (!device.label) { + data.audioDevices.push({ + id: 'Microphone ' + i, + label: 'Microphone ' + i + }); + continue; + } + data.audioDevices.push({ + id: device.id, + label: device.label || device.id + }); + } + 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' - }]; - data.shareDevices = [{ - id: 'screen', - label: 'Screen' - }]; - data.audioDevices = []; - - for (var i in jQuery.verto.videoDevices) { - var device = jQuery.verto.videoDevices[i]; - if (!device.label) { - data.videoDevices.push({ - id: 'Camera ' + i, - label: 'Camera ' + i - }); - } 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) { - data.shareDevices.push({ - id: 'Share Device ' + i, - label: 'Share Device ' + i - }); - continue; - } - - data.shareDevices.push({ - id: device.id, - label: device.label || device.id - }); - } - - for (var i in jQuery.verto.audioInDevices) { - var device = jQuery.verto.audioInDevices[i]; - // Selecting the first source. - if (i == 0) { - data.selectedAudio = device.id; - } - - if (!device.label) { - data.audioDevices.push({ - id: 'Microphone ' + i, - label: 'Microphone ' + i - }); - continue; - } - data.audioDevices.push({ - id: device.id, - label: device.label || device.id - }); - } - console.debug('Devices were refreshed.'); - }; - - jQuery.verto.refreshDevices(refreshDevicesCallback); + }); + } 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. */ - refreshVideoResolution: function() { + refreshVideoResolution: function(resolutions) { console.debug('Attempting to refresh video resolutions.'); if (data.instance) { - data.instance.videoParams(getVideoParams()); + var w = resolutions['bestResSupported'][0]; + var h = resolutions['bestResSupported'][1]; + + if (h === 1080) { + w = 1280; + h = 720; + } + + updateResolutions(resolutions['validRes']); + 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; + } + } + + }); + } else { 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) { - var supported = false; - angular.forEach(supportedResolutions, function(res) { - var width = res[0]; - var height = res[1]; - - if(resolution.width == width && resolution.height == height) { - supported = true; - } - }); - - 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; - }, - /** * Connects to the verto server. Automatically calls `onWSLogin` * callback set in the verto object. @@ -502,24 +507,11 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora } }; - var init = function(resolutions) { - // This means that we cannot use video! - 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(); - } - + var that = this; + function ourBootstrap() { // Checking if we have a failed connection attempt before // connecting again. + that.refreshDevicesCallback(); if (data.instance && !data.instance.rpcClient.socketReady()) { clearTimeout(data.instance.rpcClient.to); data.instance.logout(); @@ -530,7 +522,6 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora socketUrl: data.wsURL, tag: "webcam", ringFile: "sounds/bell_ring2.wav", - videoParams: getVideoParams(), // TODO: Add options for this. audioParams: { googEchoCancellation: storage.data.googEchoCancellation || false, @@ -540,10 +531,15 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora iceServers: data.useSTUN }, callbacks); - that.refreshDevices(); - }; + data.instance.deviceParams({ + useCamera: storage.data.selectedVideo, + useMic: storage.data.selectedAudio, + resCheck: that.refreshVideoResolution + }); - jQuery.verto.init({}, init); + } + + $.verto.init({}, ourBootstrap); }, /**