jmf在win7x64下的安装及使用

最近公司需要做一个人脸识别系统,需要用java读取摄像头获取视频,网上查了很多资料,需要使用jmf(opencv和ffmpeg也是可以的,不过调用比较麻烦),自己试了下安装jmf,总是出现各种问题。下面总结下我的安装过程。

  1. 官网下载jmf的安装包,jmf已经停止维护了,只有32位的安装程序,所以要求我们必须用32位的jdk,这点一定要记住,否则是行不通的。官网地址:下载地址点此
  2. 双击安装程序(以管理员身份运行,不然可能会因为权限不够找不到摄像头,好多人双击之后没反应或者提示覆盖文件没有任何反应,这个问题看了好久也没找到问题所在,我在32位win7不行,在64位win7就可以安装,jdk都是32位),进行安装,一直下一步,这一步比较简单,没啥好说的。默认安装在系统盘的32位程序目录里。
    安装目录
  3. 接下来就是重点了,首先一定要先配置环境变量,配置如下:
classpath=
C:\Program Files(x86)\JMF2.1.1e\lib\jmf.jar;C:\Program Files (x86)\JMF2.1.1e\lib\sound.jar;

path=C:\Program Files (x86)\JMF2.1.1e\bin
//根据自己的路径去修改

4.注册音视频设备,这一步很关键,不然java程序中是找不到设备的
这里写图片描述
先点击restore重置一下,然后点击Detect Capture Devices,稍等一会就会弹出扫描到的设备,确认就ok了。
注册成功之后,就会在列表中出现vfw这个选项。
5.接下来就可以java代码测试了。(要把安装目录的lib下的jar包添加到项目的build path中)
附上网上找的一段代码,亲测可用

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.util.Vector;

import javax.media.CaptureDeviceInfo; 
import javax.media.CaptureDeviceManager; 
import javax.media.Manager; 
import javax.media.MediaLocator; 
import javax.media.Player; 
import javax.swing.JFrame;

public class CameraTest extends JFrame { 

public CameraTest() throws Exception { 
//先启动摄像头,再做后续的初始化窗体,可保证正确显示摄像头 
initCapture(); 

//设置窗体的一些属性 
this.setTitle("CaptureTest"); 
this.setBounds(500, 100, 800, 500); 
this.setVisible(true); 
this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
}

/** 
* 初始化摄像头 
*/ 
private void initCapture() throws Exception { 
//获取所有音频、视频设备 
Vector<javax.media.CaptureDeviceInfo> deviceList = javax.media.CaptureDeviceManager.getDeviceList(null);

//获取视频设备,视频设备以vfw打头 
CaptureDeviceInfo cameraDevice = null; 
for(CaptureDeviceInfo cameraDeviceTmp :deviceList){ 
if (cameraDeviceTmp.getName().startsWith("vfw")) { 
cameraDevice = cameraDeviceTmp; 
break; 
} 
} 

if(cameraDevice == null){ 
throw new Exception("找不到摄像头设备"); 
}

//创建视频播放器 
MediaLocator ml = cameraDevice.getLocator(); 
Player player = Manager.createRealizedPlayer(ml);

if (player == null){ 
throw new Exception("创建摄像头播放器失败"); 
} 

//播放视频 
player.start(); 


//将播放器加入窗体 
Component comp = null; 
if ((comp = player.getVisualComponent()) != null) 
add(comp, BorderLayout.CENTER); 

}

public static void main(String[] args) { 
try {

CameraTest mc = new CameraTest(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
}

KingBoy原创

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值