Пример захвата веб-камеры FMJ

Я долго искал, и не могу найти простой пример того, как захватить поток с веб-камеры с FMJ. Существуют ли учебники или примеры, которые могут мне помочь?

2 ответа

Решение

Я работаю с FMJ некоторое время, и я не нашел много примеров, с которых можно было бы начать. Я хотел бы изучить класс FmjStudio, в котором встроена функциональность веб-камеры и она довольно проста.

Для Боба:

То, что вы хотите, это FMJ. FMJ использует реализацию DataSource для гражданских, чтобы использовать его с JMF. Я бы порекомендовал вам зайти на http://fmj-sf.net/ скачать последнюю версию исходного кода и изучить FmjStudio, а также использовать Civil для захвата.

Для чувак:

Вы правы, вы также можете использовать JMF, но тот же код, который вы используете для JMF, скорее всего, будет работать с FMJ (возможно, с некоторыми изменениями), и производительность будет намного лучше, особенно если вы хотите работать с широким спектром различных веб-камер. с вашим программным обеспечением.

Я знаю, что это не то, что вы хотите услышать, но я использовал JMF для этой задачи, и она работает очень хорошо. В Интернете достаточно примеров, чтобы довольно просто запустить простое приложение для захвата веб-камеры. Я выложу больше, если вам интересно.

Следующий код поможет вам начать.

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();
    }
Другие вопросы по тегам