【发布时间】: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