【问题标题】:getUserMedia on Chrome frequently does not return the best resolutionChrome 上的 getUserMedia 经常无法返回最佳分辨率
【发布时间】:2020-04-09 21:07:35
【问题描述】:

我在 Linux 上的 Chrome 80 上使用 navigator.mediaDevices.getUserMedia()。为了获得最高质量,我运行了一系列约束,检查错误或流实际上不是所需的大小。对于我的至少一台相机,它通常只能获得 640x480 尺寸,而不是它能够达到的 1280x720。如果我为不同的设备调用getUserMedia(),然后返回并为原始设备调用它,它通常(但并非总是)会获得 1280x720 版本。我不确定如何强制 Chrome 使用正确的尺寸。

这些是我让它使用的约束(按顺序):

// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"min":1920,"ideal":1920,"max":1920},"height":{"min":1080,"ideal":1080,"max":1080}}}

// succeeds, but returns 640x480
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"ideal":1920},"height":{"ideal":1080}}}

// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"min":1920},"height":{"min":1080}}}

// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"exact":1920},"height":{"exact":1080}}}

// succeeds, but returns 640x480
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":1920,"height":1080}}

然后是 1600x1200、1280x720、800x600 和 640x480 的相同模式。最后一个最终成功了,因为它匹配从 getUserMedia() 返回的唯一维度。

这在 Firefox 上运行良好。它适用于某些设备。如果我在第一个设备加载了低尺寸后选择其他设备,它有时会起作用。

OverconstrainedError 表示违规约束是 deviceId 的事实有点令人担忧,但根据我所读到的内容,它只返回第一个约束,不一定是失败的约束。无论如何,当其他变体没有失败时,很难看出设备 ID 会如何导致它失败。

我需要做什么才能完成这项工作?

【问题讨论】:

    标签: google-chrome webrtc getusermedia


    【解决方案1】:

    我在调用enumerateDevices() 之前调用了getUserMedia(),以便获得查看设备名称的权限。该调用使用约束{video:true, audio:true}。至少在 Chrome 中,这得到了最低的分辨率。对同一设备的进一步调用将始终返回其显示的相同分辨率。为了解决这个问题,我用适当大的宽度和高度 {video:{width:4096,height:2160}} 替换了 true,现在 Chrome 在后续调用中获得了最高分辨率!

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多