JMF 录像程序

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.media.ConfigureCompleteEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.DataSink;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoDataSourceException;
import javax.media.NoProcessorException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.Processor;
import javax.media.RealizeCompleteEvent;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;

public class VideoCapturer extends Frame implements ControllerListener {
    Button videoCapturer;
    boolean isInCapturing = false;
    String url = DeviceConfig.VIDEO_DEVICE_URL;
    DataSource source;
    Player player = null;
    DataSink datasink;
    Processor processor=null;

    public VideoCapturer() {
        setBounds(100, 100, 300, 400);

        /** 数据源 */
        try {
            source = Manager.createDataSource(new MediaLocator(url));

            /** 处理器 */
            player = Manager.createPlayer(source);
            player.addControllerListener(this);
            player.realize();
        } catch (NoDataSourceException e2) {
            e2.printStackTrace();
        } catch (IOException e2) {
            e2.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        /** 录像按钮 */
        videoCapturer = new Button("video capture");
        videoCapturer.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                
                try {
                    DataSource outsource = Manager.createCloneableDataSource(source);
                    processor = Manager.createProcessor(outsource);
                    
                    
                    processor.addControllerListener(new ControllerListener() {
                        
                        @Override
                        public void controllerUpdate(ControllerEvent event) {
                            System.out.println(event.getClass());
                            if (event instanceof ConfigureCompleteEvent){

                                // 设置视频输出格式
                                processor.setContentDescriptor(new FileTypeDescriptor(
                                        FileTypeDescriptor.QUICKTIME));
                                
                                processor.realize();
                            } else if (event instanceof RealizeCompleteEvent) {
                                processor.prefetch();
                            } else if (event instanceof PrefetchCompleteEvent) {
                                processor.start();
                                
                                String luxiangsavepath = "C:/capture/";
                                String luxiangsavename = "flv.quickname";
                                
                                
                                MediaLocator dest = new MediaLocator(new java.lang.String(
                                        "file:///" + luxiangsavepath + luxiangsavename));
                                
                                try {
                                    datasink = Manager.createDataSink(processor.getDataOutput(), dest);
                                    
                                    datasink.open();

                                    datasink.start();
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                                
                            }
                            
                        }
                    });
                    processor.configure();
                    
                    
                    

                } catch (SecurityException e1) {

                } catch (IOException e1) {
                } catch (NoProcessorException e1) {
                    
                }

            }
        });

        
        
        /** 停止录像按钮 **/
        Button stopButton = new Button("stop capture");
        add(stopButton, BorderLayout.NORTH);
        stopButton.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    System.out.println("close");
                    processor.close();
                    processor.deallocate();
                    
                    datasink.stop();
                    datasink.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                
            }
        });
        

        Panel northPanel = new Panel();
        add(northPanel, BorderLayout.NORTH);
        
        northPanel.add(videoCapturer, BorderLayout.EAST);
        northPanel.add(stopButton, BorderLayout.WEST);
    }

    public static void main(String[] args) {
        VideoCapturer capturer = new VideoCapturer();
    }

    @Override
    public void controllerUpdate(ControllerEvent event) {
        System.out.println(event.getClass());

        if (event instanceof RealizeCompleteEvent) {
            player.prefetch();
        } else if (event instanceof PrefetchCompleteEvent) {
            player.start();

            /** 显示player */
            Component visualComponent = player.getVisualComponent();
            add(visualComponent, BorderLayout.CENTER);
            setVisible(true);
        } else {

        }

    }
}

你可能感兴趣的:(java)