JMF天昏地暗之路(二)打开摄像头并显示在屏幕上


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写。


发表之后发现图片看不了,真是个坑!



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注