Reproducir video en Java

Java, a través de una serie de clases, proprorciona muchas facilidades a nivel de multimedia que permiten desarrollar aplicaciones multimedia muy poderosas.

Reproducir video en Java con Java Media Framework

Las cualidades de Java hizo que Sun Microsystems, Intel y Silicon Graphics trabajaran juntas para producir el API de multimedia llamado Java Media Framework (JMF). Usando JMF los programadores pueden crear aplicaciones que reproducen, editan y capturan muchis tipos flujos de diferenten extensiones.

IBM y Sun desarrollaron la ultima version de JMF (2.0) y ciertas especificaciones en la implementacion de JMF (JJMF 2.1.1e) que soporta formatos de multimedia como:

> Microsoft Audio/Video Interleave (.avi)

> Macromedia Flash 2 movies (.swf)

> Future Splash (.spl)

> MPEG Layer 3 Audio (.mp3)

> Musical Instrument Digital Interface (MIDI; .mid or .rmi extensions)

> MPEG-1 videos (.mpeg, .mpg)

> QuickTime (.mov)

> Sun Audio file format (.au extension)

> Macintosh AIFF file format (.aif or .aiff extension)

Actualmente, JMF esta disponible en su version mas reciente (2.1.1e) puede ser descargada en:

http://java.sun.com/products/java-media/jmf/2.1.1/download.html

Creando un reproductor de video

JMF ofrece una serio de mecanismos de reproduccion. Simplemente se debe usar las implementacions de los objetos de reproduccion declarados en el paquete package javax.media. En este paquete estan las clases que forma el JMF. Para reproducir un media clip lo primero que se debe hacer es declarar un obketo URL y darle referencia al clip. Entonces esa URL pasa como argumento al metodo estatico createRealizedPlayer de la clase Manager para optener el reproductor adecuado para este clip. En el codigo de abajo se declara un JPanel para demostrar el funcionamiento de algunos metodos.

Veamos un ejemplo completo donde se reproduce videos desde java. Se crea la clase MediaPanel que va a contener todos lo metodos de reproduccion necesarios. Luego en la clase MediaTest se instancia el JPanel y se lanza la aplicacion, aca tambien es donde se crea la URL de archivo multimedia para ser cargado.

package cliente;

/**
 *
 * @author manix
 */
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.io.IOException;
    import java.net.URL;
    import javax.media.CannotRealizeException;
    import javax.media.Manager;
    import javax.media.NoPlayerException;
    import javax.media.Player;
    import javax.swing.JPanel;

    public class MediaPanel extends JPanel
    {
       public MediaPanel( URL mediaURL )
       {
          setLayout( new BorderLayout() ); // use a BorderLayout

          // Uso de componentes sencillos
         Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, true );

          try
          {
             // crear un reproductor para la URl especifica
             Player mediaPlayer = Manager.createRealizedPlayer( mediaURL );

             // componentes de interfaz para el mostrar el video y controles
             Component video = mediaPlayer.getVisualComponent();
             Component controls = mediaPlayer.getControlPanelComponent();

             if ( video != null )
                // agragar el video al componente
                add( video, BorderLayout.CENTER );

             if ( controls != null )
                // agregar controles
                add( controls, BorderLayout.SOUTH );

             mediaPlayer.start(); //  reproducir el clip
          }
          catch ( NoPlayerException noPlayerException )
          {
             System.err.println( "No se encontro archivos de multimedia" );
          }
          catch ( CannotRealizeException cannotRealizeException ){
             System.err.println( "No se puede reconocer el reproductor" );
          }
          catch ( IOException iOException ){
             System.err.println( "Error al leer la fuente" );
          }
       }
    }


package cliente;

/**
 *
 * @author manix
 */
     import java.net.MalformedURLException;
     import java.net.URL;
     import javax.swing.JFileChooser;
     import javax.swing.JFrame;

     public class MediaTest
    {
       // lanzar aplicacion
       public static void main( String args[] )
       {
          JFileChooser fileChooser = new JFileChooser();

          int result = fileChooser.showOpenDialog( null );

          if ( result == JFileChooser.APPROVE_OPTION )
          {
             URL mediaURL = null;

             try
             {
                // tomar la URL
                mediaURL = fileChooser.getSelectedFile().toURL();
             }
             catch ( MalformedURLException malformedURLException )
            {
                System.err.println( "No se pudo crear la URL" );
             }

             if ( mediaURL != null )
             {
                JFrame mediaTest = new JFrame( "Media" );
                mediaTest.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

                MediaPanel mediaPanel = new MediaPanel( mediaURL );
                mediaTest.add( mediaPanel );

                mediaTest.setSize( 300, 300 );
                mediaTest.setVisible( true );
             }
          }
       }
    }

Si estas interesados en las fuentes aca las dejo:

MediaTest.java MediaPanel.java

61 comments

  1. No pude encontrar las librerias javax.media para probar el ejemplo…

  2. Simón

    He visto el ejemplo, pero no funciona con .MOV y .AVI, me saca un error ahí, solo me ha funcionado con MPEG.

    ¿No soporta esos formatos?

    Y yo que necesito hacer un trabajo :S

    • Q: What media types does JMF 2.1.1 support?

      JMF 2.1.1 supports a wide array of media types, including

      protocols: FILE, HTTP, FTP, RTP
      audio: AIFF, AU, AVI, GSM, MIDI, MP2, MP3*, QT, RMF, WAV
      video: AVI, MPEG-1, QT, H.261, H.263
      other: HotMedia

      *MP3 is supported only on the Windows platform.

  3. Pude compilar el código y montar el video.
    En la consola se aprecia:

    file:/C:/Vid.mpg
    Unable to handle format: MPEG, 640×350, FrameRate=25.0, Length=336000
    Unable to handle format: mpegaudio, 48000.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 40000.0 frame rate, FrameSi
    ze=32768 bits

    pero en el panel solo aparecen los controles y la barra que señala el progreso del video avanza, pero no logro visualizar en si el video.

    ¿Alguna idea?

    • Intenta con un video que tenga un FrameRate igual a 12 o menor. Luego me cuentas como te va

Leave a Reply