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

兼容各大主流浏览器,

主要使用的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  , videoinputoption.value = deviceInfo.deviceId;option.text = deviceInfo.label || 'camera ' + (videoSelect.length + 1);videoSelect.appendChild(option);}}
}

兼容浏览器:


//访问用户媒体设备的兼容方法
function getUserMedia(constrains,success,error){if(navigator.mediaDevices.getUserMedia){//最新标准APInavigator.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){//旧版APInavigator.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);
});

源码地址

能够使用浏览器打开手机端摄像头相关推荐

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

    能够前后摄像头切换,能够截取当前视频流图像 兼容各大主流浏览器, 主要使用的api: // 获取视频流 navigator.mediaDevices.getUserMedia(constrains). ...

  2. chrome浏览器调试手机端h5页面

    这个是常识性的问题了.奈何我之前确实是不知道.只知道用F12来调试PC端的页面,这次经过同事指点,终于知道为啥人家在浏览器调试手机端页面,显示的大小都是手机端的. 步骤: 1.打开F12 2.如果所示 ...

  3. ecshop打开手机端QQ对话窗口

    ecshop的手机功能比较弱,默认的模板很丑,也不带打开手机端QQ等功能,在程序里添加im等程序变量后,在模板里引入以下代码,即可打开手机端qq对话窗口 <!-- QQ 号码 {foreach ...

  4. 浏览器显示海康摄像头实时预览画面纯前端解决方案

    浏览器显示海康摄像头实时预览画面纯前端解决方案 将海康设备的 rtsp 协议视频流通过 ffmpeg 转码为 flv 实时视频流,并将实时视频流通过 express 服务生成 http 长链接或 ws ...

  5. h5获取浏览器的相机和摄像头权限

    检查浏览器是否支持getUserMedia方法: navigator.getUserMedia = navigator.getUserMedia ||navigator.webkitGetUserMe ...

  6. 还在纠结选择用什么浏览器?手机端用国产浏览器也很香

    一说到受欢迎的电脑浏览器,大家肯定不约而同地说谷歌浏览器.微软edge浏览器能够同步书签.插件也非常多,因为这些优势深受国人的喜爱.有人纠结在国内选择谷歌好,还是edge浏览器好呢?可能有的人哪个也不 ...

  7. JS判断是PC浏览器还是手机端浏览器

    JS判断是电脑浏览器还是手机端浏览器,并根据不同的终端跳转到不同的网址 <!DOCTYPE html> <html> <script> function brows ...

  8. 关于谷歌chrome浏览器以及360极速浏览器摄像头无法使用(摄像头权限)问题。

    问题描述: 关于谷歌chrome浏览器以及360极速浏览器摄像头无法使用(摄像头权限)问题. 在疫情期间,很多企业无法开展线下笔试.大多采用线上笔试的方法.当下两个主流的笔试网站:牛客网以及赛码网.企 ...

  9. linux smb视频,利用 CentOS 7 samba 服务器与 ES 文件浏览器实现手机端在线播放电脑端视频...

    环境 以下环境仅代表本文测试环境,其它版本应该也可以. 虚拟机 Linux: CentOS Linux release 7.4.1708 (Core) 物理机 Windows: Windows 10 ...

最新文章

  1. PostgreSql安装(win 2003 下)
  2. ActiveMQ的消息重发策略和DLQ处理
  3. ROS通信架构(下)
  4. HDU4532(组合DP)
  5. JavaScript Math 对象
  6. apache禁止多目录运行php文件下载,Nginx Apache下如何禁止指定目录运行PHP脚本
  7. 利用Maven逆向工程生成mybatis映射文件
  8. 计算机图形学考题答案,计算机图形学考题答案.doc
  9. 安装fitz报错_动态 - Fitz999的个人空间 - OSCHINA
  10. LINUX系统使用锐捷客户端认证校园网(华中科技大学)
  11. vs编译时出现大量ws2def.h的错误的解决方法
  12. 分享一款TF/SD卡手机存储卡格式化修复工具
  13. 操作系统第二章课后答案
  14. 2020年“深圳杯”数学建模挑战赛C题-无线可充电传感器网络充电路线规划
  15. Skype和LibFetion无法输入中文的解决方法
  16. 图像处理(八)图像插值算法
  17. python编写手游脚本_编写一个手游脚本需要哪些知识?
  18. 小火狐进化_口袋妖怪xy三主进化详细介绍
  19. c 使用mysql的语句_在 MySQL 数据库中使用C 履行SQL的语句
  20. 智能音箱场景下的性能优化

热门文章

  1. java assertthat_assertThat的使用方法
  2. 一名测试经理的试用期转正报告
  3. 软件测试因果图用例,因果图测试用例 - ILT的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  4. 阿里云OSS配置SSL证书
  5. 1599 经营摩天轮的最大利润
  6. 失踪人口回归微信小程序毕业设计(二)
  7. 设置漂亮护眼的eclipse主题风格
  8. 【论文笔记】显著性信息辅助的视觉SLAM系统 SBAS: Salient Bundle Adjustment for Visual SLAM
  9. Java基础知识之equals方法
  10. 使用ntpdate命令同步时间后,时间还是不准确问题的解决