Java 视频捕获(JMF)

Java推出的JMF(Java Media Framework)之后标着Java进入了多媒体时代,如果你想编写能播放视频的Java程序,必须下载sun公司的JMF2.1(或者更高的版本),它为我们提供了编写多媒体必须的包:java.media


没有安装JFM的在编译*.java的时候会提示找不到java.media包


java JMF的配置方法

1.首先去sun公司的主页去下载安装包
2.下载得到一个名为jdk-6u12-windows-i586-p 的文件

3.双击安装,默认的安装路径是C:\Program Files\JMF2.1.1e(可以根据自己的需要改变这个路径)

4.安装后,需要配置下面的几个变量(vista系统和XP相同),下面以vista系统为例子

a.点击我的电脑--->属性--->高级系统设置--->环境变量

b.找到CLASSPATH,分别增加jmf.jar和sound.jar

C:\Program Files\JMF2.1.1e\lib\jmf.jar;

C:\Program Files\JMF2.1.1e\lib\sound.jar;

(其中 C:\Program Files\JMF2.1.1e为你的JFM的安装路径)

c.找到PATH,增加动态库

C:\Program Files\JMF2.1.1e\bin;

提示:每添加一项后,不要忘记了后面的分号


好运~


附一个用JAVA编写播放视频的程序


import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.media.*;
public class JavaVideo extends Applet implements ControllerListener,Runnable,ItemListener
{
Player player;
String str;
Thread mythread;
Choice choice;
Component visualCompoment,controlCompoment,progressBar;
String mediaFile;
URL mediaURL,codeBase;
Frame frame;
public void init()
{
str="music.MPE";
mythread=new Thread(this);
choice=new Choice();
choice.add("music01.MPG");
choice.add("music02.avi");
choice.add("music03.avi");
choice.addItemListener(this);
frame=new Frame("Movie System");
frame.setSize(640,480);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(player!=null)
{
player.stop();
player.deallocate();
}
frame.setVisible(false);
System.exit(0);
}
});
add(choice);
}
public void stop()
{
if(player!=null)
{
player.stop();
}
}
public synchronized void controllerUpdate(ControllerEvent event)
{
player.getDuration();
if(event instanceof RealizeCompleteEvent)
{
if((visualCompoment=player.getVisualComponent())!=null)
{
frame.add("Center",visualCompoment);
}
if((controlCompoment=player.getControlPanelComponent())!=null)
if(visualCompoment!=null)
frame.add("South",controlCompoment);
else
frame.add("Center",controlCompoment);
frame.validate();
frame.pack();
}
else if(event instanceof PrefetchCompleteEvent)
{
player.start();
}
}
public void itemStateChanged(ItemEvent e)
{
str=choice.getSelectedItem();
if(player==null) {}
else
{
player.stop();
player.deallocate();
}
frame.removeAll();
frame.setVisible(true);
frame.setBounds(300,100,150,100);
frame.validate();
if(!(mythread.isAlive()))
{
mythread=new Thread(this);  
}
try{
mythread.start();
}
catch(Exception ee) {}
}
public synchronized void run()
{
try{
mediaURL=new URL(codeBase,str);
player=Manager.createPlayer(mediaURL);
player.getDuration();
if(player!=null)
{
player.addControllerListener(this);
}
else
{
System.out.println("failed to creat player for"+mediaURL);
}
}
catch(MalformedURLException e)
{
System.out.println("URL for"+mediaFile+"is invalid");
}
catch(IOException e)
{
System.out.println("URL for"+mediaFile+"is invalid");
}
catch(NoPlayerException e)
{
System.out.println("Can't find a player"+mediaURL);
}
if(player!=null)
{
player.prefetch();
}
}  
}


 

 

 

 

class Camera extends Applet implements ControllerListener{
    private Vector vector;
    private CaptureDeviceInfo deviceInfo;
    private MediaLocator vedioLocator;
    private MediaLocator soundLocator;
    private MediaLocator tempLocator;
    private Player soundPlayer;
    private Player vedioPlayer;
    private DataSource vedioSource;
    
    private String deviceName[];
    
    public void init(){
        this.setLayout(new BorderLayout());
        vector = CaptureDeviceManager.getDeviceList(null);//获取设备列表
        if(vector != null){
            
            for(int i = 0;i< vector.size();i++){
                deviceInfo = (CaptureDeviceInfo) vector.get(i);
                if (deviceInfo != null )
                {
                   try{
                    tempLocator = deviceInfo.getLocator();
                    if(tempLocator.getProtocol().equals("javasound")){
                        soundLocator = tempLocator;
                        soundPlayer = Manager.createPlayer(soundLocator);
                        soundPlayer.addControllerListener(this);
                        //System.out.println(soundLocator);
                    }
                    if(tempLocator.getProtocol().equals("vfw")){
                        vedioLocator = tempLocator;
                        vedioPlayer = Manager.createPlayer(vedioLocator);
                        vedioPlayer.addControllerListener(this);
                        //System.out.println(vedioLocator);
                    }
                   }catch(Exception e)    {
                       e.printStackTrace();
                   }
                }//end of if
                
            }
        }//end of if
    }// end of init()
    public void start()
    {
        if(soundPlayer != null){
            soundPlayer.start();
            
        }
        if(vedioPlayer != null){
                     
           vedioPlayer.start();
           
        }
    }
    public void stop(){
        soundPlayer.stop();
        soundPlayer.deallocate();
        vedioPlayer.stop();
        vedioPlayer.deallocate();
    }
    
    public void destroy(){
        soundPlayer.close();
        vedioPlayer.close();
    }
    
    //添加可视组件
    public void controllerUpdate(ControllerEvent event){
        
         if (event instanceof RealizeCompleteEvent) {
          Component visualComp;
          Component soundControlComp;
          Component vedioControlComp;
          
         
          if(event.getSource().equals(vedioPlayer)){
              if ((visualComp = vedioPlayer.getVisualComponent()) != null)
              {
                 add ("Center", visualComp); 
                
              }
              if ((vedioControlComp = vedioPlayer.getControlPanelComponent()) != null)
                 add ("South", vedioControlComp);
          }
          if((soundControlComp = soundPlayer.getControlPanelComponent()) != null)
              add("South",soundControlComp);
          
          validate();
        }
        
    }
    

 

你可能感兴趣的:(java,thread,vector,null,import)