返回

Windows 系统下 Electron Desktop Capturer 捕获音频指南:解决“Audio could not be started”异常

windows

在 Windows 系统中使用 Electron Desktop Capturer 捕获音频的指南

问题概述

在 Electron 应用中使用 navigator.mediaDevices.getUserMedia 函数捕获音频时,如果将 audio 设置为 false,则可以正常工作。然而,一旦将 audio 添加到约束中,就会出现 DOMexception: Audio could not be started。

问题分析

该问题源于 Windows 系统对桌面音频捕获的限制。默认情况下,应用程序只能访问特定的用户音频设备,而无法访问系统范围的音频设备。

解决方法

1. 使用音频捕捉 API(仅适用于 Windows 10 及更高版本)

音频捕捉 API 允许应用程序直接访问系统音频设备。

2. 使用 Loopback 虚拟音频设备(适用于所有版本的 Windows)

Loopback 虚拟音频设备是一个虚拟设备,可以将系统音频重定向到应用程序。

实施

使用音频捕捉 API

// 创建音频捕捉设备
const audioCapture = new AudioCapture();

// 获取系统音频设备列表
const devices = await audioCapture.getAudioInputDevices();

// 选择要使用的设备
const device = devices[0];

// 将设备添加到音频约束中
constraints.audio = {
    mandatory: {
        chromeMediaSource: 'desktop',
        deviceId: device.id
    }
};

使用 Loopback 虚拟音频设备

  1. 下载并安装 Loopback 虚拟音频设备。
  2. 创建新的虚拟音频设备。
  3. 将输入设置为“系统音频”。
  4. 将输出设置为“应用程序音频”。
  5. 在音频约束中使用虚拟音频设备作为音频源:
constraints.audio = {
    mandatory: {
        chromeMediaSource: 'desktop',
        deviceId: 'Your Virtual Audio Device ID'
    }
};

注意事项

  • 确保具有访问系统音频设备的权限。
  • 使用 Loopback 虚拟音频设备时,将 Loopback 的音频服务设置为自动启动。
  • 在某些情况下,可能需要重新启动计算机以使更改生效。

常见问题解答

1. 为什么在 Windows 系统中捕获音频会有限制?

答:Windows 系统对音频访问实施了严格的控制,以保护用户隐私。

2. 音频捕捉 API 和 Loopback 虚拟音频设备有什么区别?

答:音频捕捉 API 直接访问系统音频设备,而 Loopback 虚拟音频设备将系统音频重定向到应用程序。

3. Loopback 虚拟音频设备适用于哪些版本的 Windows?

答:Loopback 虚拟音频设备适用于所有版本的 Windows。

4. 如何知道我是否具有访问系统音频设备的权限?

答:在代码中捕获 DOMexception 并检查错误消息。

5. 重新启动计算机后,问题是否会再次出现?

答:如果问题是由于系统设置更改引起的,则重新启动计算机可能会解决问题。