在JPanel中嵌入VLCJ

我已经阅读了这个SO线程 ,当我尝试使用代码进行一些更改时,我只得到一个黑色窗口,有人可以告诉我这里我做错了什么,我只有一个主函数类:

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); } } 

提前致谢。

当我将videourl(也称为MRL作为媒体资源定位器)更改为: C:\\MyVideo.mp4我在窗口中获得了video。

这个讨论对我有所帮助。

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

我做了这样的事

 EmbeddedMediaPlayerComponent mediaPlayerComponent = new EmbeddedMediaPlayerComponent(); EmbeddedMediaPlayer embeddedMediaPlayer = mediaPlayerComponent.getMediaPlayer(); Canvas videoSurface = new Canvas(); videoSurface.setBackground(Color.black); videoSurface.setSize(800, 600); List vlcArgs = new ArrayList(); 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");