vlcj:两个视频音量相同

问题描述 投票:0回答:1

我正在使用 vlcj 库: 我想播放两个不同音量的文件,但是当我改变其中一个的音量时,另一个也会改变,我该怎么做才能避免这种情况?

import javax.swing.JFrame;

import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;

public class AudioIssue {
    
    public static void main(String[] args) {
        JFrame frame1 = new JFrame("Frame1");
        JFrame frame2 = new JFrame("Frame2");
        
        frame1.setBounds(100, 100, 600, 400);
        frame2.setBounds(100, 500, 600, 400);

        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        EmbeddedMediaPlayerComponent mediaPlayerComponent1 = new EmbeddedMediaPlayerComponent();
        EmbeddedMediaPlayerComponent mediaPlayerComponent2 = new EmbeddedMediaPlayerComponent();

        frame1.add(mediaPlayerComponent1);
        frame2.add(mediaPlayerComponent2);
        
        frame1.setVisible(true);
        frame2.setVisible(true);

        EmbeddedMediaPlayer mediaPlayer1 = mediaPlayerComponent1.mediaPlayer();
        EmbeddedMediaPlayer mediaPlayer2 = mediaPlayerComponent2.mediaPlayer();

        mediaPlayer1.audio().setVolume(70);
        mediaPlayer2.audio().setVolume(30);

        mediaPlayer1.media().play("archivos/vlcjReproduccion/test.mp4");
        mediaPlayer2.media().play("archivos/vlcjReproduccion/test.mp4");
        
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(mediaPlayer1.audio().volume());
        System.out.println(mediaPlayer2.audio().volume());
    }
}

输出:

  • 30
  • 30

如果我执行两个单独的代码,则卷是独立的并且它可以工作,但是如果我从相同的代码执行它,它就不起作用。我已经尝试过线程,但它也不起作用。

java vlcj
1个回答
0
投票

此行为取决于多种因素。

首先,VLC 使用的音频输出可能支持也可能不支持独立音频设置。

您可以在命令行上使用

vlc -H
列出可用的音频输出,这是为我报告的内容:

  -A, --aout {any,pulse,alsa,sndio,adummy,amem,afile,none} 
                                 Audio output module

因此,如果默认的音频输出不支持您需要的内容,您可以尝试其他输出,尽管显然其中一些输出(例如 amem、afile、adummy)在这里没有用处。

要使用 vlcj 尝试此操作,请在创建

["--aout", "pulse"]
时指定类似
MediaPlayerFactory
的内容。

不能保证这会起作用,但我会尝试。

其次,根据VLC的版本,在媒体播放开始之前无法更改音量或准确查询音量。您在这里可以做的最好的事情就是监听要触发的“媒体播放器就绪”事件,然后根据音频设置执行您需要的操作。这并不理想,因为在媒体播放的前几毫秒之前您可能不会收到此事件。

因此请务必尝试最新版本的 VLC。

第三,根据我的经验,这种情况在 VLC 4.x(仍在开发中)中得到了更广泛的改善。因此,您可以尝试 VLC 4.x 的夜间预发布版本和 vlcj 5.x 的最新快照版本,但同样不能保证这会起作用。

如果这些都不适合您,那么您唯一能做的就是构建您的应用程序,使其在自己单独的进程中运行每个本机媒体播放器。然而,这并不是一项简单的任务,需要您为每个媒体播放器创建一个新的 JVM,并使用某种远程过程调用机制来从主应用程序控制媒体播放器。这

确实有效,但却是一项严肃的任务。

© www.soinside.com 2019 - 2024. All rights reserved.