通过`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 满足流媒体需求