简单使用JMF调用摄像头

时间:2021-03-31 09:16:03

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调用摄像头

找到 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();
}
}
}