成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > HTML5通過navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭問題

HTML5通過navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭問題

熱門標(biāo)簽:電話機(jī)器人電銷系統(tǒng)掙話費(fèi) 機(jī)器人外呼系統(tǒng)存在哪些能力 平?jīng)龅貓D標(biāo)注位置怎么弄 高德地圖標(biāo)注地點(diǎn)糾錯 只辦理400電話 如何獲取地圖標(biāo)注客戶 南昌仁和怎么申請開通400電話 拓展地圖標(biāo)注 電話機(jī)器人黑斑馬免費(fèi)

navigator.mediaDevices.getUserMedia

應(yīng)項(xiàng)目要求,需要實(shí)現(xiàn)移動端app嵌入H5頁面完成實(shí)人認(rèn)證的功能。打開getUserMedia文檔,鏈接如下:
https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia
看上去很簡單,最終卻寫的懷疑人生。

API環(huán)境

問題一:(為什么不管怎么配置都顯示前置攝像頭)

想正常使用API必須在https環(huán)境下進(jìn)行,否則你會發(fā)現(xiàn)不管怎么寫,都只能調(diào)用默認(rèn)的攝像頭(大部分都是前置,只有少部分是后置)
前端開發(fā)者可以將文件上傳至"碼云"倉庫,獲取https鏈接然后在手機(jī)上預(yù)覽
鏈接:碼云倉庫入口

問題二:(API在安卓和ios效果一樣嗎?)

根據(jù)官方文檔,目前navigator.mediaDevices.getUserMedia在ios上只支持11版本以上,且只能在safari正常運(yùn)行。安卓目前沒有發(fā)現(xiàn)版本限制,需要兼容的代碼如下

if (navigator.mediaDevices === undefined) {
    navigator.mediaDevices = {};
 }
if (navigator.mediaDevices.getUserMedia === undefined) {
    navigator.mediaDevices.getUserMedia = function (constraints) {
    var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
	if (!getUserMedia) {
	    return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
	}
	return new Promise(function (resolve, reject) {
		getUserMedia.call(navigator, constraints, resolve, reject);
	});
  }
}

問題三:(第一次啟用成功調(diào)用前置攝像頭,第二次需要調(diào)用后置卻黑屏或者失敗)

失敗的原因很多,列舉兩個一開始我遇到的問題
1.前置攝像頭調(diào)用后,攝像功能需要關(guān)閉后才能正常執(zhí)行第二次調(diào)用,否則會報(bào)錯:設(shè)備被占用。解決方法,在每次執(zhí)行調(diào)用方法前,先關(guān)閉攝像設(shè)備。

if (window.stream) {
    window.stream.getTracks().forEach(track => {
          track.stop();
    });
}

親測有用,別的找了很多停止的方法都沒有效果。
2.調(diào)用后置API的方法還是無法喚醒后置攝像頭,于是我找到另外一個方法,通過查看手機(jī)攝像頭ID,來直接喚醒后置。

var deviceInfoId="", //攝像頭ID
    num = 0, //攝像頭數(shù)量
    carema = []; //攝像頭ID數(shù)組
    //在頁面加載完成后獲得設(shè)備ID數(shù)組
window.onload = navigator.mediaDevices.enumerateDevices().then(gotDevices);
function gotDevices(deviceInfos) {
        for (let i = 0; i < deviceInfos.length; ++i) {
            if (deviceInfos[i].kind === 'videoinput') {
                carema.push(deviceInfos[i].deviceId)
              }
        }
        deviceInfoId = carema[后置位置];
}
            var constraints = {
                audio: false,
                video: {
                    deviceId: deviceInfoId,
                    //放在app里面需要下面配置一下
                    "permissions": {
                        "audio-capture": {
                            "description": "Required to capture audio using getUserMedia()"
                        },
                        "video-capture": {
                            "description": "Required to capture video using getUserMedia()"
                        }
                    }
                }
            };
            navigator.mediaDevices.getUserMedia(constraints)
                .then(function (stream) {
                    var video = document.getElementById('video');
                    try {
                        window.stream = stream;
                        video.srcObject = stream;
                    } catch (error) {
                        video.src = window.URL.createObjectURL(stream);
                    }
                    this.localMediaStream = stream;
                    // video.play();   這個加不加好像沒有影響
                })
                .catch(function (err) {
                    console.log(err.name + ": " + err.message);
                });

如果只是一部手機(jī)可以這樣,但是測試了多部手機(jī)發(fā)現(xiàn)攝像頭數(shù)組毫無規(guī)律可循,這個方法慎用。
如果頁面上添加選擇攝像設(shè)備的按鈕的話,這個方法還是不錯的。查看設(shè)備能調(diào)用幾個攝像頭鏈接如下:https://webrtc.github.io/samples/src/content/devices/input-output/
由于我們的項(xiàng)目頁面不希望出現(xiàn)切換按鈕,面對后置出現(xiàn)的眾多BUG,最終選擇放棄,使用input調(diào)用攝像頭。

 <input class="card_input" v-on:change="appCapture($event)" type="file" accept="image/*" capture="camera" />

成功調(diào)用后用canvas實(shí)現(xiàn)成像并適應(yīng)屏幕大小

我這里的代碼是取video的寬高然后復(fù)制給canvas,這樣可以讓canvas和video保持一致,只用給video設(shè)置寬度100%,高度調(diào)節(jié)成合適的值,就實(shí)現(xiàn)了適應(yīng)手機(jī)屏幕。

  var video = document.getElementById('video');
            var canvas = document.getElementById('canvas'),
                ctx = canvas.getContext('2d'),
                CHeight = video.clientHeight, //獲取屏幕大小讓canvas自適應(yīng)
                CWidth = video.clientWidth;
            canvas.width = CWidth;
            canvas.height = CHeight;
            //localMediaStream 在data里定義一個{}
            if (localMediaStream) {
                ctx.drawImage(video, 0, 0, CWidth, CHeight);
                var dataURL = canvas.toDataURL('image/jpeg'); //dataURL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA'
                img.src = dataURL;

video成像鏡像問題

API喚醒的前置攝像頭是相反的,很不舒服很不舒服。
之后用css處理一下給video添加 transform: rotate(180deg),可以實(shí)現(xiàn)反轉(zhuǎn),但是還是沒有達(dá)到和手機(jī)一樣的效果。
這時候可以選擇通過設(shè)備ID調(diào)用前置攝像頭,前置攝像頭的laval一直都是“default”,也有的是空值,但是也能實(shí)現(xiàn)。
配置代碼如下:

 var constraints = window.constraints = {
                audio: false,
                video: {
                    sourceId: 'default',
                    facingMode:  { exact: "user" } 
                }
              };

完美調(diào)用自己手機(jī)的前置攝像頭?。。?/p>

完整代碼如下:
頁面代碼:

<div @click='moveToCameraAVG()' v-cloak>
     <img v-if="imginfo!==''" :src="imginfo" />
     <div class="warm_title2">點(diǎn)擊自拍一張頭像</div>
</div>
<video id="video" class="pic_video" playsinline autoplay x5-video-player-type="h5" style='object-fit:fill'></video>
<canvas id="canvas" class="canvas_pic" style='margin: 0;padding: 0;'></canvas>
<div class="bottom_div">
    <div>拍照</div>
    <img src='images/pic_btn.png' class="capture-btn" @click='captureAvg' />
</div>
 // 頭像相機(jī)
        moveToCameraAVG() {
            var self = this;
            if (navigator.mediaDevices === undefined) {
                navigator.mediaDevices = {};
            }
            if (navigator.mediaDevices.getUserMedia === undefined) {
                navigator.mediaDevices.getUserMedia = function (constraints) {
                    var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia;
                    if (!getUserMedia) {
                        return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
                    }
                    return new Promise(function (resolve, reject) {
                        getUserMedia.call(navigator, constraints, resolve, reject);
                    });
                }
            }
            if (window.stream) {
                window.stream.getTracks().forEach(track => {
                    track.stop();
                });
            }
            var constraints = window.constraints = {
                audio: false,
                video: {
                    sourceId: 'default',
                    facingMode:  { exact: "user" } 
                }
              };
            navigator.mediaDevices.getUserMedia(constraints)
                .then(function (stream) {
                    var video = document.getElementById('video');
                    try {
                        window.stream = stream;
                        video.srcObject = stream;
                    } catch (error) {
                        video.src = window.URL.createObjectURL(stream);
                    }
                    self.localMediaStream = stream;
                    video.play();
                })
                .catch(function (err) {
                    alert(err.name + ": " + err.message);
                });
        },
        //停止攝像機(jī)
        stopCapture: function () {
            var video = document.getElementById('video');
            if (!video.srcObject) return
            let stream = video.srcObject
            let tracks = stream.getTracks();
            tracks.forEach(track => {
                track.stop()
            })
        },
        // 頭像照片
        captureAvg() {
            var vm = this;
            var video = document.getElementById('video');
            var canvas = document.getElementById('canvas'),
                ctx = canvas.getContext('2d'),
                CHeight = video.clientHeight, //獲取屏幕大小讓canvas自適應(yīng)
                CWidth = video.clientWidth;
            canvas.width = CWidth;
            canvas.height = CHeight;
            if (vm.localMediaStream) {
                ctx.drawImage(video, 0, 0, CWidth, CHeight);
                var dataURL = canvas.toDataURL('image/jpeg'); //dataURL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA'
                vm.imginfo = dataURL;
                // 停止攝像機(jī)
                video.pause();
                this.stopCapture();
            }
        },

到此這篇關(guān)于HTML5通過navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭問題的文章就介紹到這了,更多相關(guān)HTML5調(diào)用 攝像頭內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:池州 西藏 漯河 新疆 棗莊 青島 永州 遼源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《HTML5通過navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭問題》,本文關(guān)鍵詞  HTML5,通過,navigator.mediaDevices.getUserMedia,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTML5通過navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于HTML5通過navigator.mediaDevices.getUserMedia調(diào)用手機(jī)攝像頭問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久色视频在线观看| 黄色一级在线视频| 先锋欧美三级| 98视频精品全部国产| 国产精品主播一区二区| 能在线观看的av网站| 免费看的黄色大片| 欧美天堂在线观看| 一本久道中文无码字幕av| 手机福利小视频在线播放| 国产在视频线精品视频www666| 一个人免费观看在线视频www| 亚洲第一二三四区| 国产又黄又粗视频| 激情综合一区二区三区| 欧美大片大片在线播放| 亚洲精品国产精| 91蝌蚪porny| 日韩av.com| 亚洲精品日韩av| 国产高潮流白浆喷水视频| 日韩精品视频一二三| 久久超级碰碰| 99在线视频影院| 久久中文字幕一区二区三区| 亚洲男人的天堂网| 国产一区二区三区在线视频| 欧美高清hd18日本| 午夜不卡久久精品无码免费| www在线视频观看| 欧美激情女人20p| 亚洲视频在线二区| 91久久国产最好的精华液| 国产精品嫩草av| 精品大片一区二区| 国产精品女人毛片| 亚洲精品国产成人av在线| 国产精品一区二区不卡视频| crdy在线观看欧美| 妺妺窝人体色www婷婷| 国产精品国产三级国产专区52| 国产亚洲一区二区三区不卡| 99久久99久久精品免费观看| 欧美精选视频在线观看| 中文字幕亚洲一区| 日韩黄色在线视频| jizzjizz中国精品麻豆| 亚洲精品综合一区二区三区| 有色视频在线观看| 欧美精品一区二区成人| 99视频一区二区| 一线天粉嫩在线播放| 国产精品精品视频一区二区三区| 欧美黑人性猛交xxx| 久久在线视频| 精品久久久久久久久久久国产字幕| 国产精品久久久久久妇女6080| 国模一区二区| 国产精品99| 韩国三级与黑人| av电影在线观看网址| 精品日韩在线播放| 久久久久久久色| 成人国产精品一区二区免费麻豆| 中文在线天堂网www| 貂蝉被到爽流白浆在线观看| 国产xxx69麻豆国语对白| 91免费精品视频| 国产丰满美女做爰| 日韩最新在线视频| 欧美激情视频一区二区三区不卡| 欧美成人高清视频在线观看| 奇米精品一区二区三区在线观看一| 一级片在线播放| 精品成av人一区二区三区| 久久99精品国产自在现线| 免费黄色网址在线| 香蕉久久免费电影| 国产精品自拍一区| 亚洲图片欧洲图片日韩av| 亚洲电影在线观看| 天天操天天干天天综合网| 亚洲美女精品一区| 欧美日韩国产小视频在线观看| 澳门成人av| a天堂在线视频| 羞羞视频立即看| 国产精品污网站| 99久久精品免费看国产免费软件| 国产精品久久久乱弄| 亚洲精品日韩成人| 欧美二区在线视频| 精品视频导航| 国产一区在线免费观看| 中文字幕亚洲欧洲| 亚洲黄色www网站| 成人三级视频| 亚洲老司机av| 亚洲男人都懂第一日本| 99精品在线| 欧美日韩一区二区三区高清| 在线看国产一区二区| 凹凸精品一区二区三区| 懂色av色香蕉一区二区蜜桃| 黄色成人在线播放| 亚洲男人天堂| 精品国产三区在线| 国产一区二区三区免费观看| 婷婷色在线视频| 欧美成免费一区二区视频| 在线观看的毛片| 国产精品久久久久久久久免费桃花| 日韩女在线观看| 婷婷色在线播放| 国产精品视频久| 亚洲va欧美va天堂v国产综合| av一区观看| 亚洲免费观看在线| 啊啊啊好爽视频| 天天干天天操天天爱| 亚洲天堂免费在线| 一个色免费成人影院| 中文字幕五月天| 99热国产精品| 色中文字幕在线| 国产精品av久久久久久麻豆网| xxxxx在线观看| jizzjizz大全| 久久香蕉视频网站| 五月婷婷激情五月| 欧美xxxxx少妇| 婷婷国产成人精品视频| 午夜精品一区二区三| 欧美亚洲国产成人精品| 在线免费观看日本欧美| 国产丶欧美丶日本不卡视频| 欧美精品一区二区三区免费播放| 黄色小视频免费网站| 国产欧美一区二区三区四区| 美女诱惑黄网站一区| 亚洲精品综合网| 亚洲最大成人免费视频| 亚洲精品视频91| 看黄网站在线观看| 九九精品免费视频| 久热中文字幕在线精品免费| 99se婷婷在线视频观看| 成人午夜视频一区二区播放| 91网在线播放| 欧美精品一卡两卡| 久久综合精品一区| 一级做a爰片久久毛片16| 亚洲自拍欧美另类| av在线亚洲色图| 天堂中文在线官网| 亚洲国产精品va在线观看黑人| 精品人妻一区二区三区麻豆91| 99久久精品一区二区成人| 91成人精品一区二区| 日韩av电影免费| 久久久久久高潮国产精品视| 男人的天堂狠狠干| 北条麻妃一区二区三区在线观看| 97在线看福利| 美女av免费观看| 国产亚洲精品精品国产亚洲综合| 牛人国产偷窥女洗浴在线观看| 人人超碰91尤物精品国产| 精品综合久久| av黄色在线免费观看| 久久精品99久久香蕉国产色戒| 成人18网站| 久久66热re国产| 欧美在线三级| 亚洲先锋成人| 美女精品视频| 欧美 国产 精品| 免费动漫网站在线观看| 成人在线免费观看视视频| 午夜性福利视频| 国产又粗又长又爽又黄的视频| 糖心vlog在线免费观看| 日本人妻一区二区三区| 亚洲av无码国产精品永久一区| 美腿丝袜一区二区三区| 亚洲女优在线| 激情五月宗合网| 亚洲 另类 春色 国产| 久色乳综合思思在线视频| 四虎影院在线免费播放| 在线亚洲一区观看| 久久久久中文| 日产精品99久久久久久| 亚洲美腿欧美偷拍| 国产乱肥老妇国产一区二| 国产激情视频一区二区| 成人精品视频久久久久| 国产内射老熟女aaaa∵| 成人在线资源网址| 国产一区二区三区高清播放| 国产在视频线精品视频www666| 久久久国产综合精品女国产盗摄| 亚瑟在线精品视频| 欧美激情va永久在线播放| 一区二区三区美女| 欧美性生交大片免费| 国产一区二区三区精品在线观看| 免播放器亚洲一区| wwwjizzjizzcom| 最新亚洲精品国自产在线观看| 欧美在线视频二区| 亚洲欧美日本一区| 国产一区二区三区四区在线观看| 精品一区二区三区毛片| 在线观看日韩专区| 欧美知名女优| 成人免费在线视频网| 久久不射网站| 精品高清美女精品国产区| 中文字幕第17页| 国产精品伦一区二区三级视频| 非洲一级黄色片| 波多野结衣mp4| 偷拍亚洲色图| 亚洲欧美另类人妖| 蜜桃视频在线观看www| 欧美性一区二区三区| 成人在线免费观看一区| 国产xxxx视频| 欧美巨大黑人极品精男| 日韩精品一区国产| 国产精品视频一区二区高潮| 国产欧美日韩一级| 91夜夜揉人人捏人人添红杏| 欧美大片拔萝卜| eeuss鲁片一区| 亚洲成人福利片| 欧美色欧美亚洲高清在线视频| 欧美高清视频一区二区三区在线观看| 可以免费在线看黄的网站| 亚洲欧美日韩网站| 欧美黑人巨大videos精品| 高清在线观看免费韩剧| √天堂中文官网8在线| 91亚洲国产成人精品一区二区三| 欧美一区二区视频在线| 五月天婷婷综合网| 久久久成人免费视频| 日韩电影大全免费观看2023年上| 99成人在线视频| 日韩av高清在线观看| 毛片在线能看| 欧美日本一区二区高清播放视频| 国产精品无码免费播放| 久久精品99国产精品酒店日本| 欧美成人日本| 国产精品国产对白熟妇| 亚洲国产精久久久久久久| 91久久久久久久久久久久久久| 国内精品伊人久久久久影院对白| 日韩av电影免费在线| 亚洲欧美日韩专区| 欧美成人一区在线| 国产精品久久久久国产a级| 啪一啪鲁一鲁2019在线视频| 99久久精品免费看国产四区| 国产超级va在线视频| 污污视频网站在线| 精品日韩av一区二区| 少妇一级黄色片| 亚洲国产高清福利视频| 青青草成人在线| 综合激情久久| 亚洲成人av在线影院| 免费高清在线视频一区·| 九色综合婷婷综合| 国产一区二区三区综合| 久久久精品国产免大香伊| 国产日产亚洲精品系列| 成人在线观看高清| 久久久久久久久国产一区| 在线看污网站| 国产精品500部| 你懂的视频网| 正在播放一区二区| 国产激情在线观看视频| 91久久久久久白丝白浆欲热蜜臀| 69精品视频| 亚洲国产精选| 欧美国产综合色视频| 欧美第一黄网免费网站| k8久久久一区二区三区| 艹b视频在线观看| 一本色道久久综合亚洲精品不| 国产日韩精品在线看| 国产极品模特精品一二| 在线观看福利一区| 国产伦精品一区二区三区视频痴汉| 邪恶网站在线观看| 成人性生交大片免费看中文网站| 久久久久人妻一区精品色| 九九九在线观看| 亚洲一区二区三区四区电影| 色一情一乱一伦一视频免费看| 国产精品久久久久久av福利软件| 色在线视频观看| 久久久久久综合网| 高清欧美一区二区三区| 国产亚洲欧美日韩日本| 欧美黄视频在线观看| 樱桃视频成人在线观看| 日韩二区三区在线| 国产性色一区二区| 日韩在线视频一区| 色婷婷综合久久久中文一区二区| 精品国产免费第一区二区| 97dyy97影院理论片在线| 国产女人高潮的av毛片| 亚洲精品国产拍免费91在线| 天堂网av在线播放| 99re在线视频精品| xxxcom在线观看| 国产精品嫩模av在线| 亚洲天堂自拍偷拍| 国产精品x453.com| 国产经典一区二区三区| aaaa一级片| 青青草影院在线观看|