我应该将哪些约束传递给 getUserMedia() 以获得两个视频 mediaStreamTracks?

What constraints should I pass to getUserMedia() in order to get two video mediaStreamTracks?

我可以通过 navigator.mediaDevices.enumerateDevices() 承诺获得 'videoinput' 类型的媒体设备。

我可以通过 navigator.mediaDevices.getUserMedia(constraints) promise 获取 mediaStream。

为了在 userMedia 中有两个视频轨道,constraints 应该是什么样子?

每次调用最多可以获得一个视频轨道和一个音频轨道getUserMedia(),但可以多次调用。这可能会不止一次询问用户,具体取决于 https、浏览器和用户的操作。

跟随 Chrome 中的 the standard (which at this time requires using adapter.js),要获得特定的 "videoinput" 设备,请使用 deviceId 将其 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 关键字使约束成为必需,保证它将 return 只有正确的约束,否则失败。

如果你想要两个摄像头,你将不得不用不同的 deviceId 再次调用 getUserMedia,并希望你正在使用的 OS 支持它(例如手机通常不要)。