function _getVideoStream()

in openmeetings-web/src/main/front/src/room/video.js [83:149]


		function _getVideoStream(msg, state, callback) {
			VideoSettings.constraints(sd, function(cnts) {
				if (VideoUtil.hasCam(sd) !== cnts.videoEnabled || VideoUtil.hasMic(sd) !== cnts.audioEnabled) {
					VideoMgrUtil.sendMessage({
						id : 'devicesAltered'
						, uid: sd.uid
						, audio: cnts.audioEnabled
						, video: cnts.videoEnabled
					});
				}
				if (!cnts.audio && !cnts.video) {
					OmUtil.error('Requested devices are not available');
					VideoMgrUtil.close(sd.uid)
					return;
				}
				navigator.mediaDevices.getUserMedia(cnts)
					.then(stream => {
						if (state.disposed || msg.instanceUid !== v.data('instance-uid')) {
							return;
						}
						stream.getVideoTracks().forEach(track => track.enabled = cnts.videoEnabled);
						stream.getAudioTracks().forEach(track => track.enabled = cnts.audioEnabled);
						state.localStream = stream;
						if (__pttEnabled(state)) {
							OmUtil.alert('warning', $('#user-video').data('ptt-info'), 10000);
						}
						let _stream = stream;
						const data = {};
						if (stream.getAudioTracks().length !== 0) {
							lm = vc.find('.level-meter');
							lm.show();
							data.aCtx = new AudioCtx();
							data.gainNode = data.aCtx.createGain();
							data.analyser = data.aCtx.createAnalyser();
							data.aSrc = data.aCtx.createMediaStreamSource(stream);
							data.aSrc.connect(data.gainNode);
							data.gainNode.connect(data.analyser);
							if (VideoUtil.isEdge()) {
								data.analyser.connect(data.aCtx.destination);
							} else {
								data.aDest = data.aCtx.createMediaStreamDestination();
								data.analyser.connect(data.aDest);
								_stream = data.aDest.stream;
								stream.getVideoTracks().forEach(track => _stream.addTrack(track));
							}
						}
						state.data = data;
						__createVideo(state);
						state.stream = _stream;
						callback(msg, state, cnts);
					})
					.catch(function(err) {
						VideoMgrUtil.sendMessage({
							id : 'devicesAltered'
							, uid: sd.uid
							, audio: false
							, video: false
						});
						VideoMgrUtil.close(sd.uid);
						if ('NotReadableError' === err.name) {
							OmUtil.error('Camera/Microphone is busy and can\'t be used');
						} else {
							OmUtil.error(err);
						}
					});
			});
		}