返回
Windows 系统下 Electron Desktop Capturer 捕获音频指南:解决“Audio could not be started”异常
windows
2024-03-26 17:54:26
在 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 虚拟音频设备
- 下载并安装 Loopback 虚拟音频设备。
- 创建新的虚拟音频设备。
- 将输入设置为“系统音频”。
- 将输出设置为“应用程序音频”。
- 在音频约束中使用虚拟音频设备作为音频源:
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. 重新启动计算机后,问题是否会再次出现?
答:如果问题是由于系统设置更改引起的,则重新启动计算机可能会解决问题。