搜索

首页  >  问答  >  正文

为了获得两个视频 mediaStreamTrack,我应该传递哪些约束给 getUserMedia()?

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

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

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

P粉818317410P粉818317410397 天前613

全部回复(1)我来回复

  • P粉060528326

    P粉0605283262023-10-24 00:02:22

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

    遵循标准(目前需要在 Chrome 中使用 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 关键字使约束成为必需,保证它只返回正确的约束,否则就会失败。

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

    回复
    0
  • 取消回复