通过 `getDisplayMedia` 检查 browser/platform 是否支持屏幕捕获

Check if browser/platform support screen capturing via `getDisplayMedia`

我们可以通过 navigator.mediaDevices.getDisplayMedia() 向屏幕或 windows 请求媒体流。但是,这会立即提示用户决定使用哪种捕获。我需要检查 browser/platform 是否支持屏幕捕获。

当然,可以检查'getDisplayMedia' in navigator.mediaDevices,但这只是告诉我们浏览器是否支持API。特别是,在 Android 上的 FF 和 Chrome 上,定义了 API,我可以调用 getDisplayMedia(),但它总是立即 returns a NotAllowedError错误(这是意料之中的:according to caniuse,移动浏览器尚不支持getDisplayMedia。)

接下来,我尝试检查 navigator.mediaDevices.getSupportedConstraints()。但是,我的移动 FF returns 与我的桌面 FF 完全相同。特别是,navigator.mediaDevices.getSupportedConstraints().mediaSource 在这两种情况下都是 true。最后,navigator.mediaDevices.enumerateDevices()返回的数据对我也没有帮助。我只得到一个我无法以任何方式解释的设备和组 ID(对吗?)。

是否可以预先检测是否支持通过getDisplayMedia截屏?

(注意: 看起来很相似,但是大约 getUserMedia 并且已经很老了)

不幸的是,没有直接的方法来检测 getDisplayMedia 是否适用于这些浏览器。

今天您所能做的就是browser-sniff the UA string检测您不在移动设备上,缺少支持。¹

我已经根据你的问题提交了 issue on the spec,看看 getDisplayMedia 在不受支持时是否更好 undefined


1. caniuse claims Opera Mobile has support, but this appears not so when I test it.