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

如何解决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 版本可能还有一段路要走。

>

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?