VLCJ 从单个 Java 程序控制多个音频文件

问题描述

我想通过 vlcj(旧版本 3.10.1)从单个 java 进程播放多个音频文件。下面是我编写的用于从两个文件播放音频的 Java 代码片段:-

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(),"video-plugins");
Native.load(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);
for (int i = 0; i < 2; i++) {
            List<String> vlcArgs = new ArrayList<String>();
            vlcArgs.add("--no-video");
            MediaPlayerFactory factory = new MediaPlayerFactory(vlcArgs);
            MediaPlayer mediaPlayer = factory.newHeadlessMediaPlayer();
            if (i == 0)
                mediaPlayer.startMedia("D:\\a.mp4");
            else
                mediaPlayer.startMedia("D:\\b.mp4");
            mediaPlayer.setVolume(10 * (i + 10));
        }
        Thread.currentThread().join(); 

在此示例程序中,我正在播放来自两个文件的音频,并想从 Windows 控制面板的声音部分单独控制它们(静音、取消静音、更改单个文件的音频音量),但我只看到一个“VLC 媒体播放器”在 Windows 10 音量混合器中。(见下图)

我认为这是由于在播放两个文件的音频时使用了相同的 MediaPlayerFactory 实例,然后我调整了 MediaPlayerFactory 但无济于事,我在 Windows 10 音量混合器中只看到一个“VLC 媒体播放器”。如果我在 Windows 10 中从“VLC 媒体播放器”更改音量,它会对两个文件的音频进行操作。

有没有办法从单个 java 程序中通过 vlcj 单独播放这两个文件,以便可以单独控制它们?

enter image description here

虽然,我可以从两个不同的 Java 程序单独运行这两个文件,但它会在 Windows 声音部分显示两个“VLC 媒体播放器”,但这不是我想要的。我想通过 vlcj 从单个 Java 程序控制多个文件

解决方法

您使用的 VLC/LibVLC 版本 (3.x) 无法做到这一点。

同一进程中的所有本机媒体播放器实例共享相同的音频控件。

不过,我听说这可能取决于正在使用的音频输出插件,但在 Linux 上我从未亲自见过这项工作。

对即将推出的 VLC/LibVLC 4.x 的早期测试提供了一些希望,即在未来您确实可以获得单独的音频控件,但在撰写此答案时,VLC 版本可能还有一段路要走。

>

简而言之,这里没有什么可以“修复”的。

您可以在单独的进程中运行多个媒体播放器并以某种方式控制它们,但这并非微不足道。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...