【问题标题】:Discord voice messaging plugin: getUserMedia() is not supportedDiscord 语音消息插件:不支持 getUserMedia()
【发布时间】:2021-06-17 05:56:18
【问题描述】:

请修复 Discord 语音消息插件中的错误。

错误:无法启动 MediaRecorder:无法在“MediaDevices”上执行“getUserMedia”:不支持 getUserMedia。

原文:https://github.com/MKSx/Send-Audio-Plugin-BetterDiscord 第 1026 行出错。

有问题的代码:

changeMedia(device=false, changing=false){
        const plugin = this;

        const change = () => {
            plugin.media = null;
            plugin.mediaInfo.ready = false;
            plugin.mediaInfo.error = false;

            navigator.mediaDevices.getUserMedia({audio: (device != false ? device : plugin.settings.devices)}).then(s => {
                plugin.media = new MediaRecorder(s);
                Logger.log("MediaRecorder started successfully");

                plugin.media.addEventListener('dataavailable', e => plugin.onRecordingData(e.data));
                plugin.media.addEventListener('start', _ => plugin.onRecordingStateChange(0));
                plugin.media.addEventListener('stop', _ => plugin.onRecordingStateChange(1));
                plugin.media.addEventListener('pause', _ => plugin.onRecordingStateChange(2));
                plugin.media.addEventListener('resume', _ => plugin.onRecordingStateChange(3));

                plugin.media.addEventListener('error', error => {
                    Logger.error('Recording error:', error);
                });
                plugin.mediaInfo.ready = true;
                plugin.mediaInfo.error = false;
                if(typeof plugin.buttons == 'object' && plugin.buttons.record instanceof Element)
                    plugin.buttons.record.disabled = false;

            }).catch(err => {
                plugin.mediaInfo.ready = false;
                plugin.mediaInfo.error = true;
                if(typeof plugin.buttons == 'object' &&plugin.buttons.record instanceof Element)
                    plugin.buttons.record.disabled = true;

                Logger.error("Failed to start MediaRecorder:", err.message);

                if(!changing){
                    Logger.log("Changing to the default");
                    plugin.changeMedia('default', true);
                }
            });
        };

        if(this.media instanceof MediaRecorder){
            this.mediaInfo.notSave = true;
            if(this.media.state != 'inactive')
                this.media.stop().then(_ => change()).catch(_ => change());
        }
        else{
            change();
        }
    }

【问题讨论】:

标签: javascript plugins discord discord.js


【解决方案1】:

简介

基本上,更好的 discord 本质上是在 chrome 浏览器之类的东西上运行的应用程序。您可以通过点击CTRL+SHIFT+I 来验证这一点。

这个问题看起来像是 chrome 中与访问麦克风相关的安全问题。我也会在接下来的几天里看看,但以下解决方案可能对你有用:

更新

我看到您可以通过以下链接向 discord 应用程序添加标志:https://www.reddit.com/r/discordapp/comments/91btrn/adding_electron_flags_to_discord_startup/

有一个完整的潜在命令行开关列表@https://peter.sh/experiments/chromium-command-line-switches/

您可能需要在参数后设置正确的 URL/域,例如

Discord.exe --unsafely-treat-insecure-origin-as-secure=

【讨论】:

  • 感谢您的链接!我遇到的问题是,我唯一能做的就是打开 devtools。我还检查了navigator.permissions.query({name: 'microphone'}) 的权限,并授予了权限,但仍然出现与上述相同的错误。
  • 我的问题不在Chrome,但所有的解决方案都只针对它。
  • 我检查并发现 Betterdiscord 正在使用 Chrome 83。告诉我现在如何使用控制台启用标志:chrome://flags/#unsafely-treat-insecure-origin-as-securewindow.location = "chrome://flags"; 无法打开带有标志的页面。出现错误:Not allowed to load local resource: chrome://flags/
  • 我得出的结论是,使用 http 或 localhost 的站点需要此标志,但 Discord 使用 https,此解决方案对我不起作用。也许 Discord 开发者故意禁用了这个功能?
  • @Nuril 我正在考虑直接在 chrome 浏览器中试用这个插件作为扩展。但我没有时间,我想我将不得不重写部分内容。我更怀疑谷歌浏览器增加了安全限制,以至于脚本无法开始记录你。似乎不和谐插件也存在安全问题,这也可能是他们加强安全性的原因。例如pocket-lint.com/apps/news/…
猜你喜欢
  • 2016-03-16
  • 2018-11-11
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多