- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图打印出使用 CaptureDeviceManager 类中的 #getDeviceList() 方法支持的所有捕获设备,并且返回的 Vector 的大小为 0。
这是为什么呢?我有一个可以使用的网络摄像头 - 所以应该至少有一个。我正在运行 Mac OS X Lion - 使用 JMF 2.1.1e。
谢谢!
最佳答案
CaptureDeviceManager.getDeviceList(Format format) 未检测到设备。相反,它从 JMF 注册表中读取,即 jmf.properties 文件。它在类路径中搜索jmf.properties文件。
如果 JMF 安装成功,则类路径将配置为包含所有相关的 JMF jar 和目录。 JMF 安装附带一个 jmf.properties 文件,该文件包含在 JMF 安装目录下的“lib”文件夹中。这意味着jmf.properties将由JMStudio定位,并且您通常会看到JMStudio应用程序正确执行。 (如果您的 JMF 安装在“C:\Program Files”下,则以管理员身份运行以绕过 UAC)
当您创建自己的应用程序来检测设备时,可能会出现上述问题。我看到了一些与同一问题相关的问题。这是因为您的应用程序的类路径可能不同,并且可能不包含环境类路径。在此处查看您的 IDE 的属性。问题是 CaptureDeviceManager 找不到 jmf.properties 文件,因为它不存在。
正如您所发现的,您可以从 JMF 安装文件夹复制 jmf.properties 文件。它将包含正确的设备列表,因为 JMF 在安装过程中检测到它(无论如何都要检查一下以确保)。
如果您想自己进行设备检测,则创建一个空的 jmf.properties 文件并将其放在类路径中的某个位置(它可能在执行过程中最初抛出 java.io.EOFException,但这由 JMF 类正确处理)。然后使用以下代码来检测网络摄像头...
import javax.media.*;
import java.util.*;
public static void main(String[] args) {
VFWAuto vfwObj = new VFWAuto();
Vector devices = CaptureDeviceManager.getDeviceList(null);
Enumeration deviceEnum = devices.elements();
System.out.println("Device count : " + devices.size());
while (deviceEnum.hasMoreElements()) {
CaptureDeviceInfo cdi = (CaptureDeviceInfo) deviceEnum.nextElement();
System.out.println("Device : " + cdi.getName());
}
}
下面给出了 VFWAuto 类的代码。这是 JMStudio 源代码的一部分。您可以很好地了解如何检测设备并将其记录在注册表中。测试时将这两个类放在同一个包中。忽略 VFWAuto 类中的 main 方法。
import com.sun.media.protocol.vfw.VFWCapture;
import java.util.*;
import javax.media.*;
public class VFWAuto {
public VFWAuto() {
Vector devices = (Vector) CaptureDeviceManager.getDeviceList(null).clone();
Enumeration enum = devices.elements();
while (enum.hasMoreElements()) {
CaptureDeviceInfo cdi = (CaptureDeviceInfo) enum.nextElement();
String name = cdi.getName();
if (name.startsWith("vfw:"))
CaptureDeviceManager.removeDevice(cdi);
}
int nDevices = 0;
for (int i = 0; i < 10; i++) {
String name = VFWCapture.capGetDriverDescriptionName(i);
if (name != null && name.length() > 1) {
System.err.println("Found device " + name);
System.err.println("Querying device. Please wait...");
com.sun.media.protocol.vfw.VFWSourceStream.autoDetect(i);
nDevices++;
}
}
}
public static void main(String [] args) {
VFWAuto a = new VFWAuto();
System.exit(0);
}
}
假设您使用的是 Windows 平台并且有一个可用的网络摄像头,则此代码应检测设备并填充 jmf.properties 文件。在下次运行时,您还可以注释掉 VFWAuto 部分及其对象引用,并且您可以看到 CaptureDeviceManager 从 jmf.properties 文件中读取。
VFWAuto 类是 jmf.jar 的一部分。您还可以在 JMStudio 示例源代码中查看用于检测音频设备的 DirectSoundAuto 和 JavaSoundAuto 类。按照与 VFWAuto 相同的方式进行尝试。
我的配置是 Windows 7 64 位 + JMF 2.1.1e Windows 性能包 + 网络摄像头。
关于Java:CaptureDeviceManager#getDeviceList() 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8768142/
运行脚本时,我收到错误“无法从静态上下文引用非静态方法 getDeviceList()” - 如何将此方法设为静态? private static String getUsbDeviceAddress
我正在尝试将 Arduino 板与我的 Odys Neo x8 平板电脑一起使用,但 UsbManager 似乎无法正确识别该设备。我通过 OTG 适配器将 arduino 连接到平板电脑,以便平板电
我试图打印出使用 CaptureDeviceManager 类中的 #getDeviceList() 方法支持的所有捕获设备,并且返回的 Vector 的大小为 0。 这是为什么呢?我有一个可以使用的
我在使用 JMF 和获取 CaptureDeviceManager.getDeviceList() 列出任何捕获设备时遇到问题。 我正在 Ubuntu 3.11.0-20-generic x86_64
我正在尝试在名为 StillIamge 的接口(interface)中调用名为 GetDevicesList 的方法调用,但返回的结果为空。我认为这是一个指针问题,但我不是 C++ 专家,我认为这就是
我是 Jpcap 的新手。我正在使用 NetworkInterface[] arr=JpcapCaptor.getDeviceList(); System.out.println(arr.length
我想通过编写以下代码来使用 UsbManager API: 在 Activity 代码中: UsbManager manager = (UsbManager) getSystemSer
在 Samsung S4 设备上工作,但在 MotoG、Samsung A5(2016) 上不工作 下面的代码总是返回零,我尝试在 list 文件中授予权限但它仍然返回 null.. 谁能给我任何建议
我在 ubuntu 11.10 上使用 java 编写代码 笔记本电脑网络摄像头运行正常并找到它 /dev/v4l/。Skype 应用程序可以使用网络摄像头并运行。 我安装了 JMF,但无法添加环境变
我正在尝试通过 USB 将 Android 手机连接到配件(在本例中为 MacBook pro)并使用 getDeviceList() 验证连接是否被识别并通过 toString( ) 使用以下代码:
我是一名优秀的程序员,十分优秀!