挥杆视频(没有VLC的VLCJ)

时间:2013-12-30 09:01:26

标签: java swing dll vlcj

如何在未安装vlcj的情况下使用库vlc播放视频?

我做了什么:

1:下载vlcj vlcj 2.4.1(zip)并将所有内容添加到构建路径: (docs1

2:下载libvlc.dlllibvlccore.dll并将它们放在项目文件夹中: (docs2

docs3

3:从http:(here video)下载了一个示例视频,并将其放在项目文件夹中: sample_mpeg4.mp43 :( docs4

然后,我创建了以下课程,以便在swing中显示视频:

public class MediaPlayer extends JPanel {

// Declares our media player component
private EmbeddedMediaPlayerComponent mediaplayer;
// This string holds the media URL path
private static String mediapath;
private JPanel panel;

public MediaPlayer() {
    String projectPath = System.getProperty("user.dir");
    String vlcpath = projectPath;
    mediapath = projectPath + "\\sample_mpeg42.mp4";

    // Check if the .dll is correct
    File f = new File(vlcpath + "/libvlc.dll");
    System.out.println("VLC PATH CORRECT: " + f.exists());

    NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), vlcpath);
    mediaplayer = new EmbeddedMediaPlayerComponent();

    panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(mediaplayer, BorderLayout.CENTER);
    setLayout(new BorderLayout());
    add(mediaplayer, BorderLayout.CENTER);
}

public void play() {
    mediaplayer.getMediaPlayer().playMedia(mediapath);
}

public static void main(String[] args) {
    MediaPlayer mediaplayer = new MediaPlayer();
    JFrame ourframe = new JFrame();
    ourframe.setContentPane(mediaplayer);
    ourframe.setSize(720, 560);
    ourframe.setVisible(true);
    mediaplayer.play();
    ourframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

但得到错误:

  

线程“main”中的异常java.lang.RuntimeException:加载失败   本地图书馆。错误是“无法加载库'vlc':...

我是否需要更多其他/ libvlc.dlllibvlccore.dll

2 个答案:

答案 0 :(得分:2)

Windows上的典型VLC安装在“Program Files \ VideoLAN \ VLC”中。

在该目录中,您将找到libvlc.dll和libvlccore.dll。

您还可以找到一个“插件”目录,其中包含许多子目录,其中包含用于视频/音频解码和回放的共享库,以及LUA支持,媒体元数据支持,服务发现,vlc等其他内容。 GUI,等等。

您也需要这些共享库。

原则上你需要所有这些共享库,你只需要播放媒体所需的那些(例如,你可能对LUA不感兴趣,也不是vlc GUI,所以你可以删除那些)。

实际上,困难在于精确计算出你需要的共享库的哪个子集(没有明确的列表描述哪个插件需要用于哪些目的)所以我希望大多数人只是重新分配所有这些。

您需要注意重新分发的内容,因为虽然大多数VLC插件现在都是根据LGPL许可的,但并非所有插件都是。

答案 1 :(得分:0)

caprica对答案的轻微补充。我将VLC文件夹内容移动到{project.dir} / lib文件夹,除了dll文件和插件文件夹之外删除了everthing。我仍然遇到输出“ Vlc插件错误,找不到插件”的例外情况。我发现问题here,它提到vlcj版本3.10.0+中包含的新jna版本与VLC插件加载混淆。

解决方案:要么包含vlcj版本3.9.0作为依赖项,要么就像我一样,从github中提取vlcj源代码,并在vlcj pom.xml中将jna.version从4.1.0更改为3.5.2,运行' mvn clean install'并使用此版本在项目中使用此本地vlcj工件(以避免将来在本地repo和maven repo之间混淆,将vlcj版本更改为3.xx.xx-custom或类似,因此将使用本地工件总是)。

在代码中,添加如下自定义路径:

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "./lib");