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