java 在 JPanel 中嵌入 VLCJ

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13440760/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 12:43:29  来源:igfitidea点击:

Embedding VLCJ in JPanel

javajpanelvlcj

提问by Adil

I have read this SO threadand when I have tried to use the code with some changes, I'm getting just a black window, can some one tell me what I'm doing wrong here, I have just one class with main function :

我已经阅读了这个 SO 线程,当我尝试使用带有一些更改的代码时,我得到的只是一个黑色窗口,有人能告诉我我在这里做错了什么吗,我只有一个带有 main 函数的类:

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

import com.sun.jna.NativeLibrary;

import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface;
import uk.co.caprica.vlcj.runtime.windows.WindowsCanvas;

public class Canvas_Demo {

    // Create a media player factory
    private MediaPlayerFactory mediaPlayerFactory;

    // Create a new media player instance for the run-time platform
    private EmbeddedMediaPlayer mediaPlayer;

    private JPanel panel;
    private WindowsCanvas canvas;
    private JFrame frame;

    //Constructor
    public Canvas_Demo(String url){

        //Creating a panel that while contains the canvas
        panel = new JPanel();
        panel.setBackground(Color.BLACK);

        //Creating the canvas and adding it to the panel :
        canvas = new WindowsCanvas();
        panel.add(canvas);
        panel.revalidate();
        panel.repaint();

        //Creation a media player :
        mediaPlayerFactory = new MediaPlayerFactory();
        mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
        CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);
        mediaPlayer.setVideoSurface(videoSurface);

        //Construction of the jframe :
        frame = new JFrame("Demo with Canvas AWT");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(100, 100);
        frame.setSize(700, 500);

        //Adding the panel to the 
        frame.add(panel);
        frame.setVisible(true);

        //Playing the video
        mediaPlayer.playMedia(url);


    }
    //Main function :
    public static void main(String[] args) {
        NativeLibrary.addSearchPath("libvlc", "C:/Program Files/VideoLAN/VLC");

        final String url = "C:/MyVideo.mp4";

        new Canvas_Demo(url);

    }

}

Thanks in advance.

提前致谢。

采纳答案by Adil

When I change the video url (also called MRL as Media Ressource Locator) to this : C:\\MyVideo.mp4I got the video in the window.

当我将视频 url(也称为 MRL 作为媒体资源定位器)更改为:C:\\MyVideo.mp4我在窗口中看到了视频。

this discussionhas helped me.

这个讨论对我有帮助。

回答by Rohit Mandiwal

I did something like this

我做了这样的事情

EmbeddedMediaPlayerComponent mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
        EmbeddedMediaPlayer embeddedMediaPlayer = mediaPlayerComponent.getMediaPlayer();

        Canvas videoSurface = new Canvas();
        videoSurface.setBackground(Color.black);
        videoSurface.setSize(800, 600);

        List<String> vlcArgs = new ArrayList<String>();

        vlcArgs.add("--no-plugins-cache");
        vlcArgs.add("--no-video-title-show");
        vlcArgs.add("--no-snapshot-preview");

        MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(vlcArgs.toArray(new String[vlcArgs.size()]));
        mediaPlayerFactory.setUserAgent("vlcj test player");
        embeddedMediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(videoSurface));
        embeddedMediaPlayer.setPlaySubItems(true);

        final PlayerControlsPanel controlsPanel = new PlayerControlsPanel(embeddedMediaPlayer);
        PlayerVideoAdjustPanel videoAdjustPanel = new PlayerVideoAdjustPanel(embeddedMediaPlayer);

//            mediaPlayerComponent.getMediaPlayer().playMedia(Constant.PATH_ROOT + Constant.PATH_MEDIA + "tmp.mp4");
        JFrame mainFrame = new JFrame();
        mainFrame.setLayout(new BorderLayout());
        mainFrame.setBackground(Color.black);
        mainFrame.add(videoSurface, BorderLayout.CENTER);
        mainFrame.add(controlsPanel, BorderLayout.SOUTH);
        mainFrame.add(videoAdjustPanel, BorderLayout.EAST);

        //create a button which will hide the panel when clicked.
        mainFrame.pack();
        mainFrame.setVisible(true);

        embeddedMediaPlayer.playMedia("tmp.mp4");

回答by WeiChao

//Creating the canvas and adding it to the panel :
canvas = new WindowsCanvas();
canvas.setSize(700, 500);
panel.add(canvas);