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

本文介绍了一段使用Java Media Framework (JMF)从摄像头捕获视频的代码示例。该示例展示了如何通过指定摄像头URL创建播放器,并将其显示组件添加到GUI界面上。注意需确保摄像头驱动已正确安装并在JMF中注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

 class CaptureVideo extends Frameimplements ControllerListener {
      
       private CaptureDeviceInfo infor ;
       private MediaLocator mediaLocator ;
       private String url = "vfw:MicrosoftWDM Image Capture (Win32):0";
       private Component com;
       private Panel 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 = new Panel();
              
             if((com = player.getVisualComponent()) != null) {
                    panel.add(com);
             }
             add(panel);
             setVisible(true);
       }

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值