JMF在win7下的应用

今天研究了一下java下调用摄像头的应用,google了一上午,终于一些细节在下午搞定,特此写下来。首先,说一下环境
我的环境是:


Window 7  64 bit   System
I5   2410   Intel


Java环境
JDK   1.6_19
JMF 2.1.1e


下载地址就在官网上,JDK的就不说了,JMF的:
http://download.oracle.com/otn-pub/java/jmf/2.1.1e/jmf-2_1_1e-windows-i586.exe?AuthParam=1334803872_4d611ba8e3b99f7cec20e7bf3e7eefe4


其实在Xp下,JMF工作是完好的,但是在win7下,由于win7的权限设计问题,没有Administrator权限的用户,根本无法获得设备的使用权,所以导致我白白浪费了一上午时间纠结在这个问题上,只要注意到这个问题,就一切OK。


还有,就算你是64位的系统,也要安装JDK32位,因为JMF是个比较古老的东东,不能兼容在64位上。
安装时,双击JMF*.exe,选择安装目录,会自动安装完成的。强烈建议:以管理员身份运行。当安装将要完成的时候,JMF会检测系统的可用媒体硬件,例如摄像头,麦克风等,所以会需要等待一会,耐心等待。
当然,下边会介绍个更好的方法
在桌面上,右击我的电脑--->管理---->




取消掉账户已禁用,这样,重启机器,就可以以administrator身份登录系统,这样就和普通的xp权限环境差别不大了。
一切都安装好,配置好了以后,在环境变量之中配置上  
JMFHOME=E:\jmf2.1.1e
CLASSPATH=%JMFHOME%\lib;


然后启动Eclipse,新建项目,将%JMFHOME%\lib下的jar全部加入到项目的classpath之中。然后测试代码如下:

import javax.media.*;




import java.io.*;




import java.awt.*;




public class CaptureVideo extends Frame implements ControllerListener {
	private CaptureDeviceInfo infor;
	private MediaLocator mediaLocator;
	private String str1 = "vfw:Logitech USB Video Camera:0";
	private String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
	private String url = "vfw:Microsoft WDM Image Capture (Win32):0";
	private Component com;
	private Panel panel;
	Player player;
	public CaptureVideo() {
		infor = CaptureDeviceManager.getDevice(str1);
		mediaLocator = infor.getLocator();
	}
	public void play() {
		try {
			player = Manager.createPlayer(mediaLocator);// 利用mediaLocator创建Player
			player.addControllerListener(this);
			player.realize();
			// System.out.println("infor:"+infor);
			// System.out.println("mediaLocator:"+mediaLocator);
		} catch (NoPlayerException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
	}




	public void createComponent() {
		setTitle("视频信号");
		// addWindowListener(new WinClose());
		setBounds(100, 100, 200, 200);
		panel = new Panel();
		if ((com = player.getVisualComponent()) != null) {
			panel.add(com);
		}
		add(panel);
		setVisible(true);
	}
	public synchronized void controllerUpdate(ControllerEvent arg0) {
		// TODO 自动生成方法存根
		if (arg0 instanceof RealizeCompleteEvent) {
			System.out.println("realized");
			createComponent(); // 将播放器添加到Panel上
			player.prefetch();
		}
		if (arg0 instanceof PrefetchCompleteEvent) {
			player.start();
			System.out.println("prefetched");
		}
	}
	public static void main(String[] arg0) {
		//System.out.println(CaptureDeviceManager.getDeviceList(null).size());
		 CaptureVideo video = new CaptureVideo();
		 video.play();
	}
}



你可能感兴趣的:(jdk,String,image,Microsoft,video,import)