3

我正在尝试用 Java 制作一个包含视频播放器的信使程序,所以我正在使用 vlcj。但我收到此错误:

线程“主”java.lang.UnsatisfiedLinkError 中的异常:
无法加载库“libvlc”:
找不到指定的模块。

我已按照此处的教程进行操作,但仍然出现此错误。这是我得到的唯一错误。

我在带有 x64 VLC 的 Windows 7 x64 Ultimate 上运行。我正在使用最新的 Eclipse 版本进行编码。

谁能指导我一步一步地解决这个问题?

4

7 回答 7

3

您必须在应用程序中添加“libvlc”和“libvlccore”dll 路径。这些将出现在您的 vlc 安装文件夹中。您可以添加以下代码行以使其正常工作。

NativeLibrary.addSearchPath("libvlc", "C:/VideoLAN/VLC");

这里“C:/VideoLAN/VLC”是vlc的安装文件夹。

于 2013-02-28T03:44:12.277 回答
1

这是使用 JNA 加载 vlc 库的方式:

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "Path to native library");

对于我的程序,我将 vlc“libvlc.dll”和“vlccore.dll”放在一个子文件夹中,所以我使用和添加路径到末尾lib/VLC/来加载相对于我的“program.jar”的文件:System.getProperty("user.dir")

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), System.getProperty("user.dir") + "/lib/VLC");

如果要从 Windows 7 中的默认 VLC 安装路径加载库,可以按如下方式进行:

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files (x86)/VideoLAN/VLC");

编辑:如果您从 Eclipse 中运行此代码,它将不起作用,除非您指定 VLC 库文件的绝对路径。如果要测试相对路径,则首先构建 jar 文件并将其放置在相对于 VLC 库文件的正确文件夹中。

于 2013-02-28T02:53:13.690 回答
1

我阅读了您发布的vlcj说明

似乎vlcj库正在使用 JNA,您可以使用NativeLibrary类设置库搜索路径, 如检查程序中所述:

import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;

import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;

public class Tutorial1A {
    public static void main(String[] args) {
        String vlcHome = "dir/with/dlls"; // Dir with vlc.dll and vlccore.dll
        NativeLibrary.addSearchPath(
            RuntimeUtil.getLibVlcLibraryName(), vlcHome
        );
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
    }
}

你可以尝试运行该代码并检查它是否在没有异常的情况下完成。

vlcj指令还指出了 JRE 的架构是相关的;您应该通过键入以下内容检查您的 JRE 架构:

java -version

JRE 架构应该与 VLC 相匹配(也许您可以在 About 对话框中查看 VLC 架构)。两者应该相等(32b 或 64b)。

但是,奇怪的是错误消息指的是libvlc而不是在 Windows 中执行的vlcvlccore 。

无论如何,如果使用NativeLibrary将 VLC 路径添加到搜索路径不起作用并且 JRE 架构与 VLC 匹配,您可以添加您正在使用的代码以尝试了解更多信息。

于 2013-01-14T23:01:21.290 回答
1

确保您使用的是直接 x64 或 x32 环境。这表示:

  • Windows x64(显然)
  • Java JRE x64(不要安装第二个 x32 JRE)
  • Java JDK x64
  • VLC x64

现在你应该没事了。

于 2016-09-10T08:44:29.837 回答
0

如错误所示,JVM 正在尝试加载本机库“libvlc.dll”,但无法找到它。

要么将 dll 放在 java 安装的 .../jre/bin 目录中,要么使用java.library.path属性指向它的位置。

另请参阅如何使用 Eclipse 启动将本机库添加到“java.library.path”(而不是覆盖它)

于 2013-01-14T14:51:54.533 回答
0

jna.library.path使用系统属性设置路径。可以在以下位置找到该技术的一个工作示例:

https://github.com/johndeverall/BehaviourCoder/blob/master/src/main/java/de/bochumuniruhr/psy/bio/behaviourcoder/Main.java

public static void main(String[] args)方法中。

此代码可能很快会更新,这将破坏上述链接,但您始终可以使用版本控制返回到我发布此代码的日期并查看代码。

于 2016-02-13T17:25:11.793 回答
0
cd src/main/resources/
cp -r /Applications/VLC.app/Contents/MacOS/lib darwin
rm darwin/*.*.*
cd darwin
install_name_tool -add_rpath @loader_path libvlc.dylib
mkdir vlc
cp -r /Applications/VLC.app/Contents/MacOS/plugins vlc/plugins

这是 macOS 版本。也许能帮到你。

├── kotlin
│   └── App.kt
└── resources
    └── darwin
        ├── libvlc.dylib
        ├── libvlccore.dylib
        └── vlc
            └── plugins
                ├── liba52_plugin.dylib
                ├── libaccess_concat_plugin.dylib
                ├── libaccess_imem_plugin.dylib
                ├── libaccess_mms_plugin.dylib
于 2018-12-19T03:40:18.137 回答