84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我可以透過navigator.mediaDevices.enumerateDevices()Promise 取得「videoinput」類型的 mediaDevices。
navigator.mediaDevices.enumerateDevices()
我可以透過navigator.mediaDevices.getUserMedia(constraints)承諾取得 mediaStream。
navigator.mediaDevices.getUserMedia(constraints)
為了在 userMedia 中擁有兩個視訊軌道,constraints應該是什麼樣子?
constraints
每次呼叫getUserMedia()時最多可以獲得一個視訊軌道和一個音訊軌道,但可以多次呼叫。不過,這可能會多次詢問用戶,具體取決於 https、瀏覽器以及用戶的操作。
getUserMedia()
遵循標準(目前需要在Chrome 中使用adapter.js),以獲得特定的「videoinput " 設備,使用deviceId約束將其deviceId傳遞到getUserMedia中:
deviceId
getUserMedia
navigator.mediaDevices.enumerateDevices() .then(devices => { var camera = devices.find(device => device.kind == "videoinput"); if (camera) { var constraints = { deviceId: { exact: camera.deviceId } }; return navigator.mediaDevices.getUserMedia({ video: constraints }); } }) .then(stream => video.srcObject = stream) .catch(e => console.error(e));
exact關鍵字使約束成為必需,並保證它只回傳正確的約束,否則就會失敗。
exact
如果您想要兩個攝像頭,則必須使用不同的deviceId再次呼叫getUserMedia,並希望您所在的作業系統支援它(例如,手機通常不要)。
每次呼叫
getUserMedia()
時最多可以獲得一個視訊軌道和一個音訊軌道,但可以多次呼叫。不過,這可能會多次詢問用戶,具體取決於 https、瀏覽器以及用戶的操作。遵循標準(目前需要在Chrome 中使用adapter.js),以獲得特定的「videoinput " 設備,使用
deviceId
約束將其deviceId
傳遞到getUserMedia
中:exact
關鍵字使約束成為必需,並保證它只回傳正確的約束,否則就會失敗。如果您想要兩個攝像頭,則必須使用不同的
deviceId
再次呼叫getUserMedia
,並希望您所在的作業系統支援它(例如,手機通常不要)。