SSISO Community

시소당

jmf 자바 미디어플레이어

import  java.awt.*;
import  java.awt.event.*;
import  java.io.*;
import  java.net.*;
import  javax.swing.*;
import  javax.media.*;

public  class  VideoApplication  extends  JFrame  {
        private  Player  player;  //  자바  미디어  재생기

        private  Component  visualMedia;  //  시각적  내용  컴포넌트

        private  Component  mediaControl;  //  미디어를  위한  컴포넌트  제어

        private  Container  container;  //  주  컨체이너

        private  File  mediaFile;  //  미디어  파일과  미디어  위치

        private  URL  fileURL;

        public  VideoApplication()  {  //  생성자
                super("Video  Application  player");
                container  =  getContentPane();
                JMenu  fileMenu  =  new  JMenu("File");  //  메뉴  생성
                fileMenu.setMnemonic('F');
                container.add(fileMenu,  BorderLayout.NORTH);
                //  메뉴의  Open  File  클릭
                JMenuItem  openItem  =  new  JMenuItem("Open  File");  //  파일  열기
                openItem.setMnemonic('O');
                openItem.addActionListener(new  ActionListener()  {
                        public  void  actionPerformed(ActionEvent  event)  {
                                mediaFile  =  getFile();  //  getFile  메소드  실행
                                if  (mediaFile  !=  null)  {
                                        try  {
                                                fileURL  =  mediaFile.toURL();
                                        }  catch  (MalformedURLException  badURL)  {
                                                badURL.printStackTrace();
                                                showErrorMessage("Bad  URL");
                                        }
                                        makePlayer(fileURL.toString());
                                }
                        }
                });
                //  파일  열기

                fileMenu.add(openItem);
                JMenuItem  openURLItem  =  new  JMenuItem("Open  Locator");  //  URL  이용  재생
                openURLItem.setMnemonic('L');
                openURLItem.addActionListener(new  ActionListener()  {
                        public  void  actionPerformed(ActionEvent  event)  {
                                String  addressName  =  getMediaLocation();
                                if  (addressName  !=  null)  {
                                        makePlayer(addressName);
                                }
                        }
                });
                fileMenu.add(openURLItem);
                JMenuItem  exitItem  =  new  JMenuItem("Exit");  //  종료
                exitItem.setMnemonic('x');
                exitItem.addActionListener(new  ActionListener()  {
                        public  void  actionPerformed(ActionEvent  event)  {
                                System.exit(0);
                        }
                });
                fileMenu.add(exitItem);
                JMenuBar  bar  =  new  JMenuBar();
                setJMenuBar(bar);
                bar.add(fileMenu);
                Manager.setHint(Manager.LIGHTWEIGHT_RENDERER,  Boolean.TRUE);
        }

        public  void  showErrorMessage(String  error)  {  //  팝업  에러  메시지
                JOptionPane.showMessageDialog(this,  error,  "Error",
                                JOptionPane.ERROR_MESSAGE);
        }

        //  사용자가  로컬  컴퓨터에서  미디어  클립을  선택하게  한다
        public  File  getFile()  {  //  컴퓨터로부터  파일을  얻음
                JFileChooser  fileChooser  =  new  JFileChooser();
                fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
                int  result  =  fileChooser.showOpenDialog(this);
                if  (result  ==  JFileChooser.CANCEL_OPTION)  {
                        return  null;
                }  else  {
                        return  fileChooser.getSelectedFile();
                }
        }

        public  String  getMediaLocation()  {  //  사용자  입력으로  비디오  위치
                String  input  =  JOptionPane.showInputDialog(this,  "Enter  URL");
                if  (input  !=  null  &&  input.length()  ==  0)  {
                        return  null;
                }
                return  input;
        }

        //  클립의  Player를  생성하기  위해  필요한  준비  작업을  수행
        public  void  makePlayer(String  mediaLocation)  {  //  위치에  따른  플레이어  생성
                if  (player  !=  null)  {
                        removePlayerComponents();
                }
                MediaLocator  mediaLocator  =  new  MediaLocator(mediaLocation);
                if  (mediaLocator  ==  null)  {
                        showErrorMessage("Error  opening  file");
                        return;
                }
                try  {
                        player  =  Manager.createPlayer(mediaLocator);
                        //  createPlayer()  를  호출함으로써새로운  Player메소드를  초기화  한다.
                        //  createPlayer()  는  정해진  미디어  소스를  열고  그에  적합한  Player를  결정한다.
                        player.addControllerListener(new  PlayerEventHandler());
                        player.realize();
                }  //  연결문제시  IOException
                catch  (NoPlayerException  noPlayerException)  {
                        noPlayerException.printStackTrace();
                }  catch  (IOException  ioException)  {
                        ioException.printStackTrace();
                }
        }

        //  새로운  Player를  생성하기  전에  이전  Player의  시각  콤포넌트와  GUI  컨트롤을  프레임에서  제거한다
        public  void  removePlayerComponents()  {  //  플레이어  자원  반환,  미디어/컨트롤  초기화
                if  (visualMedia  !=  null)  {
                        container.remove(visualMedia);
                }
                if  (mediaControl  !=  null)  {
                        container.remove(mediaControl);
                }
                //  모든  플레이어의  활동  중지,  이전의  Player들이  지니고  있던  시스템  자원을  반환한다.
                player.close();
        }

        public  void  getMediaComponents()  {  //  시각  미디어와  플레이어  컨트롤  얻음
                visualMedia  =  player.getVisualComponent();
                if  (visualMedia  !=  null)  {
                        container.add(visualMedia,  BorderLayout.CENTER);
                }
                mediaControl  =  player.getControlPanelComponent();
                if  (mediaControl  !=  null)  {
                        container.add(mediaControl,  BorderLayout.SOUTH);
                }
        }

        private  class  PlayerEventHandler  extends  ControllerAdapter  {  //  핸들러
                public  void  realizeComplete(RealizeCompleteEvent  realizeDoneEvent)  {
                        player.prefetch();
                }

                public  void  prefetchComplete(  //  pretetching  후  재생작업  시작
                                PrefetchCompleteEvent  prefetchDoneEvent)  {
                        getMediaComponents();
                        validate();
                        player.start();
                }

                public  void  endOfMedia(EndOfMediaEvent  mediaEndEvent)  {
                        player.setMediaTime(new  Time(0));
                        player.stop();
                }
        }

        public  static  void  main(String  args[])  {
                VideoApplication  testPlayer  =  new  VideoApplication();
                testPlayer.setSize(400,  400);
                testPlayer.setLocation(400,  400);
                testPlayer.setDefaultCloseOperation(EXIT_ON_CLOSE);
                testPlayer.setVisible(true);
        }
}

6304 view

4.0 stars