JAVA 使用JMF调用摄像头

一、JMF简述

       JMF(Java Media Framework)是Java媒体框架,包含了许多用于处理多媒体

的API可以让基于JAVA的应用实现音频、视频的捕捉、处理、播放、传输等功能。

利用它,可以实现音、视频播放,网络视频聊天、视频会议等功能。

二、环境准备

1、下载地址:http://www.oracle.com/technetwork/java/javase/download-142937.html ,

下载的版本是:jmf-2_1_1e-windows-i586

2、安装JMF:

     2.1、安装环境要求:JDK 版本(1.6或以上的32位版本),JMF只支持32位JDK,

我本机64位win7 +jdk1.7

     2.2、安装完毕后要重启,在你的JDK安装目录\jre\lib\ext下,会多出两个文件:

jmf.jar和sound.jar

3、测试摄像头:安装完毕后,在桌面会多一个"JMStudio"的快捷方式,运行它,

点击"File->Capture"菜单,如果启动摄像头成功,说明你安装jmf成功。

4、打开安装好了的JMF,在E:\develop\jmf\bin\jmfregistry.exe”,选择“Capture Devices”

然后按左下角“Detect Capture Devices”按钮,多按几次,直到左边栏中出现“ vfw:Microsoft

WDM Image Capture (Win32):0” ,则说明JMF已经注册了摄像头,到此就可以关闭了。

 

 

三、编写测试代码

      编写JAVA代码打开电脑摄像头,在eclipse中选择32位jdk1.7,将jmf安装目录

\lib目录下的jmf.properties加入到工程;

或将src目录下将jmf安装目录\lib目录下的jmf.jar,sound.jar,mediaplayer.jar三个

文件导入工程,目的是要引入该目录下的jmf.properties。

    测试代码:

package com.tzz.jmf;

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 CameraUtil extends JFrame {

	private static final long serialVersionUID = 8160948676188570043L;

	/** 初始化启动摄像头 */
	public void initCapture() {
		try {
			// 获取所有音频、视频设备
			@SuppressWarnings("unchecked")
			Vector<CaptureDeviceInfo> deviceList = CaptureDeviceManager
					.getDeviceList(null);

			// 获取视频设备,视频设备以vfw打头(vfw:Microsoft WDM Image Capture (Win32):0)
			CaptureDeviceInfo cameraDevice = null;
			for (CaptureDeviceInfo cameraDeviceTmp : deviceList) {
				if (cameraDeviceTmp.getName().startsWith("vfw")) {
					cameraDevice = cameraDeviceTmp;
					break;
				}
			}
			if (cameraDevice == null) {
				System.out.println("找不到摄像头设备");
			}

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

			if (player == null) {
				System.out.println("创建摄像头播放器失败");
			}

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

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

	public static void main(String[] args) {
		CameraUtil cameraUtil = new CameraUtil();
		cameraUtil.initCapture();
		// 设置窗体属性
		cameraUtil.setTitle("CaptureTest");
		cameraUtil.setBounds(500, 100, 800, 500);
		cameraUtil.setVisible(true);
		cameraUtil.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}

猜你喜欢

转载自tzz6.iteye.com/blog/2280571