1.环境及软件准备:
windows 7旗舰版 32-bit
jdk-7u40-windows-i586.exe (注意:本人下载当时最新javaSE版本,其他32-bit版本均可)
jmf-2_1_1e-windows-i586.exe (目前最新的版本)
2.JMF环境搭建
2.1.jdk安装(务必以管理员身份登录安装)
2.2 jmf安装(务必以管理员身份登录安装,走过弯路!)
安装时,双击jmf-2_1_1e-windows-i586.exe,选择安装目录,会自动安装完成的。强烈建议:以管理员身份运行。当安装将要完成的时候,JMF会检测系统的可用媒体硬件,例如摄像头,麦克风等,所以会需要等待一会,耐心等待。(耐心等待可以免去后面自己手动注册音频和视频设备)
一切都安装好,配置好了以后,在系统环境变量之中配置上
: JMF_HOME=E:\jmf2.1.1e 和 CLASSPATH=%JMF_HOME%\lib;(注意:以上两个变量不进行配置也可以正常运行,因为以上java和jmf版本会自动配置管理员的ClASSPATH环境变量,本人就没有配置,运行良好)
2.3
是否安装成功,本人采用摄像头采集视频测试
说明:本人下载的是最新的windows
版本的 Eclipse,可以在官网下载到,Eclipse的初始配置可以在网上搜到很多资料,此处不赘述。
采用Eclipse新建java project时,一定要在工程中导入Jmf安装目录下的lib中的所有jar包,我的安装目录是C:\JMF2.1.1e\lib,因为该目录下的jmf.properties是已经注册的摄像头及音频的设备列表,在捕获摄像头前要读取该表,如果不导入以上jar包,设备的列表将为空,不能捕获摄像头,本人在此处走过弯路,特将工程截图说明给大家:
源码如下:
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 = 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();
}
}
}
测试结果图(是本人USB摄像头视频效果,其他视频设备皆可,一下是摄像头对着电脑显示器后显示的图片,显示出魔幻空间的效果):