Oct 9, 2012

Simple JMF Media Player

JMF Media PlayerThis is simple Java Media Player using JMF library. It opens a MPEG file file from directory and plays it. JMF comes with visual component and media controls that can be embedded into into the AWT or Swing components. we need to implement the ControllerListener interface for handling asynchronous events generated by the media Controllers. The controllerUpdate(ControllerEvent event) method is called when an event is generated by a Controller that the listener to it registered.
package codecypherprojects;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.media.*;
import javax.swing.*;
import javax.swing.plaf.metal.MetalLookAndFeel;

/**
 *
 * @author Khamis
 * 
 */

public class JMFMediaPlayer extends JFrame{
    

private Component visual_component;
private Player player;

//specify you correct media file dir 
private String file_dir = "file:///media/file_name.mpg";
 
 
 public JMFMediaPlayer() throws MalformedURLException{
    
     super("Simple JMF Media Player");
 
     setSize(400,300);
     setPlayerLocation();
     
     addWindowListener(new WindowAdapter(){  
         
            public void windowClosing(WindowEvent evt){
               System.exit(0);
            }
     });
 
     setContentPane(new MediaCreator(new URL(file_dir)));
     setVisible(true);
  }

  private void setPlayerLocation() {
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frame = this.getSize();
        
        int x = (int)(screen.getWidth() - frame.getWidth())/2;
        int y = (int)(screen.getHeight() - frame.getHeight())/2 - 50;
        
        this.setLocation(x, y);
    }

    class MediaCreator extends JPanel implements ControllerListener{

    private URL url; 

    public MediaCreator(URL media_file){
        url = media_file;  
    try{
        
        player = Manager.createPlayer(url);
        player.addControllerListener(this);
        player.realize();
        player.start(); 
        
    }catch(NoPlayerException e){
        e.printStackTrace();
    }catch(MalformedURLException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }
   }
 
   public void paintComponent(Graphics g){     
       super.paintComponent(g);
   }

   public void controllerUpdate(ControllerEvent ce){
     
     if(player == null){    
        return;
   }
   
   if(ce instanceof RealizeCompleteEvent){
       
       visual_component = player.getVisualComponent();
      
       if(visual_component  != null){
          
           add(visual_component);
       }
     }
   }
 }

 public static void main(String[] args) throws IllegalAccessException,
         ClassNotFoundException, InstantiationException{
     
        try {
        
              try{
                    UIManager.setLookAndFeel(
                    UIManager.getCrossPlatformLookAndFeelClassName());
               }catch(UnsupportedLookAndFeelException e){
                    e.printStackTrace();
              }        
                    new JMFMediaPlayer();
                 
         }catch (MalformedURLException ex){
            
                   ex.printStackTrace();
        }
    }
}

Related Posts 

 

3 comments:

  1. Replies
    1. This is where I placed the Video URL "file:///media/file_name.mpg";
      calling: new MediaCreator(new URL(file_dir)) bootstraps the video object ready to be initialized.
      player = Manager.createPlayer(url);
      player.addControllerListener(this);
      player.realize();
      player.start();
      opens the URL, loads visual controls and start the player.

      Delete
    2. setPlayerLocation() place the video exactly where we want it and how big we want it.

      Delete