全国咨询热线:400-123-4567

微信公众号h5制作_html5调用摄像头功能的实现代码

类别:媒体报道 发布时间:2020-12-25 浏览人次:

html5调用摄像头功能的实现代码   发布     这篇文章主要介绍了html5调用摄像头功能的实现代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

前些天,线上笔试的时候,发现需要浏览器同意开启摄像头,感觉像是 js 调用的,由于当时笔试,也就没想到这么多问题。今天闲来无事,看了下自己的 todo,发现有这个调用摄像头的todo,才想到 。网上查了一下,果然 js 有调用摄像头的 api,为此自己写一个 demo ,避免忘记。

正文

调用摄像头

一共有两种实现方式,一种是使用navigator.getUserMedia(该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性),前面一种已经从 Web 标准中删除,仅为了向后兼容而存在,第二种是使用navigator.mediaDevices.getUserMedia(推荐使用),这两种方法 Safari 貌似都不支持。。。。

第一种方法navigator.getUserMedia用法详见,代码如下:

 !doctype html 
 html lang= en 
 head 
 meta charset= UTF-8 
 title 摄像头调用1 /title 
 /head 
 body 
 video id= v /video 
 script 
 !(function () {
 function userMedia() {
 return navigator.getUserMedia = navigator.getUserMedia ||
 navigator.webkitGetUserMedia ||
 navigator.mozGetUserMedia ||
 navigator.msGetUserMedia || null;
 if (userMedia()) {
 var constraints = {
 video: true,
 audio: false
 var media = navigator.getUserMedia(constraints, function (stream) {
 var v = document.getElementById('v');
 var url = window.URL || window.webkitURL;
 v.src = url ? url.createObjectURL(stream) : stream;
 v.play();
 }, function (error) {
 console.log( ERROR 
 console.log(error);
 } else {
 console.log( 不支持 
 })();
 /script 
 /body 
 /html 

第二种方法navigator.mediaDevices.getUserMedia用法详见。navigator.mediaDevices.getUserMedia 其实和第一种差不多,主要第二种返回是一个 Promise 对象,代码如下:

 !doctype html 
 html lang= en 
 head 
 meta charset= UTF-8 
 title 摄像头调用2 /title 
 /head 
 body 
 video id= v /video 
 script 
 !(function () {
 // 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象
 if (navigator.mediaDevices === undefined) {
 navigator.mediaDevices = {};
 if (navigator.mediaDevices.getUserMedia === undefined) {
 navigator.mediaDevices.getUserMedia = function (constraints) {
 // 首先,如果有getUserMedia的话,就获得它
 var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
 // 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
 if (!getUserMedia) {
 return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
 // 否则,为老的navigator.getUserMedia方法包裹一个Promise
 return new Promise(function (resolve, reject) {
 getUserMedia.call(navigator, constraints, resolve, reject);
 const constraints = {
 video: true,
 audio: false
 let promise = navigator.mediaDevices.getUserMedia(constraints);
 promise.then(stream = {
 let v = document.getElementById('v');
 // 旧的浏览器可能没有srcObject
 if ( srcObject in v) {
 v.srcObject = stream;
 } else {
 // 防止再新的浏览器里使用它,应为它已经不再支持了
 v.src = window.URL.createObjectURL(stream);
 v.onloadedmetadata = function (e) {
 v.play();
 }).catch(err = {
 console.error(err.name + : + err.message);
 })();
 /script 
 /body 
 /html 

拍照

思路是设置一个标志变量 videoPlaying 看看是否 video 有在 play,监听拍照按钮的点击事件,如果videoPlaying 为 true ,使用一个canvas 获取 video 的宽高(默认 canvas 是不显示的),然后使用 canvas 的,然后使用 canvas 的 返回一个 data url,将这个 url,设置在一个 img 标签上即可

第一种方法navigator.getUserMedia实现代码:

 !doctype html 
 html lang= en 
 head 
 meta charset= UTF-8 
 title 拍照1 /title 
 /head 
 body 
 button id= take 拍照 /button 
 br / 
 video id= v 'v');
 let media = navigator.getUserMedia(constraints, function (stream) {
 let url = window.URL || window.webkitURL;
 video.src = url ? url.createObjectURL(stream) : stream;
 video.play();
 videoPlaying = true;
 }, function (error) {
 console.log( ERROR 
 console.log(error);
 document.getElementById('take').addEventListener('click', function () {
 if (videoPlaying) {
 let canvas = document.getElementById('canvas');
 canvas.width = video.videoWidth;
 canvas.height = video.videoHeight;
 canvas.getContext('2d').drawImage(video, 0, 0);
 let data = canvas.toDataURL('image/webp');
 document.getElementById('photo').setAttribute('src', data);
 }, false);
 } else {
 console.log( 不支持 
 })();
 /script 
 /body 
 /html 

第二种navigator.mediaDevices.getUserMedia实现方法:

 !doctype html 
 html lang= en 
 head 
 meta charset= UTF-8 
 title 拍照2 /title 
 /head 
 body 
 button id= take 拍照 /button 
 br / 
 video id= v 'getUserMedia is not implemented in this browser'));
 // 否则,为老的navigator.getUserMedia方法包裹一个Promise
 return new Promise(function (resolve, reject) {
 getUserMedia.call(navigator, constraints, resolve, reject);
 const constraints = {
 video: true,
 audio: false
 let videoPlaying = false;
 let v = document.getElementById('v');
 let promise = navigator.mediaDevices.getUserMedia(constraints);
 promise.then(stream = {
 // 旧的浏览器可能没有srcObject
 if ( srcObject in v) {
 v.srcObject = stream;
 } else {
 // 防止再新的浏览器里使用它,应为它已经不再支持了
 v.src = window.URL.createObjectURL(stream);
 v.onloadedmetadata = function (e) {
 v.play();
 videoPlaying = true;
 }).catch(err = {
 console.error(err.name + : + err.message);
 document.getElementById('take').addEventListener('click', function () {
 if (videoPlaying) {
 let canvas = document.getElementById('canvas');
 canvas.width = v.videoWidth;
 canvas.height = v.videoHeight;
 canvas.getContext('2d').drawImage(v, 0, 0);
 let data = canvas.toDataURL('image/webp');
 document.getElementById('photo').setAttribute('src', data);
 }, false);
 })();
 /script 
 /body 
 /html 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。


这篇文章主要介绍了HTML5 图片预加载的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习

这篇文章主要介绍了HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值

这篇文章主要介绍了Html5调用手机摄像头并实现人脸识别的实现,混合App开发,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

今天主管给了我个需求,说要用混合开发,用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的

fa的小东东,其中有一项需求就是做一个网页播放摄像头的实时监控功能,对于我这个小菜鸟来说真是难到了,下面小编给大家带来了HTML实现海康摄像头实

这篇文章主要介绍了如何在HTML里加载摄像头,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

推荐阅读

【上海网站优化】这样才能让百度中意你

您的部位: > 新闻报道新闻资讯 > 企业网站建设 > 【上海市seo优化】那样才可以让百度搜索钟意你新的一年里seo优化该怎样做才能让百度搜索钟意你,在2018有许多朋友问网编,为何一些...

2021-01-12
小程序发布流程_详解angularJs中自界说directive的数

详细说明angularJs中自定directive的数据信息互动 本文关键详细介绍了详细说明angularJs中自定directive的数据信息互动,网编感觉挺好的,如今共享给大伙儿,也给大伙儿做下参照。一...

2021-01-12
小程序界面设计模板_JavaScript自界说文本框光标

JavaScript自定文字框鼠标光标 文字框(input或textarea)的鼠标光标没法改动款式(除开根据color改动鼠标光标色调)。但小编期待本人建立自身的网站时,文字框的鼠标光标有归属于...

2021-01-12
网站推行需求剖析的根本数据目标【凡科】广州

重要词:网站实行要求分析的压根数据信息总体目标 现有 13 人访问 为何要开展网站数据信息分析?1、立即把握网站实行的实际效果,减少盲目跟风性;2、分析各种各样互联网营销推广...

2021-01-12
网站制作,专题活动网站建设

主题活动企业网站建设的要求 主题活动网站怎样反映特点,精准定位爱好群体? 主题活动网站怎样用品牌形象化的語言呈现商品的特点? 主题活动网站怎样吸引住潜在用户选购? 主题...

2021-01-12
解读《百度移动搜索建站优化白皮书》

百度搜索惊雷优化算法不久不久,又接到了百度搜索搜狗引擎建网站提升市场研究报告。以便让众多网站站长充足掌握百度搜索检索模块标准,并依据标准有效安全性基本建设网站、提...

2021-01-12
X

400-8700-617400-123-4567
企业邮箱1497847554@qq.com
官方微信