指示 getUserMedia 使用最佳可用相机分辨率

Saq*_*qib 5 html javascript video getusermedia

我正在使用 getUserMedia 函数从网络摄像头录制视频。一切工作正常,除了当我刚刚指定 video: true 约束时它仅以 640x480 分辨率录制。

如果我设置如下约束,我现在可以在笔记本电脑上获得更好的录音质量:

var mediaConstraints = {
    audio: true,
    video: {
        width: { min: 1280 },
        height: { min: 720 }
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,如果另一台设备的分辨率高于 1280x720,或者甚至更低,该怎么办?

我尝试将 min 设置为非常低,将 max 设置为非常高;但它只是默认为 640x480,或者根本没有给出任何内容。我也尝试设置所需的大小,但正如预期的那样 - 我最终得到了该值。如果我将“期望”设置得非常高(因此它会选择最接近的可用值),那么我最终将一无所获。

那么问题是,如何设置约束以获得相机可以提供的最大分辨率?

jib*_*jib 3

请注意,这min意味着“最小允许值”,并且由于大多数浏览器默认为 640x480,因此低于该值的值不会产生太大影响。

根据规格,只要要求高分辨率,您就应该获得相机可以产生的最接近的分辨率。例如:

var mediaConstraints = {
    audio: true,
    video: { width: 2880, height: 1800 }
};
Run Code Online (Sandbox Code Playgroud)

这适用于 Firefox,也可能适用于 Edge(我还没有尝试过)。

有关其工作原理的更多信息,请参阅另一个答案。

不幸的是,Chrome(尽管他们正在研究它)仍然依赖adapter.js polyfill来实现标准约束语法,并且该polyfill有一些限制,就像您在这里遇到的那样。

如果您使用的是adapter.js,您可以在Chrome的Web控制台中查看它本机使用的旧的非标准语法。使用该语法可以构造一系列连续更宽的最小范围,并让算法以这种方式更喜欢更高的值。