婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > html5調用攝像頭功能的實現代碼

html5調用攝像頭功能的實現代碼

熱門標簽:濟南辦理400電話 鄭州電銷外呼系統違法嗎 威海營銷外呼系統招商 農村住宅地圖標注 鶴壁手機自動外呼系統怎么安裝 漳州人工外呼系統排名 ai電銷機器人連接網關 中紳電銷智能機器人 跟電銷機器人做同事

前言

前些天,線上筆試的時候,發現需要瀏覽器同意開啟攝像頭,感覺像是 js 調用的,由于當時筆試,也就沒想到這么多問題。今天閑來無事,看了下自己的 todo,發現有這個調用攝像頭的todo,才想到😂。網上查了一下,果然 js 有調用攝像頭的 api,為此自己寫一個 demo ,避免忘記。

正文

調用攝像頭

一共有兩種實現方式,一種是使用navigator.getUserMedia(該特性已經從 Web 標準中刪除,雖然一些瀏覽器目前仍然支持它,但也許會在未來的某個時間停止支持,請盡量不要使用該特性),前面一種已經從 Web 標準中刪除,僅為了向后兼容而存在,第二種是使用navigator.mediaDevices.getUserMedia(推薦使用),這兩種方法 Safari 貌似都不支持。。。。

第一種方法navigator.getUserMedia用法詳見mdn ,代碼如下:

<!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用法詳見mdn。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 的drawImage,然后使用 canvas 的 toDataURL返回一個 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" style="width: 640px;height: 480px;"></video>
    <canvas id="canvas" style="display:none;"></canvas>
    <br />
    <img src="http://placehold.it/640&text=Your%20image%20here%20..." id="photo" alt="photo">
    <script>
        !(function () {
            function userMedia() {
                return navigator.getUserMedia = navigator.getUserMedia ||
                    navigator.webkitGetUserMedia ||
                    navigator.mozGetUserMedia ||
                    navigator.msGetUserMedia || null;
            }
            if (userMedia()) {
                let videoPlaying = false;
                let constraints = {
                    video: true,
                    audio: false
                };
                let video = document.getElementById('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" style="width: 640px;height: 480px;"></video>
    <canvas id="canvas" style="display:none;"></canvas>
    <br />
    <img src="http://placehold.it/640&text=Your%20image%20here%20..." id="photo" alt="photo">
    <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 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,調用,攝像頭,功能,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5調用攝像頭功能的實現代碼》相關的同類信息!
  • 本頁收集關于html5調用攝像頭功能的實現代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产传媒久久文化传媒| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美精品一区二区久久婷婷| 8x福利精品第一导航| 欧美日韩中文一区| 欧美三级日韩在线| 欧美一区二区视频在线观看2022 | 风间由美一区二区三区在线观看| 免费人成网站在线观看欧美高清| 蜜桃在线一区二区三区| 捆绑变态av一区二区三区 | 国产人妖乱国产精品人妖| 26uuu国产在线精品一区二区| 久久精品人人做人人爽人人| 国产精品欧美一级免费| 亚洲女与黑人做爰| 日韩精品一卡二卡三卡四卡无卡| 精品一区二区免费视频| av福利精品导航| 欧美三级韩国三级日本三斤| 欧美一区二视频| 中文字幕精品在线不卡| 一区二区三区四区亚洲| 蜜臀av一区二区| 99精品视频在线观看| 欧美日韩三级在线| 国产欧美精品一区二区三区四区 | 热久久久久久久| 国产高清视频一区| 欧洲国内综合视频| 久久久久久久久久久久久久久99| 亚洲视频资源在线| 韩国成人在线视频| 欧美性猛交一区二区三区精品| 精品国产乱码久久久久久蜜臀| 亚洲欧美日韩综合aⅴ视频| 婷婷中文字幕一区三区| 播五月开心婷婷综合| 日韩视频一区二区三区在线播放| 中文字幕在线不卡一区| 老色鬼精品视频在线观看播放| 97se亚洲国产综合在线| 欧美成人乱码一区二区三区| 亚洲一区中文日韩| 成人国产精品免费网站| 日韩情涩欧美日韩视频| 亚洲一区二区四区蜜桃| www.欧美.com| 久久久精品综合| 免费成人av在线播放| 欧美午夜精品免费| 亚洲欧洲成人自拍| 粉嫩嫩av羞羞动漫久久久| 日韩欧美一卡二卡| 日本亚洲三级在线| 欧美综合在线视频| 一区二区三区日本| voyeur盗摄精品| 久久精品视频一区| 精品一区二区三区视频| 欧美一区二区不卡视频| 亚洲成人免费观看| 日本高清成人免费播放| 亚洲视频一区在线| 99精品欧美一区二区三区小说| 久久精品欧美日韩精品 | 国产欧美日韩在线观看| 国产麻豆视频一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 奇米综合一区二区三区精品视频| 欧美日韩一区二区在线观看视频| 亚洲欧美色一区| 91福利在线导航| 亚洲第一福利视频在线| 欧美精品aⅴ在线视频| 首页欧美精品中文字幕| 日韩一区和二区| 狠狠色狠狠色综合| 国产日韩欧美麻豆| 99久久久国产精品免费蜜臀| 国产精品卡一卡二卡三| 91美女视频网站| 亚洲图片欧美视频| 日韩情涩欧美日韩视频| 久久综合综合久久综合| 久久免费的精品国产v∧| 成人福利视频在线| 亚洲黄色av一区| 欧美一二三四区在线| 高清国产一区二区| 亚洲色图一区二区| 欧美一区二区性放荡片| 国产酒店精品激情| 亚洲精选视频免费看| 欧美一级精品大片| 成人国产精品免费观看视频| 亚洲精品久久久久久国产精华液| 欧美日本在线看| 国产精品99久久久久久宅男| 亚洲日本中文字幕区| 欧美一区午夜精品| 成人国产精品免费网站| 偷拍自拍另类欧美| 国产精品视频免费| 在线不卡欧美精品一区二区三区| 国产在线精品一区在线观看麻豆| 亚洲视频图片小说| 日韩欧美一级精品久久| 成人国产电影网| 日本视频一区二区三区| 中文字幕视频一区| 欧美v亚洲v综合ⅴ国产v| 91网站在线播放| 国产精品一色哟哟哟| 亚洲成人av一区| 自拍偷在线精品自拍偷无码专区| 91精品国产综合久久久久久| 99精品视频中文字幕| 韩国视频一区二区| 亚洲在线视频网站| 自拍偷拍国产精品| 久久蜜臀中文字幕| 欧美一区二区在线免费播放| 91国偷自产一区二区开放时间| 韩国一区二区视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区三区在线不卡| 国产精品三级久久久久三级| 久久免费电影网| 精品99一区二区三区| 欧美一区二区在线免费播放 | 奇米影视在线99精品| 一区二区三区日本| 综合激情成人伊人| 中文字幕日韩一区| 国产精品全国免费观看高清 | 亚洲综合色在线| 亚洲欧洲精品成人久久奇米网| 国产偷国产偷亚洲高清人白洁| 日韩视频在线一区二区| 欧美精品色综合| 欧美三级中文字幕在线观看| 色诱亚洲精品久久久久久| 99这里只有精品| www.av亚洲| 一本大道久久a久久综合| 91高清视频免费看| 色悠悠久久综合| 91久久久免费一区二区| 一本大道av伊人久久综合| 91官网在线免费观看| 欧美日韩卡一卡二| 91精品国产综合久久精品app| 欧美喷潮久久久xxxxx| 欧美伦理影视网| 欧美电视剧免费全集观看| 精品国产露脸精彩对白| 国产喷白浆一区二区三区| 中文在线资源观看网站视频免费不卡 | 欧美日韩国产精选| 欧美一区二区三区四区高清 | 97久久超碰国产精品| 91黄色激情网站| 欧美日韩精品三区| 日韩精品中午字幕| 久久九九国产精品| 成人欧美一区二区三区黑人麻豆| 樱花影视一区二区| 日本视频一区二区三区| 国产精品正在播放| www.性欧美| 欧美丰满美乳xxx高潮www| 久久―日本道色综合久久| 国产精品进线69影院| 亚洲一区二区成人在线观看| 久久国产视频网| 成人av集中营| 91精品麻豆日日躁夜夜躁| 国产日韩欧美精品电影三级在线| 亚洲欧美日韩小说| 麻豆精品视频在线观看视频| 成人福利视频网站| 欧美一区二区三区爱爱| 国产精品国产馆在线真实露脸| 亚洲成人黄色影院| hitomi一区二区三区精品| 91精品福利在线一区二区三区 | 国产精品一二三四区| 99久久国产综合精品色伊| 欧美精品 国产精品| 最近中文字幕一区二区三区| 天堂在线亚洲视频| 99精品热视频| 久久久不卡网国产精品二区| 亚洲第一电影网| 91丨九色丨蝌蚪富婆spa| 精品国产乱码久久久久久久| 午夜激情一区二区| 在线亚洲人成电影网站色www| 久久久久久久免费视频了|