2

我目前正在研究可以播放mkv格式的 java 媒体播放器。我正在使用VLCJ,一切正常,除非我尝试更改不起作用的音轨。

这是代码

public class mediaplayer {

    private static JFileChooser filechooser = new JFileChooser();

    public mediaplayer() {
    }

    public static void main(String[] args) {
        String vlcPath = "", mediaPath = "";
        File ourfile;

        filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        filechooser.showSaveDialog(null);
        ourfile = filechooser.getSelectedFile();
        mediaPath = ourfile.getAbsolutePath();

        EmbeddedMediaPlayerComponent mediacom = new EmbeddedMediaPlayerComponent();

        JFrame frame = new JFrame();
        frame.setContentPane(mediacom);
        frame.add(canvas);
        frame.setLocation(100, 100);
        frame.setSize(1050, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

        MediaPlayer mplayer = mediacom.getMediaPlayer();

        mplayer.playMedia(mediaPath);
        mplayer.setAudioTrack(1);
    }
}
4

2 回答 2

3

vlc 2.0.5之前的 libVLC 版本中,设置音轨的本机 API 调用存在错误。

使用libVLC 2.0.5中的修复程序,设置音轨可以可靠地工作,但您不能只假设从0..N开始的简单索引,也不能假设连续音轨编号 - 您必须通过调用枚举音轨mediaPlayer.getAudioDescriptions()。返回的 TrackDescription 对象包含应与 一起使用的音轨标识符mediaPlayer.setAudioTrack()

要禁用音频,您可以选择描述为 的轨道的音轨标识符"Disable"

另请注意,您可能无法在调用后立即设置音轨mediaPlayer.playMedia()。媒体是异步启动的,您可能需要等到媒体实际启动和/或解析后,才能获得轨道信息。

于 2013-08-01T19:19:29.727 回答
0

6年后

API 增长了很多

如果您想停止或选择音轨,您可以使用此代码片段并对其进行调整,其想法是等待播放器开始使用一个进程,然后切换到您需要的,在我的情况下是音频禁用

new Thread(
                    () -> {
                        try {
                            while(!empc.mediaPlayer().status().isPlaying())Thread.sleep(500);
                            empc.mediaPlayer().audio().trackDescriptions().stream()
                            .filter(td -> td.description().equals("Disable"))
                            .forEach(t -> empc.mediaPlayer().audio().setTrack(t.id()));
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    ).start();

empc是我的媒体播放器实例{在播放器组件中嵌入一个以提高精度}

于 2019-12-18T14:08:05.837 回答