vlcj全屏视频播放器

时间:2014-02-04 07:34:51

标签: java swing awt vlc vlcj

我使用vlc媒体播放器的vlcj库完成了一个视频播放器。

这是我的代码..

public class Player {

    public static void main(final String[] args) {
        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC");
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Player(args);
            }
        });
    }

    private Player(String[] args) {
        JFrame frame = new JFrame("vlcj Tutorial");

        MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();

        Canvas c = new Canvas();
        c.setBackground(Color.black);
        JPanel p = new JPanel();
        p.setLayout(new BorderLayout());
        p.add(c, BorderLayout.CENTER);
        frame.add(p, BorderLayout.CENTER);


        EmbeddedMediaPlayer mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
        mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
        frame.setLocation(100, 100);
        frame.setSize(1050, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);


        mediaPlayer.playMedia("D:\\EmbeddedMediaPlayer\\test.3gp");
    }
}

我可以使用此代码播放视频,但如何在全屏幕上看到与vlc媒体播放器相同的视频?

如何通过鼠标右键应用最大化(全屏)和最小化双击事件?

1 个答案:

答案 0 :(得分:4)

全屏在不同平台上可能会有些问题,因此全屏的实施留给您自行选择或实施的策略实施。

实际上,Windows是全屏问题最多的平台。

使用vlcj 3.0.0+,有一个新的全屏策略实现,它使用Win32本机API。这是在Windows上实现全屏幕的最可靠,因此也是推荐的方法。

您在创建媒体播放器时选择策略实施:

EmbeddedMediaPlayer mediaPlayer = 
    mediaPlayerFactory.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(frame));

稍后当您要切换全屏时:

mediaPlayer.toggleFullScreen();

或者:

mediaPlayer.setFullScreen(boolean fullScreen);

如果您想听鼠标点击,那么原则上您所做的就是像对MouseListener对象一样添加Canvas

但是,使用Windows时,检测鼠标点击并不是那么简单,必须在创建媒体播放器时执行此操作:

mediaPlayer.setEnableMouseInputHandling(false);
mediaPlayer.setEnableKeyInputHandling(false);

然后在MouseListener实现中,您可以调用上述全屏方法之一。

另请注意,必须阻止您的mediaPlayer引用被垃圾回收。通常将它声明为类字段而不是堆变量就足够了(就像在发布的代码中一样)。

您还应该在这里查看示例:

https://github.com/caprica/vlcj/blob/vlcj-3.0.1/src/test/java/uk/co/caprica/vlcj/test/fullscreen

https://github.com/caprica/vlcj/blob/vlcj-3.0.1/src/test/java/uk/co/caprica/vlcj/test/fullscreen/Win32FullScreenPlayerTest.java