(转)JMF找不到摄像头的解决方法

本文详细介绍了在Windows7x64环境下使用JMF框架遇到的两个主要问题:摄像头初始化失败及无法检测到媒体设备。通过安装ManyCamera程序和复制jmf.properties文件解决了这些问题。此外,解释了为什么在Eclipse中可以正常运行,而导出为jar后却找不到摄像头的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、http://www.blogjava.net/amplifier/archive/2014/07/01/415330.html

2、http://stackoverflow.com/questions/8768142/java-capturedevicemanagergetdevicelist-is-empty


JMF(Java Media Framework)是Java平台使用摄像头、麦克风等媒体设备的应用程序框架,但到了2.1.1e就不再更新,在Windows 7 X64上还能正常运行,只是安装的界面让你感觉回到了Windows98的时代。


不过年代久远的东西,虽然还能用,但可能会遇到一些奇怪的问题,折腾了两个月,发现了两个比较大的问题:

第一个是在Windows 7 x64上提示摄像头初始化失败的问题。这个问题很奇怪,电脑刚开机的时候可以顺利找到一次摄像头并正常操作,但是第二次就会提示摄像头初始化失败。有人提出的解决方法是安装一个叫ManyCamera的程序,这个程序可以把一个摄像头供多个程序同时使用,其实就等于中间加了一层转换,效果会有点差别,免费版还会加上水印,要求比较高的人可能会不爽,但是目前找不到其他办法。

第二个是在程序中找不到摄像头,不光找不到摄像头,其他媒体设备通通找不到,使用以下语句:

vector  =  CaptureDeviceManager.getDeviceList (  null  )
按照文档说明是返回所有媒体设备,但每次vector都是null。
在Eclipse中运行又能正常,导出成jar之后运行就会找不到摄像头。
原因在于找不到jmf.properities文件,该文件包含所有检测到的媒体设备的信息, 最简单的解决方法就是把JMF安装目录下lib子目录中的jmf.properties文件复制到最后运行的jar所在的目录 ,不过如果摄像头改过的话,重新检测后要把新的文件复制到jar目录,因为检测到的媒体设备信息都会存放在JMF安装目录里面的jmf.properties文件里。

StackOverflow里面有个人对这个问题解释得比较清楚:
http://stackoverflow.com/questions/8768142/java-capturedevicemanagergetdevicelist-is-empty


虽然问题解决了,但是还是不明白为何在Eclipse中可以正常运行,导出jar后运行却找不到摄像头,即使把JMF所有jar和lib目录都加入系统的CLASSPATH环境变量里还是不行。


另外,JMF安装程序会自动把它的jar和lib目录加入系统的%CLASSPATH%环境变量,但是如果你卸载了再重新安装到其他目录,并不会改变%CLASSPATH%的值,需要手动修改。不过这个环境变量似乎没啥用处。
最好不要把JMF安装到默认的Program Files目录,可能会运行不了,安装到短目录会比较保险,它似乎还是只认Dos时代的8.3目录结构,但偏偏又默认安装到Program Files里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值