我一直在寻找一段时间,但找不到一个简单的示例来说明如何使用 FMJ 捕获网络摄像头流。是否有任何可用的教程或示例可以帮助我?
问问题
16191 次
3 回答
3
我已经与 FMJ 合作了一段时间,但我也没有找到很多可以开始的例子。我要做的是探索集成了网络摄像头功能且非常简单的 FmjStudio 类。
对于鲍勃:
你想要的是FMJ。FMJ 使用 DataSource 实现来与 JMF 一起使用。我建议你去http://fmj-sf.net/下载最新的源代码并探索 FmjStudio,因为它使用 Civil 来捕获。
对于老兄:
您是对的,您也可以使用 JMF,但您用于 JMF 的相同代码很可能适用于 FMJ(可能会进行 coupla 更改),并且性能会更好,特别是如果您想要各种不同的网络摄像头工作用你的软件。
于 2010-03-23T07:47:37.863 回答
1
我知道这不是您想听到的,但我已经使用 JMF 来完成这项任务并且效果很好。网上有足够多的示例可以轻松运行一个简单的网络摄像头捕获应用程序。如果你有兴趣,我会发布更多。
于 2009-08-14T13:44:09.140 回答
0
以下代码将帮助您入门。
GlobalCaptureDevicePlugger.addCaptureDevices();
Vector<CaptureDeviceInfo> audioCapDevList = CaptureDeviceManager.getDeviceList(null);
if (audioCapDevList.size() != 0) {
for (int i = 0; i < audioCapDevList.size(); i++) {
audioCapDevInfo = audioCapDevList.elementAt(i);
Format[] videoFormats = audioCapDevInfo.getFormats();
System.out.println(audioCapDevInfo);
if (audioCapDevInfo.getName().startsWith("vfw:")) { // assume the name of the webcam starts with vfw:
for (int j = 0; j < videoFormats.length; j++) {
if (videoFormats[j] instanceof VideoFormat) {
currentFormat = (VideoFormat) videoFormats[i];
break;
}
}
System.out.println(currentFormat);
if (currentFormat == null) {
System.err.println("Search for VideoFormat failed");
System.exit(-1);
}
audioCapDevLoc = audioCapDevInfo.getLocator();
}
}
}
请确保将本机库(civil.dll 和 jdshow.dll)加载到 JVM 中。否则,您将收到 java.lang.UnsatisfiedLinkError。以下代码可以为您完成这项工作。
System.setProperty("java.library.path", "D:/fmj-sf/native/win32-x86/");
Field fieldSysPath;
try {
fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (Exception e) {
e.printStackTrace();
}
于 2019-10-24T00:06:59.250 回答