之前一直做后台开发,最近项目客户想要采用android平板扫描物品条码,所以开始在网上看了众多关于采用浏览器调用摄像头的问题,让我十分疑惑的是,为什么很多解决案例并没有讲到移动端浏览器的支持问题,以致自己走了很多弯路。下面就具体对采用浏览器调用手机摄像头问题进行一些说明。

最开始采用navigator.getUserMedia这个接口:

这个接口先要有一个video标签

<video id="video" width="640" height="480" autoplay></video>

接口的原型如下:

navigator.getUserMedia(constraints, successCallback, errorCallback);

第一个参数是Object类型,里面包含了需要启用的多媒体设备,例如要启用视频设备(摄像头),就要传入:

{ video: true }

另外两个参数分别是启用成功和失败时的回调函数。启用成功的时候,successCallback的第一个参数为视频流对象,可以进一步通过window.URL.createObjectURL接口把视频流转换为对象URL;启用失败的时候,errorCallback的第一个参数是错误对象(Chrome)或错误信息字符串(Firefox)。

navigator.getUserMedia的调用代码如下:

var video = document.getElementById('video');
navigator.getUserMedia({video: true
}, function(stream) {video.src = window.URL.createObjectURL(stream);video.play();
}, function(error) {alert("调用失败");
});

浏览器执行这段代码的时候,会提示用户是否允许使用摄像头,允许之后,网页上就可以实时显示摄像头影像了。如果不允许,就会触发错误事件。

可采用如下完整代码:

<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><video id="video" autoplay="" style='width:100%;height:100%'></video>  <script type="text/javascript">  //存储视频设备源ID var exArray = [];MediaStreamTrack.getSources(function (sourceInfos) {  for (var i = 0; i < sourceInfos.length; i++) {  var sourceInfo = sourceInfos[i];  if (sourceInfo.kind === 'video') {  exArray.push(sourceInfo.id);  }  }  var getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);  getUserMedia.call(navigator, {  'video': {  'optional': [{  'sourceId': exArray[1] //0为前置摄像头,1为后置  }]  },  }, function(localMediaStream) {  var video = document.getElementById('video');  video.src = window.URL.createObjectURL(localMediaStream);  video.play();  }, function(e) {  alert("调用失败");});  });  </script>
</body>
</html>

结论:1、此方式在PC端Chrome浏览器,调用电脑前置摄像头没有问题。

2、移动端android手机或平板,Chrome浏览器测试无法调用摄像头,FireFox测试调用后置摄像头没有问题。

关于移动端采用浏览器调用摄像头实现扫描二维码的问题,一种思路是采用上诉方式调用手机后置摄像头配合canvas标签,将视频流绘制成图片,然后可以采用前台js解析(解析库地址https://github.com/LazarSoft/jsqrcode),也可以此采用后台ZXing库解析。这两种方式我并未测试。其实 不建议采用这种方式。因为如果是这种需求建议采用H5 +app的方式,这种方式有很方便的接口,当然就不能用浏览器访问了,需要将html5页面打包成app。

关于采用浏览器调用手机摄像头问题相关推荐

  1. 微信浏览器调用手机摄像头录像

    <input type="file" style="/* visibility: hidden */" capture="camera" ...

  2. html5 调用手机摄像头详解

    html5 调用手机摄像头详解   首先,我们看看HTML代码结构,当然,这部分的DOM内容应该是在用户允许使用其摄像头事件出发后,动态加载生成的.  注意: 我们采用的是 640X480的分辨率,如 ...

  3. html调起苹果手机摄像头_HTML5如何调用手机摄像头拍照实现方法介绍

    HTML5如何调用安卓手机摄像头拍照实现方法介绍.HTML5 The Media Capture API提供了对摄像头的可编程访问,可以直接用getUserMedia获得摄像头提供的视频流.其实实际上 ...

  4. python+opencv用电脑调用手机摄像头或其他网路摄像头

    python+opencv用电脑调用手机摄像头或其他网路摄像头 文章目录: 1 获取手机摄像头或网络摄像头的ip 1.1 获取手机摄像头的ip 1.2 获取网络摄像头的IP 1.3 关于RTSP协议 ...

  5. html5调用手机摄像头,实现拍照上传功能

    http://www.glve.net/html5-calls-cell-phone-cameras-to-achieve-photo-upload-feature.html 今天做手机网站,想实现手 ...

  6. H5调用手机摄像头,实时拍照上传(旧)

    H5调用手机摄像头,完成拍照,实时上传(旧) 项目开发中,偶尔会遇到网页中调用手机摄像头,通过相册选择或直接实时拍照的方式,完成图片上传的功能型需求. 今天,就通过一个小的案例,演示一下完整的实现流程 ...

  7. python-电脑调用手机摄像头

    " 电脑没有摄像头之这不是有手机摄像头" 因为电脑低级或者像我一样本身就是使用台式电脑的兄弟,又不想买摄像头,想想就痛苦. 今天,我们就来解决这个痛苦的问题,虽然我们的电脑没有摄像 ...

  8. 使用HTML5+调用手机摄像头和相册

    前言: 前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...

  9. 利用JS调用手机摄像头小功能源码

    介绍: 一个小功能源码,利用JS调用手机摄像头,当访问网址后就能拍摄照片,前提是客户端给了权限. 1.由于系统安全机制,ios系统必须使用自带的Safari浏览器(或者第三方APP调用的是Safari ...

最新文章

  1. python成绩统计_python学习-统计学生成绩-统计学生成绩
  2. java获取正则表达式_JAVA 正则表达式(获取)
  3. 应用语言学 计算机语言学,应用语言学的名词解释
  4. MyEclipse 快捷键1(CTRL)
  5. 软件测试成功之本:项目风险的监控
  6. geometry-api-java 学习笔记(三)多点 multipoint
  7. C++学习之路 | PTA乙级—— 1050 螺旋矩阵 (25 分)(精简)
  8. 跟周报焦虑说拜拜!Excel打通FineBI,到底有多香
  9. Main函数参数argc,argv说明
  10. SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)...
  11. 正则表达式 RegExp【详解】
  12. 软件测试到底要不要报培训班?
  13. 报错:信息:INFO: Error parsing HTTP request header
  14. php读取与写入文件(详解)
  15. python脚本课程_python选课脚本
  16. 移动客户端谈百度分享经验
  17. 图片JPG怎么转换成PDF格式
  18. ChemDraw使用不了怎么办
  19. 2022年最新浙江机动车签字授权人模拟试题及答案
  20. html阻止手机休眠,阻止系统休眠怎么关掉

热门文章

  1. uwsgi+django+nginx (ubuntu)部署在阿里云上 — 留着自己记忆用
  2. 什么是MMU,MMU的作用
  3. java月亮代码_用Java画一个静态的月亮。
  4. python中object的方法——魔法方法
  5. figma button_如何在Figma中创建锚链接
  6. 互联网新时代要到来了(三)什么是ChatGPT?
  7. 辅助工具:支付宝“咻一咻” 无脑极速教程---2016.2.4 【只支持安卓Root手机(苹果:反正你玩的是寂寞)】
  8. apache 设置默认页面
  9. 禁用Win10自带截图工具快捷键(Shift+Win+S)
  10. 如何追踪域名的解析过程?帮你搞懂域名解析是如何工作的