Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于浏览器获取语音权限后一直未关闭的问题 #23

Closed
Owen-Xu opened this issue Nov 29, 2019 · 12 comments
Closed

关于浏览器获取语音权限后一直未关闭的问题 #23

Owen-Xu opened this issue Nov 29, 2019 · 12 comments

Comments

@Owen-Xu
Copy link

Owen-Xu commented Nov 29, 2019

通过MediaDevices.getUserMedia()方式获取音视频流后,销毁组件后,浏览器的录音标志一直未消失,Windows会提示该网页的麦克风一直处于监听状态。是否应当在销毁组件后,关闭监听状态?请教一下。

@2fps
Copy link
Owner

2fps commented Dec 2, 2019

额,这个没有太多研究,不过浏览器是将录音权限授权给页面了,所以音频设备处于监听状态也是情理之中(做好随时录音的准备)。你可以看下chrome浏览器,在getUserMedia调用后有音频流阶段时,该页tab标签右侧有红点闪烁,没有流时,则没有。
不过这个监听状态,浏览器有提供API调用么?

@Owen-Xu
Copy link
Author

Owen-Xu commented Dec 3, 2019

额,这个没有太多研究,不过浏览器是将录音权限授权给页面了,所以音频设备处于监听状态也是情理之中(做好随时录音的准备)。你可以看下chrome浏览器,在getUserMedia调用后有音频流阶段时,该页tab标签右侧有红点闪烁,没有流时,则没有。
不过这个监听状态,浏览器有提供API调用么?

只是发现了这个现象,我尝试了一下没有解决。阿里云的语音识别页面有个试用,那个试用结束后,会把麦克风停掉,小红点就消失了,不知道那边是怎么做到的。

@2fps
Copy link
Owner

2fps commented Dec 3, 2019

不好意思,昨天在尝试的时候加了getTracks,所以当时红点是会消失的。目前最新版的0.5.3已经修复该问题,在组件销毁后,会关闭监听,demo也已经更新。

感谢提示。

@Owen-Xu
Copy link
Author

Owen-Xu commented Dec 4, 2019

不好意思,昨天在尝试的时候加了getTracks,所以当时红点是会消失的。目前最新版的0.5.3已经修复该问题,在组件销毁后,会关闭监听,demo也已经更新。

感谢提示。

感谢大佬^_^

@Owen-Xu Owen-Xu closed this as completed Dec 4, 2019
@kellenf
Copy link

kellenf commented Feb 5, 2020

求助一个问题,使用Recoder.start()的时候发出网页麦克风请求,但是在允许请求之前其实就已经开始录音了。这个麦克风权限请求该怎么提早请求呢?这样之后需要录音的时候都不需要询问了,谢谢!

@2fps
Copy link
Owner

2fps commented Feb 5, 2020

  1. 在该浏览器上允许过后,以后都是允许的,chrome在 chrome://settings/content/microphone 下记录了允许和禁止的站点。
  2. 提前调用 getUserMedia 方法,提前弹出权限框,你可以在代码中加入这个试下:
navigator.mediaDevices.getUserMedia({audio: true}).then((stream) => {
    stream.getTracks().forEach(track => track.stop());
}, () => {});

这样相当于先打开录音,并立即关闭以提前获得录音的权限。

不错的细节,我一会加个方法上去。

@2fps
Copy link
Owner

2fps commented Feb 5, 2020

已增加 Recorder.getPermission()静态方法,用于提前获取麦克风权限。最新版 1.0.1和0.5.5已更新。

@kellenf
Copy link

kellenf commented Feb 5, 2020

非常感谢您的更新,之前也邮件问过您一个关于获取麦克风权限的后的回调函数问题。
1.麦克风权限那个我现在是recoder.start().then()(【开始录音】)的方式去做获取权限后的录音。但是这个在windows中chrome下有时候会出现can not get .then() property的报错,而且是有时候报错有时候不报错,真的很迷,可能是浏览器对于这个API支持的缘故?
2.我在mac下的safari中测试发现基于这个库有报错:Trying to call getUserMedia from an insecure document.我用的是12.1.2.不知道您是否有做过相关的测试?或者这个问题您能不能给点建议,我已经搜了一些解决方案都是还是不知道怎么解决。
非常感谢!!!

@2fps
Copy link
Owner

2fps commented Feb 6, 2020

@kellenf 请问下你用的包是0.x的还是1.x的?
第一个问题:这个报错我在开发过程中是没有遇到过的,API的话已经做了兼容了。方面提供下chrome的版本号么?我针对性的看下。
第二个:我mac的safari也是 版本 12.1.2 (14607.3.9),但没有这个问题。insecure,你是不是在非localhost或127.0.0.1下依旧使用了http 协议呢?尝试切换下https呢。我的demo在你那边有这个问题么?

@kellenf
Copy link

kellenf commented Feb 8, 2020

您好,我用的包是0.5的,chrome这块就先不麻烦您,现在是在360浏览器上有API有较低概率出错、小米浏览器上API不支持。不过这个不重要,您也不必要浪费时间排查这个错,估计就是API没支持。
第二个中我查了下资料,确实是协议的问题,所以你的demo当然没问题因为不是文件传输协议。
image

非常感谢您的帮助和更新!期待您有更好的作品,如果之后还有问题一定会及时与您沟通,谢谢!

@2fps
Copy link
Owner

2fps commented Feb 8, 2020

使用库时,API不支持的话,控制台是会有提示打印的。

没事,欢迎沟通。

@18310035303
Copy link

您好,我这边浏览器进行录音的的时候第一次会提醒灭有检测的麦克风,但是再点的时候就会报错:Error in v-on handler: "TypeError: Cannot read property 'then' of undefined",这个是什么原因?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants