FMJ网络摄像头捕获示例

时间:2009-08-14 12:32:16

标签: java webcam capture fmj

我一直在搜索,我找不到如何使用FMJ捕获网络摄像头流的简单示例。是否有任何可以帮助我的教程或示例?

3 个答案:

答案 0 :(得分:2)

我一直在和FMJ合作过一段时间,而且我也没有找到很多例子。我要做的是探索集成了网络摄像头功能的FmjStudio课程,并且非常直接。

对于bob:

你想要的是FMJ。 FMJ使用Civil的DataSource实现将其与JMF一起使用。我建议你去http://fmj-sf.net/下载最新资源并探索FmjStudio,因为它使用民间捕获。

对于theDude:

你是对的,你也可以使用JMF,但你用于JMF的相同代码最有可能与FMJ一起使用(可能会有coupla更改)并且性能会更好,特别是如果你想要各种不同的网络摄像头可以使用您的软件。

答案 1 :(得分:1)

我知道这不是你想听到的,但我已经使用JMF来完成这项任务,而且效果非常好。有足够的在线示例可以轻松运行简单的网络摄像头捕获应用程序。如果你有兴趣,我会发布更多信息。

答案 2 :(得分: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();
    }