我的需求是在电脑端调起电脑上面的摄像头,有可能是电脑自带的摄像头也可能是插入的USB摄像头
下面这个是如果用户有两个摄像头的话,会将这两个摄像头都列出来,用户可以自己选择使用哪个摄像头。
下面是html代码

<div id="container">
<div class="select">
<label for="audioSource">Audio source: </label><select id="audioSource"></select>
</div><div class="select">
<label for="videoSource">Video source: </label><select id="videoSource"></select>
</div></div>
<div id="promoNode"></div>
<video id="video" width="640" height="480" autoplay></video>
<button id="snap" class="sexyButton">Snap Photo</button>
<canvas id="canvas" width="640" height="480"></canvas>

下面是javascript代码

//调用摄像头var canvas = document.getElementById('canvas');var context = canvas.getContext('2d');var video = document.getElementById('video');var mediaConfig = { video: true };var errBack = function (e) {console.log('An error has occurred!', e)};// Put video listeners into placeif (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {navigator.mediaDevices.getUserMedia(mediaConfig).then(function (stream) {//video.src = window.URL.createObjectURL(stream);video.srcObject = stream;video.play();});}/* Legacy code below! */else if (navigator.getUserMedia) { // Standardnavigator.getUserMedia(mediaConfig, function (stream) {video.src = stream;video.play();}, errBack);} else if (navigator.webkitGetUserMedia) { // WebKit-prefixednavigator.webkitGetUserMedia(mediaConfig, function (stream) {video.src = window.webkitURL.createObjectURL(stream);video.play();}, errBack);} else if (navigator.mozGetUserMedia) { // Mozilla-prefixednavigator.mozGetUserMedia(mediaConfig, function (stream) {video.src = window.URL.createObjectURL(stream);video.play();}, errBack);}// Trigger photo takedocument.getElementById('snap').addEventListener('click', function () {context.drawImage(video, 0, 0, 250, 200);var ImageData = canvas.toDataURL('Image/jpeg', 1);//获取canvas中绘制的数据document.getElementById("show-img").src = ImageData;//将canvas中的数据转化为图片显示$('.show-img').show();var blob = base64DateUrlToBlob(ImageData, 'image/jpeg');//将图片转为二进制});var videoElement = document.querySelector('video');var videoSelect = document.querySelector('select#videoSource');navigator.mediaDevices.enumerateDevices().then(gotDevices).then(getStream).catch(handleError);videoSelect.onchange = getStream;function gotDevices(deviceInfos) {for (var i = 0; i !== deviceInfos.length; ++i) {var deviceInfo = deviceInfos[i];var option = document.createElement('option');option.value = deviceInfo.deviceId;if (deviceInfo.kind === 'videoinput') {option.text = deviceInfo.label || 'camera ' +(videoSelect.length + 1);videoSelect.appendChild(option);} else {// console.log('Found one other kind of source/device: ', deviceInfo);}}}function getStream() {if (window.stream) {window.stream.getTracks().forEach(function (track) {track.stop();});}var constraints = {video: {deviceId: { exact: videoSelect.value }}};navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(handleError);}function gotStream(stream) {window.stream = stream; // make stream available to consolevideoElement.srcObject = stream;}function handleError(error) {//console.log('Error: ', error);}function base64DateUrlToBlob(base64DataUrl, type) {//去掉url的头,并转换为bytesvar bytes = window.atob(base64DataUrl.split(',')[1]);//处理异常,将ascii码小于0的转换为大于0var ab = new ArrayBuffer(bytes.length);var ia = new Uint8Array(ab);for (var i = 0; i < bytes.length; i++) {ia[i] = bytes.charCodeAt(i);}return new Blob([ab], { type: type });}

下面是调用用户电脑上面自带的摄像头
html代码如下

<div class="box"><video src=""></video><button class='shot'>拍照</button><canvas id='canvas'></canvas><img src=''></div>

javascript代码如下
要引入这个文件

 var constraints = {audio: true, video: {width: 200,height: 250}};// 开启视频navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream) {console.log('getUserMedia:', mediaStream)var video = document.querySelector('video');video.srcObject = mediaStream;video.onloadedmetadata = function(e) {video.play();};// 使用canvas进行拍照var canvas = document.getElementById('canvas')$('button').on('click', function () {canvas.getContext('2d').drawImage(video, 0, 0, 200, 250);$('img').css('src', canvas.toDataURL("image/png"))})}).catch(function(err) {console.log(err.name + ": " + err.message);});

还有一篇讲的很详细的文章,要想深入了解的可以参考:https://www.html5rocks.com/en/tutorials/getusermedia/intro/

pc端调起电脑的摄像头进行拍照功能相关推荐

  1. 计算机常用屏幕分辨率,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...

    PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率   比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3  | 10.4寸.12.1寸.1 ...

  2. 使用微信PC端的截图dll库实现微信截图功能(C++ Builder实现)

    使用微信PC端的截图dll库实现微信截图功能(C++ Builder实现) 网上有很多文章说"使用微信PC端的截图dll库实现微信截图功能",我用node实现截图也要用一下,于是找 ...

  3. C#摄像头实现拍照功能的简单代码示例

    C#摄像头实现拍照功能的简单代码示例 2009-11-20  来自:网上整理字体大小:[大中小] ·摘要:这里将介绍一个C#摄像头实现拍照功能的简单代码示例,代码虽然不短,但是基本上实现了相对应的功能 ...

  4. 调用PC端、手机、平板摄像头拍照

    调用PC端摄像头拍照 HTML代码: <div id="android-camera"><input type="button" title= ...

  5. pc端ui图片尺寸_pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...

    PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率   比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3  | 10.4寸.12.1寸.1 ...

  6. 现在计算机常用的分辨率,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...

    PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率   比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3  | 10.4寸.12.1寸.1 ...

  7. html电脑屏幕尺寸,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...

    PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率   比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3  | 10.4寸.12.1寸.1 ...

  8. (@media 响应式PC端媒体查询)电脑屏幕分辨率尺寸大全

    PC端 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.14.1寸.15寸; ) 128 ...

  9. pc端文本_使用即将推出的Windows功能从PC发送文本

    pc端文本 Windows/Android/iPhone: Send and receive SMS messages on your PC, and access all the files on ...

最新文章

  1. Linux中的 awk查找日志中的相关记录
  2. python课程费用-深圳python课程费用
  3. 数据结构(终极线段树篇)
  4. MAC 安装 pygraphviz 找不到头文件
  5. gnome没有命令行_命令行提示,喜欢GNOME的8个理由,自动Raspberry Pi备份等
  6. Pentium II Pentium III架构/微架构/流水线 (1) - 架构概述
  7. C算法编程题(七)购物
  8. flash制作文字笔顺_flash动画课件制作有什么优点
  9. Atitit. 解决unterminated string literal 缺失引号
  10. 根据关键词获取多平台的商品列表接口解析
  11. IBM推出新功能 加速AI应用
  12. python堆积图的画法_不再羡慕别人的漂亮图表,一文学会如何用Python绘制堆积图...
  13. 手机版制作H5页面免费工具大集合
  14. 快递面单打印报错:“print selected is not valid” 解决方案
  15. 计算机系的的毕业感言,计算机班同学的毕业感言
  16. 计算机管理的磁盘管理简单卷,win7磁盘管理分区后无法新建简单卷怎么解决
  17. 未来汽车是什么样?取消后视镜的车型将于2019年面世 | 行业
  18. 26进制(A到Z表示1到26,例27:AA,2019:BYQ)
  19. css 文本超出2行就隐藏并且显示省略号
  20. java生成8位的uuid_分布式系统全局唯一ID简介、特点、生成

热门文章

  1. 乒乓球捡球机器人_捡球机器人
  2. 【转载】高通msm8996平台的ASOC音频路径分析(基于androidN及linux3.1x)
  3. Linux-Day1笔记
  4. Python使用Xpath轻松爬虫(脑残式)
  5. 腾讯视频有linux软件吗,诚意满满:腾讯视频Linux版实测
  6. 上海市邮政编码|上海市各区县邮编
  7. 消防设备电源监控系统在城市建筑中的应用
  8. 高等数学(第七版)同济大学 习题3-4 个人解答(后8题)
  9. 游戏本方便学C语言吗,为什么游戏本都不使用便携的C口充电器?一句话:厂商懒...
  10. 从《Doom》到《Dunia》 回顾3D游戏引擎发展历程二