高拍仪、浏览器获取获取多摄像头,切换摄像头

本文介绍了一种方法,用于获取当前电脑上所有已连接摄像头的列表,并允许用户从中选择一个进行拍照操作。通过使用navigator.getUserMedia和navigator.mediaDevices.enumerateDevices API实现。

前段时候接到一个需求,新增功能:根据当前电脑绑定了几个摄像头,获取相应摄像头列表, 并选择摄像头拍摄。

翻阅网上的各种资料,没有找到方法,最后借鉴了H5页面转换前后摄像头的方法,记录如下。

  1. 先通过 navigator.getUserMedia 调用起本地的摄像头

  2. 调用成功之后获取到本地电脑所有的摄像头设备列表

        navigator.mediaDevices.enumerateDevices()
			.then(function(devices) {
				console.log(devices)
				devices.forEach(function(device) {
					if(device.kind == 'videoinput'){
                        videoArr.push({
                            'label': device.label,
                            'id': device.deviceId
						})
					}
				});
				return videoArr;
 
			})
			.catch(function(err) {
				layer.msg(err.name + ": " + err.message);
			});
        return videoArr;
  1. 判断摄像头数量,如果 > 1 生成一个摄像头列表下拉框给用户选择。
if(videoArr.length > 1){
                                    var html = '<option value="">请选择摄像头</option>';
                                    for( var i = 0 ; i <videoArr.length; i++){
                                        html +=`<option value="${videoArr[i].id}">${videoArr[i].label}</option>`
                                    }
                                    videoArr = []
                                    $('#allvideo').html(html)
                                    form.render()
                                    videoIndex =layer.open({
                                        type: 1,
                                        shade: 0.4,
                                        area:['50%'],
                                        title: '选择摄像头',
                                        content: $('#videoBox'),
                                    })
                                }else{
                                    openMedia(constraints)
                                }
  1. 监听摄像头的选择。
if(videoArr.length > 1){
                                    var html = '<option value="">请选择摄像头</option>';
                                    for( var i = 0 ; i <videoArr.length; i++){
                                        html +=`<option value="${videoArr[i].id}">${videoArr[i].label}</option>`
                                    }
                                    videoArr = []
                                    $('#allvideo').html(html)
                                    form.render()
                                    videoIndex =layer.open({
                                        type: 1,
                                        shade: 0.4,
                                        area:['50%'],
                                        title: '选择摄像头',
                                        content: $('#videoBox'),
                                    })
                                }else{
                                    openMedia(constraints)
                                }

openMedia()方法是调用用户媒体设备,访问摄像头拍照。

if(videoArr.length > 1){
                                    var html = '<option value="">请选择摄像头</option>';
                                    for( var i = 0 ; i <videoArr.length; i++){
                                        html +=`<option value="${videoArr[i].id}">${videoArr[i].label}</option>`
                                    }
                                    videoArr = []
                                    $('#allvideo').html(html)
                                    form.render()
                                    videoIndex =layer.open({
                                        type: 1,
                                        shade: 0.4,
                                        area:['50%'],
                                        title: '选择摄像头',
                                        content: $('#videoBox'),
                                    })
                                }else{
                                    openMedia(constraints)
                                }

最后的成功就是点击绑定人脸的时候,判断电脑上有几个摄像头设备,如果有多个,弹窗提示用户选择摄像头,然后进行拍照。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值