通过`getDisplayMedia`检查浏览器/平台是不是支持屏幕捕获

Posted

技术标签:

【中文标题】通过`getDisplayMedia`检查浏览器/平台是不是支持屏幕捕获【英文标题】:Check if browser/platform support screen capturing via `getDisplayMedia`通过`getDisplayMedia`检查浏览器/平台是否支持屏幕捕获 【发布时间】:2019-11-13 17:49:24 【问题描述】:

我们可以通过navigator.mediaDevices.getDisplayMedia() 向屏幕或窗口请求媒体流。但是,这会立即提示用户决定使用哪种捕获方式。我需要检查浏览器/平台是否甚至支持屏幕捕获。

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

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

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

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

【问题讨论】:

您使用的是 HTTPS 吗? @str 是的,我是。另请注意,这个问题不是关于“我不能在移动设备上使用getDisplayMedia”。这对我来说很好。我只是想检查一下是否支持 getDisplayMedia 不返回承诺吗? @aksappy 是的。为什么?我看不出这对我有什么帮助。要么立即解决错误(在移动设备上),要么用户收到浏览器提示(桌面,如果支持)。 嗯,这更像是一个对话开始 :-) 你看过 MediaRecorder 吗?它使用 isTypeSupported 方法解决了您的用例。 【参考方案1】:

不幸的是,没有直接的方法来检测 getDisplayMedia 是否可以在这些浏览器上运行。

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

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


1。 caniuse 声称 Opera Mobile 支持,但当我 test it 时似乎不是这样。

【讨论】:

请为这个 chromium 错误报告投票以解决这个问题bugs.chromium.org/p/chromium/issues/detail?id=1038244#c2

以上是关于通过`getDisplayMedia`检查浏览器/平台是不是支持屏幕捕获的主要内容,如果未能解决你的问题,请参考以下文章

使用 navigator.mediaDevices.getDisplayMedia 的 JavaScript 屏幕录像不可搜索

Google 通过 MediaRecorder API 满足流媒体需求

通过 JavaScript 检查浏览器标签?

通过 PHP 检查浏览器的语言?

javascript 通过javascript检查浏览器类型

如何检查浏览器是不是可以通过 html5 video 标签播放 mp4?