JMF天昏地暗之路(二)打开摄像头并显示在屏幕上
上一篇文章我已经说了一些比较基本的东西了,现在我来说一下如何用java打开本地摄像头并将当前摄像头的图片显示在屏幕上。
我先把我写的一个测试代码发上来。
/**
* 这是一段打开摄像头并将当前图像显示出来的代码
* @author 天下无双由我
* @time 2013/12/15
* @location GDUT
* */
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Frame;
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 openCamera extends JFrame{
//获取驱动,这段代码我也是在网上参考的
public static Player player=null;
private CaptureDeviceInfo di=null;
private MediaLocator ml=null;
//str1,str2是用来记录当前设备的字符号
private String str1;
private String str2;
public openCamera(){ //是为了使图像显示出来弄的小界面
this.setVisible(true);
this.setBounds(200,200,300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new openCamera().start();
}
public void start()
{
//视频设备的字符号,可以在JMStudio里面找到
str1 = "vfw:Logitech USB Video Camera:0";
str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try
{
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp, BorderLayout.NORTH);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
上面都有很详细的注释了,关于代码部分我就不多讲了,我就讲讲编译时候出现的问题吧。
首先你要保证你已经把JMF包导进了你的这个项目文件中,如果没有的话,就按照以下步骤导入jar包。
右键当前项目—->>Bulid Path—>Configure Bulid Path—>Libraries—->add External JAR
然后选择导入jmf中的所有jar包。
然后是编译了,要按下面的方法编译才行,不然有可能会出现一个问题,那就是
LINEAR, Unknown Sample Rate
* out *
LINEAR, 8000.0 Hz, 16-bit, Stereo, LittleEndian, Signed, class [S
未知的采样率问题,至于为什么会有这个问题,我也不清楚,网上很多人说是软件兼容性问题,我也不太清楚。
编译的时候,直接在当前项目目录下的src/(default package)上右键,选择Run AS/Java Application,这样这段代码才能正常运行,好了,直接上运行后的图吧。
本文的主要思路来源于CSDN的一篇文章,但是我现在找不到链接。我去。
先写到这里吧,我的任务还没有弄完呢,后面的以后再继续慢慢x写。
发表之后发现图片看不了,真是个坑!