为了使用 java 和 jmf 从 web 捕获实时视频,我编写了以下代码,我插入了 USB 网络摄像头,并安装了 java mediaframewrok 最新和更新的版本.当我遵守程序时没有错误,但是当我运行程序时,我遇到了这样的错误......
Exception in thread "VFW Request Thread" java.lang.UnsatisfiedLinkError: JMFSecurityManager: java.lang.UnsatisfiedLinkError: no jmvfw in java.library.path at com.sun.media.JMFSecurityManager.loadLibrary(JMFSecurityManager.java:
206)
at com.sun.media.protocol.vfw.VFWCapture.<clinit>(VFWCapture.java:19)
at com.sun.media.protocol.vfw.VFWSourceStream.doConnect(VFWSourceStream.
java:241)
at com.sun.media.protocol.vfw.VFWSourceStream.run(VFWSourceStream.java:7
63)
at java.lang.Thread.run(Thread.java:724)
你应该像这样加载库(并且可以检查库路径是否已加载)。
public class Test {
static {
try {
System.load("C:/PATH_TO/jmvfw.dll");
System.out.println(String.format("%s has been successfully loaded","jmvfw"));
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library jmvfw failed to load." , e);
System.exit(1);
}
}
//check if the lib is in java.library.path
public static void main(String argv[]) {
String libs = System.getProperty("java.library.path");
for (String lib : libs.split(";"))
System.out.println(lib);
}
}
更新
错误:
C:jmvfw.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
表示您的 DLL 是 32 位的。您必须重新编译(或下载)64 位的 DLL。另一种选择是切换到 32 位 JVM - 或者让一些 32 位进程代表您加载 DLL 并与该进程通信(有点复杂)。