【问题标题】:Play video in swing (VLCJ without VLC)在摇摆中播放视频(没有 VLC 的 VLCJ)
【发布时间】:2013-12-30 09:01:25
【问题描述】:

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

我做了什么:

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

}

但得到错误:

线程“主”java.lang.RuntimeException 中的异常:加载失败 本机库。错误是“无法加载库 'vlc':...

除了libvlc.dlllibvlccore.dll,我还需要其他/更多吗?

【问题讨论】:

  • 是的,您当然需要所有实际解码和播放视频和音频的插件......

标签: java swing dll vlcj


【解决方案1】:

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

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

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

你也需要那些共享库。

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

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

您确实需要小心您重新分发的内容,因为虽然大多数 VLC 插件现在都在 LGPL 下获得许可,但并非所有插件都是。

【讨论】:

  • 得到的印象是 vlcj 是最好的挥杆球员之一。但似乎有点大.. 猜猜我需要检查我需要哪些插件。但是在我的项目文件夹中放置“插件”文件夹后仍然出现同样的错误......关于尝试什么的提示?
  • 安装 vlc 并首先使用它,而不是从一些非官方网站下载几个 DLL。一旦你让它与安装的 vlc 一起工作,它应该很容易打包你想要的 DLL。如果没有,那么先让这个工作:capricasoftware.co.uk/projects/vlcj/tutorial1.html
  • 无论您复制到项目文件夹中的什么,都必须与 vlc 安装文件夹中的目录结构完全相同。然后,您必须将 JNA 的本机库搜索路径指向包含 libvlc.dll 的目录。这确实工作...
【解决方案2】:

对 caprica 的回答进行了少量补充。我将 VLC 文件夹内容移至 {project.dir}/lib 文件夹,删除了除 dll 文件和插件文件夹之外的所有内容。我仍然面临输出“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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    相关资源
    最近更新 更多