日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

js實現調用網絡攝像頭及常見錯誤處理

瀏覽:192日期:2024-04-04 11:37:42

最近由于業務的原因,需要在Web端頁面接入調試各類的網絡攝像頭,遇到了很多匪夷所思的問題(說的就是讀得出攝像頭的品牌,讀不出攝像頭的分辨率)。于是整理了這篇文章作為備忘錄,也希望能幫到有類似的小伙伴們。

基礎代碼

navigator.mediaDevices.getUserMedia({ audio: false, video: true }).then(async (stream) => { let video = document.getElementById(’#video’) // 兼容性監測 if( ’srcObject’ in video ) {video.srcObject = stream } else { // 在支持srcObject的瀏覽器上,不再支持使用這種方式 video.src = URL.createObjectURL(stream) } await video.play()})兼容性

js實現調用網絡攝像頭及常見錯誤處理

從caniuse的兼容性來看,整體兼容性一般,IE系列瀏覽器完全不支持,iOS不僅需要iOS 11以上的版本,而且在APP的嵌入式頁面也無法通過api進行調用。

開發遇到的各種問題

瀏覽器控制臺提示mediaDevices.getUserMedia is not a function

由于受瀏覽器的限制,navigator.mediaDevices.getUserMedia在https協議下是可以正常使用的,而在http協議下只允許localhost/127.0.0.1這兩個域名訪問,因此在開發時應做好容災處理,上線時則需要確認生產環境是否處于https協議下。

let mediaDevices = navigator.mediaDevices || null if( mediaDevices === null ) { console.warn(`請確定是否處于https協議環境下`) return } mediaDevices.getUserMedia({ audio: false, video: true }).then(async (stream) => {})

獲取攝像頭的硬件參數

我在項目開發中需要用到的硬件參數主要有兩種:品牌,分辨率。獲取攝像頭的品牌名稱相對來說比較簡單,可直接通過mediaDevices.enumerateDevices()獲取電腦上可使用的外設列表,通過kind字段過濾出攝像頭。

if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) { console.log('瀏覽器不支持enumerateDevices屬性') return} navigator.mediaDevices.enumerateDevices().then((devices) => { let devicesList = devices.filter((device) => device.kind === ’videoinput’) // devicesList -> [{ kind: ’videoinput’, name: ’FaceTime HD Camera (Built-in)’, deviceId: xxx }] // 在devicesList獲取到的deviceId可以用于切換攝像頭 // 具體方法:mediaDevices.getUserMedia({ audio: false, video: { deviceId } })})

分辨率則不能直接通過官方的api獲取到,從MDN上查到的理由是為了保護用戶的個人隱私,而分辨率就在保護的范疇內。(個人非常好奇分辨率為啥是隱私?)

MDN原文(鏈接):

由于隱私保護的原因,無法訪問用戶的攝像頭和麥克風信息

但也并不是完全無法獲取到,由于可以通過video標簽在網頁上播放攝像頭中所錄取到的內容,而video標簽會默認將大小設置為與攝像頭相同的大小,因此通過獲取video的大小來獲取攝像頭的分辨率。

經過測試,獲取到的值不受樣式的影響,所以可以通過樣式控制video的大小,但是不會影響到分辨率。

let mediaDevices = navigator.mediaDevices || null if( mediaDevices === null ) { console.warn(`請確定是否處于https協議環境下`) return } mediaDevices.getUserMedia({ audio: false, video: true }).then(async (stream) => { let video = document.getElementById(’#video’) video.srcObject = stream await video.play() // 1280,720 console.log(video.videoWidth, video.videoHeight)})

無攝像頭/無使用權限等錯誤的處理

getUserMedia本身集成了幾個比較常見的錯誤提示,比如常見的無攝像頭、無使用權限等,通過catch能處理大部分類似的錯誤。

let mediaDevices = navigator.mediaDevices || null if( mediaDevices === null ) { console.warn(`請確定是否處于https協議環境下`) return } mediaDevices.getUserMedia({ audio: false, video: true }).then(async (stream) => { let video = document.getElementById(’#video’) video.srcObject = stream await video.play() }).catch((error) => { let message = error.message || error, response = { ’permission denied’: ’瀏覽器禁止本頁面使用攝像頭,請開啟相關的權限’, ’requested device not found’: ’未檢測到攝像頭’ } alert(response[ message.toLowerCase() ] || ’未知錯誤’)})

攝像頭拔出檢查

手機端由于攝像頭是手機自帶的,所以一般不需要對攝像頭是否拔出進行檢查。但在PC上有拔出攝像頭數據線的情況發生,這種時候就需要對攝像頭的狀態進行監控。最開始想到的是,getUserMedia在攝像頭拔出時可能會通過catch報錯。然而經過多次的實驗,getUserMedia在攝像頭拔出時,不會響應找不到攝像頭的錯誤,想通過catch直接監控這種方法并不可行。在幾乎沒有思路的時候,在getUserMedia文檔上看到了這么一句話:

getUserMedia返回一個 Promise , 這個Promise成功后的回調函數帶一個 MediaStream 對象作為其參數。

MediaStream是接收多媒體(包括音頻、視頻)內容流的一個對象,在谷歌瀏覽器(其他瀏覽器未測試)的控制臺上打印之后,其屬性值如下:

id是MediaStream對象的唯一標識符,active是當前內容流是否處于活動狀態,下面幾個字段則是谷歌瀏覽器提供的鉤子。

js實現調用網絡攝像頭及常見錯誤處理

在攝像頭拔出的一瞬間,active會從true變更為false,同時觸發oninactive鉤子,有了狀態監聽之后事情就簡單了許多。代碼經過測試后發現,對用戶變更攝像頭權限也有效。

// 判斷攝像頭是否在線let cameraIsOnline = false const loadWebCamera = () => { let mediaDevices = navigator.mediaDevices || null if( mediaDevices === null ) { console.warn(`請確定是否處于https協議環境下`) return } mediaDevices.getUserMedia({ audio: false, video: true }).then(async (stream) => { let video = document.getElementById(’#video’) video.srcObject = stream // 兼容性處理 if( stream.oninactive === null ) { // 監聽流中斷,流中斷后將重新進行調用自身進行狀態監測 stream.oninactive = () => loadWebCamera() } await video.play() cameraIsOnline = true }).catch((error) => { let message = error.message || error, response = {’permission denied’: ’瀏覽器禁止本頁面使用攝像頭,請開啟相關的權限’,’requested device not found’: ’未檢測到攝像頭’,’could not start video source’: ’無法訪問到攝像頭,請重新插拔后重試’ } cameraIsOnline = false alert(response[ message.toLowerCase() ] || ’未知錯誤’) })}

不過,兼容性也非常地捉急,也有很多字段都是提案階段,開發階段建議做好兼容性處理,防止生產環境出現問題。

到此這篇關于js實現調用網絡攝像頭及常見錯誤處理的文章就介紹到這了,更多相關js 調用網絡攝像頭內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美激情99| 成年男女免费视频网站不卡| 日本不卡在线视频| 在线手机中文字幕| 激情欧美国产欧美| 亚洲永久字幕| 涩涩涩久久久成人精品| 综合一区二区三区| 国产精品伊人| 在线天堂资源www在线污| 国产99精品| 中文字幕一区二区精品区| 日韩va亚洲va欧美va久久| 国产精品亚洲综合色区韩国| 91成人在线| 国产精品久久久久久久久久10秀| 久久一区二区中文字幕| 亚洲三区欧美一区国产二区| 免费在线观看一区| 欧美日韩国产在线观看网站| 天海翼精品一区二区三区| 美女高潮久久久| 欧美日韩国产探花| 国产精品一区二区精品| 亚洲高清成人| 国产欧美在线观看免费| 欧美粗暴jizz性欧美20| 欧美日韩一区二区三区四区在线观看 | 国产精品久av福利在线观看| 国产一区精品福利| 性色av一区二区怡红| 久久亚洲资源中文字| 91精品成人| 国产日韩一区二区三区在线| 日韩在线观看| 欧美中文一区| 欧美午夜精品一区二区三区电影| 日韩国产欧美视频| 亚洲伦乱视频| 国产免费播放一区二区| 欧美日韩国产高清| 国产精品99一区二区三| 日韩精选在线| 一区福利视频| 精品高清久久| 免费在线观看精品| 国产综合色区在线观看| 国产精品成人国产| 欧美在线综合| 久久青草久久| 国产白浆在线免费观看| 日韩av中文在线观看| 欧美va天堂在线| 国产日韩电影| 久久av免费看| 日本中文字幕不卡| 亚洲欧洲一区二区天堂久久| 免费看av不卡| 久久女人天堂| 国产精品香蕉| 欧美亚洲免费| 日韩欧美美女在线观看| 影院欧美亚洲| 成人羞羞视频播放网站| 国产极品模特精品一二| 亚洲三级国产| 日韩午夜高潮| 99精品网站| 日韩另类视频| 国产在线观看www| 久久免费视频66| 国产精品视频一区二区三区四蜜臂 | 欧美精品观看| 红桃视频国产一区| 日韩在线高清| 黑人精品一区| 国产a亚洲精品| 精品一区二区三区中文字幕在线| 日韩国产一二三区| 亚洲精品伊人| 亚洲欧美专区| 亚洲精品系列| 亚洲一区欧美| 亚洲日本三级| 亚洲综合激情在线| 在线国产精品一区| 综合色就爱涩涩涩综合婷婷| 亚洲成人免费| 国产精品呻吟| 在线精品亚洲| 欧美日韩a区| 国产精品成人**免费视频| 国产美女久久| 美女毛片一区二区三区四区最新中文字幕亚洲| 欧美日韩中文| 久久久精品国产**网站| 精品视频国产| 色网在线免费观看| 99精品电影| 在线综合亚洲| 少妇精品久久久一区二区| 日韩高清成人在线| 日韩国产一区二| 国产精品对白| 免费一二一二在线视频| 国产91精品对白在线播放| 国产一级一区二区| 日韩精品一级| 久久久久久亚洲精品美女| 色一区二区三区| 中文日韩在线| 欧美在线观看天堂一区二区三区| 国产高清日韩| 欧美freesex黑人又粗又大| 欧美理论视频| 日韩精彩视频在线观看| 美女免费视频一区| 日韩欧美综合| 日韩影院免费视频| 国产麻豆精品| 亚洲va中文在线播放免费| 亚洲成人一区| 日韩国产精品久久久久久亚洲| 麻豆视频久久| 91久久午夜| 欧美激情五月| 激情欧美丁香| 久久国产欧美日韩精品| 91视频一区| 丝袜亚洲另类欧美| 欧美激情福利| 国产亚洲精品自拍| 国产一卡不卡| 99久久婷婷| 日韩av在线播放中文字幕| 国产一区二区三区黄网站 | 免费在线亚洲欧美| 久久激情中文| 日韩精品91亚洲二区在线观看| 国产一区二区精品福利地址| av亚洲在线观看| 国产精品亚洲四区在线观看| 99久精品视频在线观看视频| 亚州精品视频| 婷婷激情一区| 青青国产精品| 在线观看免费一区二区| 你懂的国产精品永久在线| 99热精品在线观看| 精品久久久久中文字幕小说| 一二三区精品| 99久久www免费| 欧美国产精品| 欧美综合国产| 色偷偷偷在线视频播放| 青草国产精品久久久久久| 成人小电影网站| 日韩高清不卡一区二区| 美女网站一区| 欧美激情 亚洲a∨综合| 99国产精品99久久久久久粉嫩| 久久精品资源| 日韩一区二区三区在线看| 久久久成人网| 精品视频国内| 国产精品一二| 亚洲精品乱码日韩| 欧美另类专区| 久久精品成人| 成人国产精选| 国产精品99久久免费| 亚洲综合中文| 99日韩精品| 亚洲福利久久| 欧美成人a交片免费看| 国产乱码精品一区二区三区四区 | 久久精品99国产精品| 影音先锋国产精品| 播放一区二区| 国产成人免费视频网站视频社区| 日韩中文字幕| 亚洲免费在线| 三级精品视频| 久久久久久夜| 国产精品99精品一区二区三区∴| 亚州国产精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 91精品国产调教在线观看| 风间由美中文字幕在线看视频国产欧美| 日韩欧美精品一区二区综合视频| 中文日韩欧美| 国产亚洲毛片| 91久久中文| 黄色亚洲精品| 午夜日韩福利| 亚洲在线网站| 久久亚洲风情| 亚洲综合丁香| 综合在线一区| 亚洲免费一区三区|