JMF(Java Media Framework)是Java媒体框架,包含了许多用于处理多媒体的API可以让基于JAVA的应用实现音频、视频的捕捉、处理、播放、传输等功能。利用它,可以实现音、视频播放,网络视频聊天、视频会议等功能。
本次主要是初步学习如何使用JMF调用摄像头,简单步骤记录如下:
1、下载JMF
用到的JMF版本为 jmf-2_1_1e-windows-i586,已上传资源至CSDN下载,点击链接即可。点击下载JMF
2、运行 jmf-2_1_1e-windows-i586
运行 jmf-2_1_1e-windows-i586.exe 文件,主要会在选定目录下生成bin、dos、lib等三个文件夹。
(运行结束,会提示重启生效。其实不重启也没有关系~)
3、在 myeclipse 中导入相应 JAR 文件
build path -> configure build path -> libraries -> add external JARs
找到 jmf-2_1_1e-windows-i586.exe 安装目录,导入 lib 中相关 jar 文件(用到的主要是jmf.jar、mediaplayer.jar、sound.jar)
4、源程序
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.Vector;
import javax.media.CaptureDeviceInfo;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.swing.JFrame;
public class CameraCapture extends JFrame {
public CameraCapture() throws Exception {
//先启动摄像头,再做后续的初始化窗体,可保证正确显示摄像头
initCapture();
//设置窗体的一些属性
this.setTitle("CameraCapture");
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 {
CameraCapture mc = new CameraCapture();
} catch (Exception e) {
e.printStackTrace();
}
}
}