js 检测电脑设备是否已经安装了摄像头

//检测电脑设备是否已经安装了摄像头
	if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
		// Firefox 38+ seems having support of enumerateDevicesx
		navigator.enumerateDevices = function(callback) {
			navigator.mediaDevices.enumerateDevices().then(callback);
		};
	}
	var MediaDevices = [];
	var isHTTPs = location.protocol === 'https:';
	var canEnumerate = false;

	if (typeof MediaStreamTrack !== 'undefined' && 'getSources' in MediaStreamTrack) {
		canEnumerate = true;
	} else if (navigator.mediaDevices && !!navigator.mediaDevices.enumerateDevices) {
		canEnumerate = true;
	}

	var hasMicrophone = false;
	var hasSpeakers = false;
	var hasWebcam = false;

	var isMicrophoneAlreadyCaptured = false;
	var isWebcamAlreadyCaptured = false;

	function checkDeviceSupport(callback) {
		if (!canEnumerate) {
			return;
		}

		if (!navigator.enumerateDevices && window.MediaStreamTrack && window.MediaStreamTrack.getSources) {
			navigator.enumerateDevices = window.MediaStreamTrack.getSources.bind(window.MediaStreamTrack);
		}

		if (!navigator.enumerateDevices && navigator.enumerateDevices) {
			navigator.enumerateDevices = navigator.enumerateDevices.bind(navigator);
		}

		if (!navigator.enumerateDevices) {
			if (callback) {
				callback();
			}
			return;
		}

		MediaDevices = [];
		navigator.enumerateDevices(function(devices) {
			devices.forEach(function(_device) {
				var device = {};
				for (var d in _device) {
					device[d] = _device[d];
				}

				if (device.kind === 'audio') {
					device.kind = 'audioinput';
				}

				if (device.kind === 'video') {
					device.kind = 'videoinput';
				}

				var skip;
				MediaDevices.forEach(function(d) {
					if (d.id === device.id && d.kind === device.kind) {
						skip = true;
					}
				});

				if (skip) {
					return;
				}

				if (!device.deviceId) {
					device.deviceId = device.id;
				}

				if (!device.id) {
					device.id = device.deviceId;
				}

				if (!device.label) {
					device.label = 'Please invoke getUserMedia once.';
					if (!isHTTPs) {
						device.label = 'HTTPs is required to get label of this ' + device.kind + ' device.';
					}
				} else {
					if (device.kind === 'videoinput' && !isWebcamAlreadyCaptured) {
						isWebcamAlreadyCaptured = true;
					}

					if (device.kind === 'audioinput' && !isMicrophoneAlreadyCaptured) {
						isMicrophoneAlreadyCaptured = true;
					}
				}

				if (device.kind === 'audioinput') {
					hasMicrophone = true;
				}

				if (device.kind === 'audiooutput') {
					hasSpeakers = true;
				}

				if (device.kind === 'videoinput') {
					hasWebcam = true;
				}

				// there is no 'videoouput' in the spec.

				MediaDevices.push(device);
			});

			if (callback) {
				callback();
			}
		});
	}
	//end

checkDeviceSupport(function() {
if(hasWebcam == false){
		console.log("没有摄像头!");
		return false;
	}else{
		if(isWebcamAlreadyCaptured == false){
			console.log("捕获摄像头失败,请重新安装摄像头!");
			return false;
		}
	}
	if(hasMicrophone == false){
		console.log("没有麦克风!");
		return false;
	}else{
		if(isMicrophoneAlreadyCaptured == false){
			console.log("捕获麦克风失败,请重新安装麦克风!");
			return false;
		}
	}
});

目前测试,谷歌浏览器个QQ浏览器可用

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值