鍍金池/ 問答/HTML5  網(wǎng)絡(luò)安全  HTML/ web是否能夠修改手機(jī)端調(diào)用攝像頭彈出來的界面?

web是否能夠修改手機(jī)端調(diào)用攝像頭彈出來的界面?

圖片描述

現(xiàn)在想用web實(shí)現(xiàn)上圖的這種效果,我發(fā)現(xiàn)直接使用下面的代碼是直接跳轉(zhuǎn)系統(tǒng)的圖象界面,不知道能不能實(shí)現(xiàn)途中的效果。

<input type="file" apture="camera"></input>
回答
編輯回答
青黛色

這里面的坑是非??膳碌摹?/p>

主要是用到 MediaDevice.getUserMedia 這個(gè)東西。

界面先不說,要注意的是這東西的兼容性非常糟糕,比如:

創(chuàng)建的時(shí)候需要傳遞配置參數(shù),多數(shù)情況下你可以按文檔中的說法去指定分辨率:

{
    video: {
        width: xxx,
        height: xxx
    }
}

然而,這個(gè)寫法會(huì)導(dǎo)致在 IOS 平臺(tái)獲取不到任何流數(shù)據(jù),正確姿勢是這樣的:

{
    video: true
}

但是很顯然,這樣就沒辦法指定你的視頻流的分辨率大小,系統(tǒng)想給你怎樣的就是怎樣的。

然后就是更加坑的第二點(diǎn):

在文檔的兼容性列表中,提到了 Safari Mobile 的最低支持版本為 11,但是我在測試時(shí)(四臺(tái) IOS 設(shè)備,三臺(tái) iPhone,一臺(tái) iPad,均為 IOS 11)只能在 iPad 上獲得流數(shù)據(jù),iPhone 上是不行的。

這里面引發(fā)了第三點(diǎn):

這個(gè) API 有個(gè)歷史兼容的舊版本: navigator.getUserMedia,兩個(gè)版本的 API 差別大到一個(gè)是用 Promise (新版本) 處理而另一個(gè)是用 callback (舊版本),因此你必須在使用前進(jìn)行 if(navigator.MediaDevices) 來判斷是否有新 API 能調(diào)用,而問題在于,即便同為 IOS 11iPhone 上只有舊版本,iPad 上卻是新的。

所以,雖然有接口可以讓你獲得攝像頭的流數(shù)據(jù),但是感覺兼容性是個(gè)硬傷,請多考慮。

另外請多留意文檔中提及的兼容性處理庫 webrtc-adapter,而這里是個(gè)測試接口可用性的頁面。

由于我并不是前端開發(fā),因此這個(gè)兼容性問題已經(jīng)折磨得我無法再鉆研下去,也許我測試方法或結(jié)果有誤,有了解這方面情況的朋友還請麻煩指出錯(cuò)誤,謝謝!

2018年4月11日 01:56