<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>H5 canvas 调用摄像头进行绘制</title> <style> html,body{ width:100%; height:100%; padding: 0px; margin: 0px; overflow: hidden; } #canvas{ width:500px; height:300px; } #video{ width:500px; height:300px; } .btn{ display:inline-block; text-align: center; background-color: #333; color:#eee; font-size:14px; padding:5px 15px; border-radius: 5px; cursor:pointer; } </style></head><body> <video id="video" autoplay="true" style="background-color:#ccc;display:none;"></video> <div style="width:500px;height:300px;margin:30px auto;"> <canvas id="canvas" width="500px" height="300px">您的浏览器不支持H5 ,请改换或升级!</canvas> <span class="btn" filter="screenshot">截图</span> <span class="btn" filter="close">停息</span> <span class="btn" filter="open">打开</span> </div> <div style="width:500px;height:300px;margin:40px auto;" id="show"></div></body></html>
样子差不多是这样的:
hahiahia 空缺一片
我们将video进行了隐蔽,然后加上了几个按钮,还有canvas以及最底部的图片展示区域(用来存放截图图片)。

这里先贴下核心代码:
navigator.getUserMedia({ video : {width:500,height:300}},function(stream){ LV.video.srcObject = stream; LV.video.onloadedmetadata = function(e) { LV.video.play(); };},function(err){ alert(err);//弹窗报错})
干系的知识点可以参考:https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
然后根据页面逻辑实现事宜以及其他功能,包括:截图、停息。
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; var events = { open : function(){ LV.open(); }, close : function(){ console.log(LV.timer); clearInterval(LV.timer); }, screenshot : function(){ //获得当前帧的图像并拿到数据 var image = canvas.toDataURL('jpeg'); document.getElementById('show').innerHTML = '<img src="'+image+'" style="width:500px;height:300px;" />' } }; var LV = { video : document.getElementById('video'), canvas : document.getElementById('canvas'), timer : null, media : null, open :function(){ if(!LV.timer){ navigator.getUserMedia({ video : {width:500,height:300} },function(stream){ LV.video.srcObject = stream; LV.video.onloadedmetadata = function(e) { LV.video.play(); }; },function(err){ alert(err);//弹窗报错 }) } if(LV.timer){ clearInterval(LV.timer); } //将画面绘制到canvas中 LV.timer = setInterval(function(){ LV.ctx.drawImage(LV.video,0,0,500,300); },15); }, init : function(){ LV.ctx = LV.canvas.getContext('2d'); //绑定事宜 document.querySelectorAll('[filter]').forEach(function(item){ item.onclick = function(ev){ var type = this.getAttribute('filter'); events[type].call(this,ev); } }); return LV; } }; LV.init();
体谅我放荡不羁的命名 ...
详细已经实现的demo可以点击 https://chrunlee.cn/demos/canvas-video/index.html