JMF应用篇 之 从摄像头捕获视频

来源:互联网 发布:求数据恢复精灵注册码 编辑:程序博客网 时间:2024/05/15 05:42

下面是一段利用JMF从摄像头捕获视频的代码,也是从其它地方当下来的,我修改了一些地方,测试时效果还可以,可以显示捕获的视频(与JMF Studio的部分功能类似,但是很简单),但是还没有实现导出数据的功能。

       正常运行程序,需要保证摄像头的驱动正常安装,并在JMF中注册过,具体的方法参见前面的一篇转贴。要注意一点:String类的url是摄像头的url,具体的名称可以在JMF Registry中看到。代码贴出如下:

import javax.media.*;
 import java.io.*;
 import java.awt.*;

 class CaptureVideo extends Frame implements ControllerListener {
      
       private CaptureDeviceInfo infor ;
       private MediaLocator mediaLocator ;
       private String url = "vfw:Microsoft WDM Image Capture (Win32):0";
       private Component com;
       private Panel panel ;
     
       Player player;


       public CaptureVideo() {
              infor = CaptureDeviceManager.getDevice(url);
              mediaLocator = infor.getLocator();
             
       }

       public void 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();
              }
       }

       public void createComponent() {
              setTitle("视频信号");
      //        addWindowListener(new WinClose());

              setBounds(100,100,200,200);
              panel = new Panel();
              
              if((com = player.getVisualComponent()) != null) {
                     panel.add(com);
              }
              add(panel);
              setVisible(true);
       }

       public synchronized void controllerUpdate(ControllerEvent arg0) {
              // TODO 自动生成方法存根
              if(arg0 instanceof RealizeCompleteEvent) {
                     System.out.println("realized");
                     createComponent();                 //将播放器添加到Panel上
                     player.prefetch();

              }
              if(arg0 instanceof PrefetchCompleteEvent) {
                     player.start();
                     System.out.println("prefetched");
              }
       }
       
       public static void main(String[] arg0) {
           CaptureVideo video = new CaptureVideo();
           video.play();
           
       }

}