Cannot read property ‘getDisplayMedia‘ of undefined

在将项目从本地部署到服务器时发现直播功能失效,原因在于navigator.getDisplayMedia在非HTTPS环境下返回undefined。解决方案包括为服务器申请SSL证书或引导用户在浏览器设置中添加站点至安全源列表。此外,前端可检测navigator.mediaDevices是否存在以避免重复提示用户操作。
摘要由CSDN通过智能技术生成


今天在把项目部署到服务器上的时候,突然发现直播功能失效了,在本地跑是没有问题的,找了半天终于知道是什么原因了,即 Cannot read property ‘getDisplayMedia’ of undefined今天就来分享一下这个原因出现的问题和一些解决思路。

一、问题出现原因

我们使用腾讯云直播虽然使用了第三方库,但是其背后还是用的是浏览器自己的一些实现方法,对其进行了一个封装,详情可以看我之前写的博客共享屏幕(带声音)
现在就来说一下具体问题吧
浏览器为了用户隐私和安全,使用navigator.getDisplayMedia 获取用户多媒体权限时,它只能在三种场景下工作
1、本地(即localhost或者127.0.0.1开头)
2、HTTPS开头
3、使用file://打开的本地文件
其他情况下navigator.getDisplayMedia获取的值就是undefined

二、解决方法

方法一:

部署服务器的人给服务器申请一个SSL证书,这个方法并不难,但是得靠后端的去费点事

方法二:

这个方法就是让用户设置一下,以谷歌浏览器为例(其实Edge方法差不多)
在浏览器地址栏复制下边的代码

 chrome://flags/#unsafely-treat-insecure-origin-as-secure

会出现这个
在这里插入图片描述
之后把需要直播的网站站链接复制到框里边,如果是多个连接,连接之间用逗号隔开
在这里插入图片描述
之后点击右边的框
在这里插入图片描述
将其改为Enable,改完就右下角就会出现一个按钮
在这里插入图片描述
点击后会自动重启浏览器,之后就可以使用了
Edge也是一样的操作方法,只不过输入地址栏的代码不同

edge://flags/#unsafely-treat-insecure-origin-as-secure

三、其他注意事项

第二个方法执行完,部署到服务器上后,如果用户执行了方法二的操作,前端可以通过判断typeof navigator.mediaDevices是否为‘undefined’来判断用户是否执行过方法二操作,这样不用每次都提醒用户去执行了
操作了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值