如何在未安装vlcj
的情况下使用库vlc
播放视频?
我做了什么:
1:下载vlcj
库 vlcj 2.4.1(zip)并将所有内容添加到构建路径:
(docs1)
2:下载libvlc.dll
和libvlccore.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.dll
和libvlccore.dll
?
答案 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");