![]() |
| ||
| JMF question: question about the unrealized player Dear all, I am a newbie in JMF and just got a problem in running my first JMF java program. I wanted to create a player and play some video. And I happened to get some code which could run properly. But after my further exploration, it seems that I could not understand some of the part. Could anyone please enlighten there? Thanks in advance. Questions: 1. when I add in thePlayer.realize(); after thePlayer.start(); in method start(), I get compilation error as such ++++++++++++++++ C:\\test>java MPlayer javax.media.NotRealizedError: Cannot get gain control on an unrealized player at com.sun.media.MediaPlayer.getGainControl(MediaPlayer.java:58) at MPlayer.start(MPlayer.java:215) at MPlayer.<init>(MPlayer.java:158) at MPlayer.main(MPlayer.java:252) Exception in thread "main" javax.media.NotRealizedError: Cannot get gain control on an unrealized player at com.sun.media.MediaPlayer.getGainControl(MediaPlayer.java:58) at MPlayer.start(MPlayer.java:215) at MPlayer.<init>(MPlayer.java:158) at MPlayer.main(MPlayer.java:252) ++++++++++++++++++ I understand that the problem is that player is not realized yet. But may I ask what is the importance to realize the player? Meanwhile, when I read about some relavant meterial, I got to know that player has many phases like unrealized, realized, prefetched. May I ask if I need to know each and every phase well before I could realy write my own player using JMF? If it is, could you kindly give me some hint to find relavant meterial regarding that? 2. there are some lines to implement the actionPerformed. ++++++++++++++++ public void actionPerformed(ActionEvent event) { setVisible(false); System.exit(0); } ++++++++++++++++ I know that since the MPlayer class is implementing ActionListener, ControllerListener, so it has to implement actionPerformed. But May I ask what will be the action which will trigger this listener? I have tried playing with it. I still could not figure it out. 3. Regarding the class --> public void controllerUpdate(ControllerEvent event) I realised that it is called automatically by the system. I wonder if it is the function that its super class has or else how come it acts like such. That is all for my Questions. Your help will be much appreciated. BTW, code is attached. Code attached: ++++++++++++++++ import javax.media.Controller; import javax.media.ControllerEvent; import javax.media.ControllerListener; import javax.media.Player; import javax.media.Manager; import javax.media.RealizeCompleteEvent; import javax.media.Time; import javax.media.GainControl; import java.io.IOException; import javax.media.NoPlayerException; import javax.media.CannotRealizeException; import java.net.URL; import java.io.File; import java.net.MalformedURLException; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JFileChooser; import java.awt.Container; import java.awt.Component; import javax.swing.BoxLayout; import java.awt.Color; import java.awt.Font; import javax.swing.JPanel; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JOptionPane; public class MPlayer extends JFrame implements ActionListener, ControllerListener { private Player thePlayer; private File theFile; private JLabel currentTimeLabel, mediaNameLabel; private int iTime; private String theTime; private boolean stop = false; private Font font; private Color textColor; private Dimension size; private JMenuBar MenuBar; private JMenu FileMenu; private JMenuItem OpenItem, ExitItem; private JFileChooser mediaFileChooser; private JPanel timePanel, menuPanel; private Container pane = getContentPane(); public MPlayer() { font = new Font("Times", Font.BOLD, 18); textColor = new Color(100, 0, 0); theFile = new File("C:\\"); //theFile = new File("\\..\\..\\..\\..\\Documents and Settings\\Mark Brown\\My Documents\\My Music\\cornelius_-_count_five_or_six.mp3"); //theFile = new File("Z:\\Temp2\\creatures-demo.mpeg"); mediaFileChooser = new JFileChooser(); JMenuBar MenuBar = new JMenuBar(); JMenu FileMenu = new JMenu(); JMenuItem OpenItem = new JMenuItem(); JMenuItem ExitItem = new JMenuItem(); FileMenu.setText("File"); OpenItem.setText("Open"); ExitItem.setText("Exit"); FileMenu.add(OpenItem); FileMenu.add(ExitItem); MenuBar.add(FileMenu); menuPanel = new JPanel(); menuPanel.setLayout(new BorderLayout()); menuPanel.add(MenuBar, BorderLayout.NORTH); menuPanel.setPreferredSize(new Dimension(700, 25)); menuPanel.setMaximumSize(new Dimension(700, 25)); timePanel = new JPanel(); size = new Dimension(700, 40); timePanel.setPreferredSize(size); timePanel.setMaximumSize(size); timePanel.setLayout(new FlowLayout(0, 15, 10)); currentTimeLabel = new JLabel(theTime); currentTimeLabel.setFont(font); currentTimeLabel.setForeground(textColor); pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); pane.add(menuPanel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //OpenItem.addActionListener(new ActionListener()); // loop forever updating gui //Removed lots from here /* public void actionPerformed(ActionEvent event) { int retval = mediaFileChooser.showOpenDialog(null); if (retval == JFileChooser.APPROVE_OPTION) { theFile = mediaFileChooser.getSelectedFile(); //make sure this method returns. start(); } } }); */ start(); pack(); setVisible(true); } public void start() { try { //thePlayer = Manager.createPlayer(theFile.toURL()); //zj 0920 //System.out.println("zj @ start theFile.toURL() --> " + theFile.toURL()); //System.out.println("zj @ start Time t --> t.getSeconds() " + t.getSeconds()); //System.out.println("zj @ start theFile.toURL() --> " + theFile.toURL()); //System.exit(1); //end thePlayer = Manager.createPlayer(new URL("file:/C:/Documents and Settings/isc10466/My Documents/Video 1.avi")); //zj 0920 //end thePlayer.addControllerListener(this); iTime = (int) thePlayer.getMediaTime().getSeconds(); theTime = String.valueOf(iTime + " seconds @ zj"); currentTimeLabel.setText(theTime); mediaNameLabel = new JLabel(" " + theFile.getName()); mediaNameLabel.setFont(font); mediaNameLabel.setForeground(textColor); timePanel.add(currentTimeLabel); timePanel.add(mediaNameLabel); pane.add(timePanel); pack(); setVisible(true); thePlayer.start(); thePlayer.realize(); //thePlayer.setStopTime(t); GainControl gc = thePlayer.getGainControl(); //getDB() //System.out.println("zj @ start gaincontrol. getDB() --> " + gc.getDB()); //System.exit(1); } catch (MalformedURLException m) { dialogueBox(m.toString()); } catch (IOException i) { dialogueBox(i.toString()); } catch (NoPlayerException n) { dialogueBox(n.toString()); } } public void stop() { stop = true; thePlayer.stop(); thePlayer.close(); } public void actionPerformed(ActionEvent event) { setVisible(false); System.exit(0); } public void dialogueBox(String text) { JOptionPane.showMessageDialog(null,text," message",JOptionPane.INFORMATION_MESSAGE); } public static void main(String[] argv) { MPlayer p = new MPlayer(); } /* (non-Javadoc) * @see javax.media.ControllerListener#controllerUpdate(javax.media.ControllerEvent) */ /** * This controllerUpdate function must be defined in order to * implement a ControllerListener interface. This * function will be called whenever there is a media event */ public void controllerUpdate(ControllerEvent event) { Object controlComponent = null; // If we're getting messages from a dead player, // just leave if (thePlayer == null) return; // When the player is Realized, get the visual // and control components and add them to the Applet if (event instanceof RealizeCompleteEvent) { //if (progressBar != null) { //panel.remove(progressBar); //progressBar = null; System.out.println("Realized"); if (thePlayer.getVisualComponent() != null) { pane.add(thePlayer.getVisualComponent()); pane.add(thePlayer.getControlPanelComponent()); } GainControl gc = thePlayer.getGainControl(); //getDB() System.out.println("zj @ controllerUpdate gaincontrol. getDB() --> " + gc.getDB()); // Time t = new Time((double)10); //gc.setDB(-10.0f); gc.setLevel(0.5f); thePlayer.setStopTime(t); //System.exit(1); //stop(); System.out.println("zj @ controllerUpdate gaincontrol. getDB() --> " + gc.getDB()); updateGui(); } } /** * */ private void updateGui() { // TODO Auto-generated method stub double dt = 0; while (!stop) { try { Thread.sleep(500); dt = thePlayer.getMediaTime().getSeconds(); theTime = String.valueOf((int) dt + " secs"); currentTimeLabel.setText(theTime); System.out.println(dt); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } ++++++++++++++++ |
| All times are GMT -4. The time now is 5:15 pm. |
Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC