webrtc 关于H5 和 画布 调用本地摄像头拍照功能的实现
1.代码的实现(html部分)<input type="button" title="开启摄像头" value="开启摄像头" onclick="getMedia();" /><br /><video height="120px" autoplay="autoplay"></video><hr /> <input type="button" title="拍照" value="拍照" onclick="getPhoto();" /><br /> <canvas id="canvas1" height="120px" ></canvas><hr /> <input type="button" title="视频" value="视频" onclick="getVedio();" /><br /><canvas id="canvas2" height="120px"></canvas>
2.js部分<script type="text/javascript">
var video = document.querySelector('video');
var audio, audioType;
var canvas1 = document.getElementById('canvas1');
var context1 = canvas1.getContext('2d');
var canvas2 = document.getElementById('canvas2');
var context2 = canvas2.getContext('2d');
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
var exArray = []; //存储设备源ID
MediaStreamTrack.getSources(function (sourceInfos) {
for (var i = 0; i != sourceInfos.length; ++i) {
var sourceInfo = sourceInfos[i];
//这里会遍历audio,video,所以要加以区分
if (sourceInfo.kind === 'video') {
exArray.push(sourceInfo.id);
}
}
});
function getMedia() {
if (navigator.getUserMedia) {
navigator.getUserMedia({
'video': {
'optional': [{
'sourceId': exArray[1] //0为前置摄像头,1为后置
}]
},
'audio':true
}, successFunc, errorFunc); //success是获取成功的回调函数
}
else {
alert('Native device media streaming (getUserMedia) not supported in this browser.');
}
}
function successFunc(stream) {
//alert('Succeed to get media!');
if (video.mozSrcObject !== undefined) {
//Firefox中,video.mozSrcObject最初为null,而不是未定义的,我们可以靠这个来检测Firefox的支持
video.mozSrcObject = stream;
}
else {
video.src = window.URL && window.URL.createObjectURL(stream) || stream;
}
//video.play();
// 音频
audio = new Audio();
audioType = getAudioType(audio);
if (audioType) {
audio.src = 'polaroid.' + audioType;
audio.play();
}
}
function errorFunc(e) {
alert('Error!'+e);
}
// 将视频帧绘制到Canvas对象上,Canvas每60ms切换帧,形成肉眼视频效果
function drawVideoAtCanvas(video,context) {
window.setInterval(function () {
context.drawImage(video, 0, 0,90,120);
}, 60);
}
//获取音频格式
function getAudioType(element) {
if (element.canPlayType) {
if (element.canPlayType('audio/mp4; codecs="mp4a.40.5"') !== '') {
return ('aac');
} else if (element.canPlayType('audio/ogg; codecs="vorbis"') !== '') {
return ("ogg");
}
}
return false;
}
// vedio播放时触发,绘制vedio帧图像到canvas
// video.addEventListener('play', function () {
// drawVideoAtCanvas(video, context2);
// }, false);
//拍照
function getPhoto() {
context1.drawImage(video, 0, 0,90,120); //将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。
}
//视频
function getVedio() {
drawVideoAtCanvas(video, context2);
}
</script>
MediaDevices 的方法 enumerateDevices() 请求一个可用的媒体输入和输出设备的列表,例如麦克风,摄像机,耳机设备等。 返回的 Promise 完成时,会带有一个描述设备的 MediaDeviceInfo 的数组。
https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/enumerateDevices
https://www.cnblogs.com/BelieveWang/p/8267152.html
webrtc 关于H5 和 画布 调用本地摄像头拍照功能的实现相关推荐
- JS调用本地摄像头拍照(兼容各大浏览器及IE8+)
最近做的项目遇到了个难题,使用video+canvas+getUserMedia()写的调用本地摄像头拍照不兼容IE. 原因:IE8及以下不支持HTML5标签:video和canvas:IE11及以下 ...
- 利用python调用本地摄像头拍照,对图片命名并保存到指定位置,带界面
1.需求: 因项目需要做一个以图搜图的小程序,需要储备零件图库,约1000种 2.原计划&痛点 原本想通过手机挨个拍照,再拷贝出来,重命名,这样会耽误大量时间,且容易出错 3.解决方案 于是做 ...
- html5 调用摄像头 支持IE,JS调用本地摄像头拍照(兼容各大浏览器及IE8+)
最近做的项目遇到了个难题,使用video+canvas+getUserMedia()写的调用本地摄像头拍照不兼容IE. 原因:IE8及以下不支持HTML5标签:video和canvas:IE11及以下 ...
- 摄像头网页服务器,js调用本地摄像头拍照并上传到web服务器
[实例简介] js调用本地摄像头拍照并上传到web服务器.后台使用java实现图片的接收和存储,上传的图片默认保存到项目下的images文件夹中. [实例截图] [核心代码] MyCamera └── ...
- php h5 调用摄像头_利用html5调用本地摄像头拍照上传图片
[php]代码库html5概念啥的就不废话了,不知道的 百度, 谷歌一堆..今天学了学html5中的Canvas结合新增的标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件( ...
- js调用本地摄像头拍照截图,提交后台
今天有个需求,需要在前端界面调用本地摄像头,然后拍照结束后可以截取预览,最后将结果提交到后台.查了网上很多的插件,发现适合的非常少,于是决定自己修改一个. 这里我修改了一个jquery插件,把摄像头拍 ...
- 摄像头自建html直播,H5代码实现调用本地摄像头实现实时视频以及拍照功能
效果 这是柚子皮- getUserMedia API HTML 5 的getUserMedia API提供了访问媒体的能力, 基于该特性, 开发者可以不依赖任何浏览器插件下去访问视频和音频等设备. 旧 ...
- vue+springboot实现调用本地摄像头拍照上传后端使用百度ocr识别身份证信息
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.前端 二.后端 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一.前端 1.首先进入页面打开摄像头 2.点击手动 ...
- php调用本地摄像头,javascript 调用本地摄像头拍照 ajax提交上传
最近在做一个小应用,里面有一个功能就是需要打开摄像头拍照并且上传,今天就记录一下这个小功能. HTML篇: 这里我是用的layui的样式,需要先引用layui的样式,才会有上图的效果. * 照片: 点 ...
最新文章
- Kmeans算法的过程是什么?Kmeans算法的缺陷主要有哪些?
- java中单例实现常用的方式_Java单例的常见形式
- bst latex 最大作者数_latex bst文件怎么用
- 独家 | 手把手教你运用深度学习构建视频人脸识别模型(Python实现)
- JQ 实现点击按钮显示弹窗,点击非弹窗和按钮区域隐藏弹窗
- 微信小程序 android内存暂用,微信小程序与手机APP占用内存 流量消耗对比介绍
- 上科大提出:对抗神经网络 动态人像系统SofGAN!
- powerbuilder查询符合条件的数据并且过滤掉其他数据_SQL语句之逻辑查询处理阶段...
- php html小项目,使用PHP把HTML生成PDF文件的几个开源项目介绍
- 视频 Docker 学习(高级篇)
- msdia 80.dll的正确位置
- php版微信公众号消息主动推送_PHP版微信公众号消息主动推送
- html5 扩展 cs6,Dreamweaver CS6提高了HTML5工具的效率
- suger BI 创建任务
- 10个比较有用的jQuery插件
- Windows安装GoldenDict
- Qt实现Windows风格无边框
- 谷粒商城九商品服务之商品属性及仓储服务todo
- Golang的Ticker使用姿势
- 企业中台最佳实践----阿里等商业巨头组织架构的战略变迁(四)
热门文章
- 记一次NGINX 30秒超时
- java基础知识【第22期】-- DAO模式和分层
- python多线程原理_代码详解Python多线程、多进程、协程-阿里云开发者社区
- OpenWrt 18.06编译龙尚模块驱动
- 计算机网络概述(下)
- Cuckoo安装过程(初学者)
- mysql对于商业选址的作用_调查商业网点选址的区位条件。,商业活动区位选择的原则...
- B站美食区内卷愈演愈烈,头部UP主跟风挑战
- linux如何修改用户属性,Linux 修改文件用户属性
- ajax请求php返回xml数据格式,ajax传输的数据格式(XML,json)怎么获取解析