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
,並希望您所在的作業系統支援它(例如,手機通常不要)。