为了获得两个视频mediaStreamTracks,我应该向getUserMedia()传递什么约束?

vad*_*irn 5 constraints webrtc getusermedia

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

我可以通过navigator.mediaDevices.getUserMedia(constraints)承诺获得mediaStream .

constraints在userMedia中有两个视频轨道应该是什么样的?

jib*_*jib 12

每次拨打电话时getUserMedia(),您最多可以获得一个视频轨道和一个音频轨道,但您可以多次调用它.这可能会多次询问用户,具体取决于https,浏览器以及用户的操作.

遵循标准(此时需要在Chrome中使用adapter.js),要获取特定的"videoinput"设备,请将其传递deviceIdgetUserMedia使用deviceId约束:

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));
Run Code Online (Sandbox Code Playgroud)

exact关键字使所需的约束,保证它会只返回正确的,还是失败.

如果你想要两个摄像头,你将不得不getUserMedia再次使用不同的摄像头,deviceId并希望你所使用的操作系统支持它(例如手机通常不支持).

  • 是的,如果您在再次调用 `getUserMedia` 之前使用 `.stop()` 现有曲目。您可以为此 http://stackoverflow.com/a/32364912/918910 使用 `enumerateDevices` 或 `lookingMode` 约束 (2认同)