Java

利用JMF捕获摄像头一类的视频设备 
JMF捕获技术(视频)

        想要得到视频信号,首先应该先安装Java Media Framework2.1.1.e,并进行初始化,获得音频视频驱动.
        JMF通过MediaLocator(类似URL的一种媒体信息定位)来确定视频,音频或者某个音频文件在计算机中的具体位置.例如视频为vfw:Microsoft WDM Image Capture(Win32):0,多媒体文件为 file:c://music/123.mp3.
        知道了它的媒体信息的位置后,就可以构造一个播放器(MediaPlayer或有同样功能的Player),播放就可以了.
        使用MediaPlayer的start方法就可以启动播放器了,隐藏了具体的播放细节.JMF播放器有它的生存周期,分别是Unrealized,Realizing,Realized,Prefetching,Prefetched Started.通过监听器来由JVM来控制各种状态的转换,通过realize方法使播放器达到Realized状态,一旦达到这个状态,监听器检测到,我们再使用prefetch方法达到Prefetched状态,然后再调用start方法播放,就可以完成播放任何媒体的功能了,简单吧!
           

捕获视频代码
 
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 ;
       MediaPlayer player;
 
 
public CaptureVideo() {
              infor = CaptureDeviceManager.getDevice(url);
              mediaLocator = infor.getLocator();
       }
 
       public void paly() {
              try {
                     player = Manager.createPlayer(mediaLocator);//利用mediaLocator创建Player
                     player.addControllerListener(this);
                     player.realize();
              } 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 class test {
        public static void main() {
                 CaptureVideo video = new CaptureVideo();
                 video.player();
        }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值