關(guān)于 navigator.mediaDevices.getUserMedia 的輸入?yún)?shù)說明
本文講解使用 SAP UI5 barcode scanner 調(diào)用本機攝像頭時,在 PC 端瀏覽器測試時,同樣是 Cordova API 不可用,進入 else 分支的執(zhí)行邏輯:
如果 Cordova API 不可用,但是 isUserMediaAccessSupported 仍然返回 true,則仍然可以打開 scan 對話框:
/** * Used to detect browsers which does not have access to html5 user media api and cant use device camera * @private * @returns {boolean} true is user media access supported by html5 compatible browser */ function isUserMediaAccessSupported() { return !!(window && window.navigator && window.navigator.mediaDevices && window.navigator.mediaDevices.getUserMedia); }
這里 window.navigator.mediaDevices.getUserMedia 的含義:
MediaDevices.getUserMedia() 方法提示用戶允許使用媒體輸入,該輸入生成一個 MediaStream,其軌道包含所請求的媒體類型。
例如,該流可以包括視頻軌道(由硬件或虛擬視頻源(如相機、視頻記錄設(shè)備、屏幕共享服務(wù)等)產(chǎn)生)、音頻軌道(類似地,由物理或 虛擬音頻源(如麥克風、A/D 轉(zhuǎn)換器等),以及可能的其他軌道類型。
它返回一個解析為 MediaStream 對象的 Promise。 如果用戶拒絕許可,或者匹配的媒體不可用,則分別以 NotAllowedError 或 NotFoundError DOMException 拒絕承諾。
其中 getUserMedia 為瀏覽器原生實現(xiàn)。
async function getMedia(constraints) { let stream = null; try { stream = await navigator.mediaDevices.getUserMedia(constraints); /* use the stream */ } catch(err) { /* handle the error */ } }
傳入 getUserMedia 的 constraints 參數(shù):
constraints 是一個對象,指定要請求的媒體類型,以及每種類型的任何要求。
約束參數(shù)是一個具有兩個成員的對象:視頻和音頻,描述請求的媒體類型。 必須指定其中之一或兩者。 如果瀏覽器無法找到符合給定約束的指定類型的所有媒體軌道,則返回的 Promise 會被 NotFoundError DOMException 拒絕。
如果為媒體類型指定了 true,則結(jié)果流中需要包含該類型的軌道。 如果由于任何原因不能返回一個,對 getUserMedia() 的調(diào)用將導(dǎo)致錯誤。
雖然出于隱私原因無法訪問有關(guān)用戶相機和麥克風的信息,但應(yīng)用程序可以使用額外的約束來請求它需要和想要的相機和麥克風功能。 以下表示對 1280x720 相機分辨率的偏好:
{ audio: true, video: { width: 1280, height: 720 } }
如果不存在此分辨率或更高分辨率的相機,則返回的 Promise 將被 OverconstrainedError 拒絕,并且不會提示用戶。
API Explorer CloudIDE JavaScript 通用安全
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。