【问题标题】:What constraints should I pass to getUserMedia() in order to get two video mediaStreamTracks?为了获得两个视频 mediaStreamTrack,我应该将哪些约束传递给 getUserMedia()?
【发布时间】:2015-11-17 16:13:24
【问题描述】:

我可以通过navigator.mediaDevices.enumerateDevices() promise 获得“videoinput”类型的 mediaDevices。

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

constraints 应该是什么样子才能在 userMedia 中拥有两个视频轨道?

【问题讨论】:

  • “在 userMedia 中”是什么意思?当getUserMedia 被调用时,您是想同时获取两个摄像头,还是尝试将可能的选择限制为两个摄像头(包括某些浏览器实现的权限提示中显示的内容)?

标签: constraints webrtc getusermedia


【解决方案1】:

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

按照the standard(此时需要在Chrome中使用adapter.js),要获得特定的“视频输入”设备,请使用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 关键字使约束成为必需,保证它只会返回正确的,否则会失败。

如果您想要两个摄像头,则必须再次使用不同的deviceId 调用getUserMedia,并希望您使用的操作系统支持它(例如手机通常不支持)。

【讨论】:

  • 谢谢!但是我们仍然可以在手机上从后置摄像头切换到前置摄像头,对吧?
  • 是的,前提是您 .stop() 现有曲目,然后再次致电 getUserMedia。您可以为此 stackoverflow.com/a/32364912/918910 使用 enumerateDevicesfacingMode 约束
猜你喜欢
  • 2018-06-10
  • 2021-03-11
  • 2022-01-16
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多