【问题标题】:setSinkId() function throws error in Electron AppsetSinkId() 函数在 Electron App 中抛出错误
【发布时间】:2019-12-25 20:59:37
【问题描述】:

我正在尝试开发一个可以播放音频并包含更改音频设备功能的应用程序。我唯一的问题是当我尝试使用 setSinkId() 函数时,它给了我一个 DOMException AbortError 消息“无法执行操作并已中止”。我在最新版本的 Chrome 中尝试了完全相同的代码,它允许我设置 sinkId 没有任何问题。这是我的代码:

     var promise = audio.setSinkId(deviceID);

     promise.then(function(result) {
         console.log('Audio output device sink ID is ' + deviceID);
     }, function(e) {
         console.log('Error: ' + e.name + ' - ' + e.message);
     });

我在设置浏览器窗口时尝试通过enableBlinkFeatures 传递AudioOutputDevices 参数,但这并没有什么不同。

【问题讨论】:

  • 在哪个浏览器中报错?并非所有浏览器都支持 setSinkId。虽然,我必须承认,我希望在尚不支持它的浏览器上出现不同的错误消息。您可以在此页面查看该功能支持的浏览器列表:developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement
  • 在我的情况下,当我的 Web 应用程序的用户关闭麦克风(作为输入设备)然后尝试更改输出设备时,用户收到此错误“未捕获(承诺)DOMException:操作无法执行并被中止”。对你有帮助吗?

标签: javascript html electron html5-audio


【解决方案1】:

我感受到你的痛苦,我在开发过程中也有同样的问题。我没有直接解决它。我只能建议检查有关您的源 HTML 元素参考的一些事情。

1) srcObject 设置是否正确? 在第一次使用setSinkId()之前,请检查是否

audio.srcObject = stream;

2) 检查setSinkId() 事件是否未被pause()play()load() 事件中断。请记住,setSinkId() 是一个承诺。

await audio.setSinkId(selectedId);
audio.play();

希望对你有帮助。

【讨论】:

    【解决方案2】:

    也许它与这个旧报告的问题有关。它已搁置多年。

    https://bugs.chromium.org/p/chromium/issues/detail?id=697877

    请记住,要了解 Chromium,您应该使用您的 Google 帐户“启动”它,以帮助 Chromium 团队了解它的重要性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2023-03-12
      相关资源
      最近更新 更多