Oops! JMF Video Cam Quick Start(Java攝像頭抓取)
Reference:
Oops! JMF Quick Start
http://www.aygfsteel.com/pixysoft/archive/2007/09/07/143408.html
JMF應用篇 之 從攝像頭捕獲視頻
http://blog.csdn.net/sunny3106/archive/2007/05/06/1598143.aspx
Quick Start
安裝jmf-2_1_1e-windows-i586.exe,可以在我的第一個JMF教程里面下載。然后運行JMF Registry,選擇Capture Devices里面的Detect capture Devices,得到以下結果:
eclipse里面新建一個Java Project,名字叫做Oops_JMFCam。項目添加引用jmf.jar,在安裝目錄下面的lib找到。
在項目的src目錄下面添加文件CaptureVideo.java。
import javax.media.*;
import java.io.*;
import java.awt.*;
classCaptureVideoextendsFrameimplementsControllerListener
{
privateCaptureDeviceInfo infor;
privateMediaLocator mediaLocator;
privateString url = "vfw:Microsoft WDM Image Capture (Win32):0";
privateComponent com;
privatePanel panel;
Player player;
public CaptureVideo()
{
infor = CaptureDeviceManager.getDevice(url);
mediaLocator = infor.getLocator();
}
publicvoid play()
{
try
{
player = Manager.createPlayer(mediaLocator);// 利用mediaLocator創建Player
player.addControllerListener(this);
player.realize();
// System.out.println("infor:"+infor);
// System.out.println("mediaLocator:"+mediaLocator);
}
catch (NoPlayerException e)
{
// TODO 自動生成 catch 塊
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自動生成 catch 塊
e.printStackTrace();
}
}
publicvoid createComponent()
{
setTitle("視頻信號");
// addWindowListener(new WinClose());
setBounds(100, 100, 200, 200);
panel = newPanel();
if ((com = player.getVisualComponent()) != null)
{
panel.add(com);
}
add(panel);
setVisible(true);
}
publicsynchronizedvoid controllerUpdate(ControllerEvent arg0)
{
// TODO 自動生成方法存根
if (arg0 instanceofRealizeCompleteEvent)
{
System.out.println("realized");
createComponent(); // 將播放器添加到Panel上
player.prefetch();
}
if (arg0 instanceofPrefetchCompleteEvent)
{
player.start();
System.out.println("prefetched");
}
}
publicstaticvoid main(String[] arg0)
{
CaptureVideo video = newCaptureVideo();
video.play();
}
}
import java.io.*;
import java.awt.*;
classCaptureVideoextendsFrameimplementsControllerListener
{
privateCaptureDeviceInfo infor;
privateMediaLocator mediaLocator;
privateString url = "vfw:Microsoft WDM Image Capture (Win32):0";
privateComponent com;
privatePanel panel;
Player player;
public CaptureVideo()
{
infor = CaptureDeviceManager.getDevice(url);
mediaLocator = infor.getLocator();
}
publicvoid play()
{
try
{
player = Manager.createPlayer(mediaLocator);// 利用mediaLocator創建Player
player.addControllerListener(this);
player.realize();
// System.out.println("infor:"+infor);
// System.out.println("mediaLocator:"+mediaLocator);
}
catch (NoPlayerException e)
{
// TODO 自動生成 catch 塊
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自動生成 catch 塊
e.printStackTrace();
}
}
publicvoid createComponent()
{
setTitle("視頻信號");
// addWindowListener(new WinClose());
setBounds(100, 100, 200, 200);
panel = newPanel();
if ((com = player.getVisualComponent()) != null)
{
panel.add(com);
}
add(panel);
setVisible(true);
}
publicsynchronizedvoid controllerUpdate(ControllerEvent arg0)
{
// TODO 自動生成方法存根
if (arg0 instanceofRealizeCompleteEvent)
{
System.out.println("realized");
createComponent(); // 將播放器添加到Panel上
player.prefetch();
}
if (arg0 instanceofPrefetchCompleteEvent)
{
player.start();
System.out.println("prefetched");
}
}
publicstaticvoid main(String[] arg0)
{
CaptureVideo video = newCaptureVideo();
video.play();
}
}
Run as Java Application,得到結果