我写了一个spring boot应用程序,用于从三个相同的声卡中捕获音频,将声音转换为mp3并将其传输到网络。
获取可用设备的代码:
public static Map<Integer, Mixer.Info> getAvailableDevices() {
Mixer.Info[] mixers = AudioSystem.getMixerInfo();
Map<Integer, Mixer.Info> devices = new HashMap<>();
for (Mixer.Info mixer : mixers) {
Integer patternStart = mixer.getName().indexOf(ALSA_DEVICE_PATTERN);
if (patternStart > 0) {
devices.put(Integer.parseInt(mixer.getName().substring(patternStart + 4, patternStart + 5)), mixer);
}
}
return devices;
}
我的应用程序在重启后就像linux恶魔一样启动了。此外,我需要在重新启动计算机时重新启动捕获。而且有麻烦。在Linux中,声卡在计算机启动时会获得随机顺序。
方式#1:按序列号或其他方式硬绑定声卡。但Mixer.Info不包含有关序列号或其他任何硬绑定的信息。所有设备都有相同的信息。
方式#2:/etc/modprode.d/alsa-base中的硬绑定声卡,用于在系统中拥有相同的卡片顺序。但声卡也有相同的内核模块。像这样:
options snd_ca0106 index=0
options snd_ca0106 index=1
options snd_ca0106 index=2
我无法保证重启后设备的顺序相同。
我不知道怎么做。请帮帮我。