Пример захвата веб-камеры 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();
}