微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在没有实际录制的情况下获得Chrome扩展程序中的音频捕获权限

如何解决如何在没有实际录制的情况下获得Chrome扩展程序中的音频捕获权限

我正在使用getUserMedia来记录来自用户的音频,如下所示:

stream = await navigator.mediaDevices.getUserMedia({ audio: true });

执行此行后,会提示用户录音许可。我想先执行此步骤,例如先请求许可,如果未授予许可,则不会显示录制用户界面。我们如何实现呢?

解决方法

在普通的网页代码中,它可以获取流,然后停止其运行。像这样的函数应该为您完成。

async function getUserMediaPermission (constraints) {
    try {
        const stream = await navigator.mediaDevices.getUserMedia (constraints)
        if (stream) {
            stream.tracks.forEach(track => track.stop())
            return true
        }
        return false
    } 
    catch(error) {
        return false
    }
}

然后您使用如下代码调用该函数

 const permissionGranted = getUserMediaPermission ({audio:true})
 if (!permissionGranted) console.log ('Hey! to use this you must grant permission!')

这是做什么的:它得到一个流。在用户授予权限之前,await getUserMedia()不会完成。如果用户拒绝许可,将调用catch{}

但是,在桌面浏览器上,权限是持久的,因此已被授予await getUserMedia(),该权限立即完成。如果已经被拒绝,也是一样。

一旦有了流,就必须关闭它。没有stream.close()函数:“关闭”流的方法是停止其所有轨道,并使stream对象超出范围。

我不知道这在Web Extensions中是否有效;我知道它可以在台式机和移动浏览器上使用。 如果您可以在Web Extension中使用它,请发表评论或回答以说明您的操作方式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。