4

我编码javaubuntu 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 来代替?

4

1 回答 1

0

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

您可以在安装 JMF 后通过运行 JMFRegistry 手动完成。

在此处输入图像描述

或者借助扩展库 FMJ(Java 中的免费媒体)以编程方式进行。这是代码:

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);
        }
    }
}
于 2019-10-31T20:26:47.437 回答