CaptureDeviceManager.getDeviceList()返回null

时间:2012-05-20 16:12:48

标签: java ubuntu webcam jmf

我在java

上的ubuntu 11.10进行了编码

笔记本电脑网络摄像头正常运行并找到它/dev/v4l/。 Skype应用程序可以使用网络摄像头并运行。

我安装了JMF,但我无法添加环境变量。

Vector deviceList = CaptureDeviceManager.getDeviceList(new RGBFormat());
System.out.println(deviceList.toString());
if(!deviceList.isEmpty()){
    System.out.println("1");
    device = (CaptureDeviceInfo) deviceList.firstElement();
}
device = (CaptureDeviceInfo) deviceList.firstElement();
ml = device.getLocator();

我想在java中捕获一个图像。

我应该怎样解决问题或使用而不是使用JMF?

1 个答案:

答案 0 :(得分:0)

在调用CaptureDeviceManager.getDeviceList()之前,必须先将可用设备加载到内存中。

安装JMF后,可以通过运行JMFRegistry手动进行操作。

enter image description here

或在扩展库FMJ(Java中的Free Media)的帮助下以编程方式进行操作。这是代码:

import java.lang.reflect.Field;
import java.util.Vector;
import javax.media.*;
import javax.media.format.RGBFormat;
import net.sf.fmj.media.cdp.GlobalCaptureDevicePlugger;

public class FMJSandbox {
    static {
        System.setProperty("java.library.path", "D:/fmj-sf/native/win32-x86/");
        try {
            final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
            sysPathsField.setAccessible(true);
            sysPathsField.set(null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String args[]) {
        GlobalCaptureDevicePlugger.addCaptureDevices(); 
        Vector deviceInfo = CaptureDeviceManager.getDeviceList(new RGBFormat());
        System.out.println(deviceInfo.size());
        for (Object obj : deviceInfo ) {
            System.out.println(obj);
        }
    }
}