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
,并希望您所在的操作系统支持它(例如,手机通常不要)。