php 手机打开摄像头,能够使用浏览器打开手机端摄像头

能够前后摄像头切换,能够截取当前视频流图像

兼容各大主流浏览器,

主要使用的api:

// 获取视频流

navigator.mediaDevices.getUserMedia(constrains).then(success).catch(error);

// 获取设备摄像信息

navigator.mediaDevices.enumerateDevices().then(gotDevices).then(getStream).catch(handleError);

之前在本机上测试Chrome出现问题,问题在于没有使用https作为测试链接,如果使用http的话,则项目不能打开摄像头,这可能与chrome的明文加密有关系

如果使用http,代码会报

NotSupportedError Only secure origins are allowed (see: https://goo.gl/Y0ZkNV)

但是这个错开始并没有报,开始我直接运行获取视频流代码,项目的代码仿佛停止运行一般,相应位置的console.log也没有输出,这个错误也没有报

后来经过调试,获取视频流的代码放在点击事件中,错误才出来。。

切换摄像头代码:

// 多选框更改事件

videoSelect.onchange = getStream;

// 获取设备音频输出设备与摄像设备,这里我只用到了摄像设备

function gotDevices(deviceInfos) {

console.log('deviceInfos')

console.log('deviceInfos:', deviceInfos);

for (let i = 0; i !== deviceInfos.length; i++) {

let deviceInfo = deviceInfos[i];

var option = document.createElement('option');

// console.log(deviceInfo)

if (deviceInfo.kind === 'videoinput') { // audiooutput , videoinput

option.value = deviceInfo.deviceId;

option.text = deviceInfo.label || 'camera ' + (videoSelect.length + 1);

videoSelect.appendChild(option);

}

}

}

兼容浏览器:

//访问用户媒体设备的兼容方法

function getUserMedia(constrains,success,error){

if(navigator.mediaDevices.getUserMedia){

//最新标准API

navigator.mediaDevices.getUserMedia(constrains).then(success).catch(error);

} else if (navigator.webkitGetUserMedia){

//webkit内核浏览器

navigator.webkitGetUserMedia(constrains).then(success).catch(error);

} else if (navigator.mozGetUserMedia){

//Firefox浏览器

navagator.mozGetUserMedia(constrains).then(success).catch(error);

} else if (navigator.getUserMedia){

//旧版API

navigator.getUserMedia(constrains).then(success).catch(error);

}

}

获取视频流成功回调:

function getStream(){

if (window.stream) {

window.stream.getTracks().forEach(function(track) {

track.stop();

})

}

if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia){

//调用用户媒体设备,访问摄像头

const constraints = {

audio: true,

video: {

width: { ideal: 1280 },

height: { ideal: 720 },

frameRate: {

ideal: 10,

max: 15

},

deviceId: {exact: videoSelect.value}

}

};

console.log('获取视频流');

getUserMedia(constraints,success,error);

} else {

alert("你的浏览器不支持访问用户媒体设备");

}

}

截取视频流作为图片:

//注册拍照按钮的单击事件

document.getElementById("capture").addEventListener("click",function(){

//绘制画面

console.log('点击事件');

context.drawImage(video,0,0,480,320);

});

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值