Reproductor de Video con Java Media Framework 1

Reproductor de Video con Java Media Framework – Codigo Fuente

En este Articulo aprenderas a realizar un reproductor de video con java media framework, que es una libreria de java que proporciona a los applets y aplicaciones de java la capacidad de reproducir y capturar video, video y otros contenidos multimedia, tambien permite transmitir y recibir en tiempo real. En este articulo veremos como realizar los ajuster necesarios basicos para poner en marcha la libreria y realizar un sencillo reproductor de video con java media framework, tambien te presentaremos el codigo fuente de el ejemplo para que analizes todo el codigo, comencemos…

Requerimientos:

Desarrollo

  • Preparaciones

Antes de comenzar a desarrollar el reproductor de Video con JAVA MEDIA FRAMEWORK Lo primero es descargar la libreria JMF desde el link en la seccion de requerimientos, una vez descargado ejecutamos el exe (en el area de descargas selecccionamos el archivo exe, este tutorial esta enfocado en windows) e instalamos, aceptamos la licencia, seleccionamos la ruta de instalacion, dejamos marcadas las opciones por defecto, esperamos, finalizamos y reiniciamos.

  • Explicacion

Para manejar multimedia con java media framework necesitamos importar clases de el paquete javax.media.*; en especial hablamos de dos clases: Player y Component.
La clase player la utilizaremos para crear un reproductor, en este caso un reproductor de video, al cual le paseremos un MediaLocator el cual indicara la ruta de el elemento multimedia a reproducir.
La clase Component indicara un elemento multimedia que en este caso podra ser un Componente de video, donde mediante el reproductor que crearemos (player) obtendremos el componente visual, esto es la vista del video, tambien necesitaremos otro componente para almacenar el componente de controles el cual tambien obtenemos de el reproductor (player).

Una vez obtenidos los componentes visuales de video y controles simplemente los agregamos a nuestro programa y reproducimos el elemento multimedia mediante la instruccion al reproductor player «start()».

  • Codigo Fuente

Clase Main

Clase Ventana

Nota: Cambia la URL de el elemento multimedia por uno tuyo en tu PC

Ahora al ejecutar se mostrara el video seleccionado
Reproductor de Video con Java Media Framework 1

Resultado

Puedes ver un post más actualizado con soporte a mas formatos de audio y video en: reproductor de video con java

Visto – Reproductor de Video con Java Media Framework – Codigo Fuente

Clic para valorar esta información
[Total: 0 Promedio: 0]

67 comentarios en “Reproductor de Video con Java Media Framework – Codigo Fuente”

  1. Hola Jesus, primero felicitarte por tu aporte.
    Queria preguntarte tu codigo funciona para sistemas operativos de 64 bits?… Lo aplico y me dan los siguientes errore

    SEVERE: null
    java.net.MalformedURLException: unknown protocol: c
    at java.net.URL.(URL.java:593)

    SEVERE: null
    java.lang.NullPointerException
    at javax.media.MediaLocator.(MediaLocator.java:37)

    Responder
  2. Amigo que hacer si me sale esto??

    Unable to handle format: MPEG, 480×320, FrameRate=25.0, Length=230400
    nov 08, 2015 10:46:13 AM clasevideo.Ventana init
    GRAVE: null
    java.lang.NullPointerException
    at clasevideo.Ventana.init(Ventana.java:52)
    at clasevideo.Ventana.(Ventana.java:35)
    at clasevideo.Main.main(Main.java:18)

    Responder
  3. Hola una pregunta cuando tienes y colocas tu URL a mi no me reproduce el video me sale este mensaje::BUILD SUCCESSFUL (total time: 3 seconds)
    :/ por fas espero con mucha esperanza una respuesta….

    Responder
  4. disculpa una pregunta me marca este error cual es la causa te agradeceria mucho que me pudieras ayudar
    Unable to handle format: MPEG, 854×480, FrameRate=25.0, Length=614880
    abr 20, 2015 10:02:47 PM video.Ventana init
    GRAVE: null

    Responder
  5. Hola, buenas noches.

    Oye, que puedo utilizar para repetir el video que se terminó de reproducir??

    Espero que puedas ayudarme…Gracias

    Responder
    • Hola ivan,

      Intenta añadir un ControllerListener, cuando la reproduccion se termina un evento EndOfMediaEvent es llamado, ahi establece el tiempo de reproduccion a cero de nuevo con setMediaTime()

      Saludos!

    • Hola muy bueno tu articulo pero veras tengo un problema con la parte de los import.javax me marca error y no corre el programa podrias ayudarme a resolver esto porfavor

  6. hola amigo gracias por contartir el codigo bueno le escribo aver si me puede ayudar 🙂
    tengo el archivo MPG en mi escritoria y use este codigo:
    url = new URL(«file:///C:/Users/EDS7J/Desktop/epica.MPG»);

    la cosa es que me marca error 🙁

    Responder
  7. hola amigo oye una pregunta, anteriormente ya habia funcionado este proyecto en netbeans 7.1.2 ahora lo actualice y al momento de reproducir el mismo video dice que el .mpeg no funciona, podrias ayudarme por favor

    Responder
  8. Hola, que pena es que he tenido un problema al ejecutar tu código me sale «LINEAR, Unknown Sample Rate

    * out *

    LINEAR, 8000.0 Hz, 16-bit, Stereo, LittleEndian, Signed, class [S», no se si sea mucha molestia, tal vez puedas hacer un pequeño tutorial, desde que instalas JMF, para saber si exactamente cometí algún error en la instalación o ya sea otro tipo de error.

    Responder
  9. hola men tengo un pregunta como hago para leer un archivo en cualquier computador, pero lo que sucede es que me toca ir al código fuente y cambiar la dirección file:///C:/Users/Jonathan/Desktop/Wildlife.MPG» y quisiera que fuera como hago con las imágenes que solo pongo el archivo dentro del proyecto y la dirección quedaría así «Wildlife.MPG» pero me sale error y no entiendo el porque, porfa men ayúdeme con esto se lo agrade seria mucho.

    Responder
    • Hola, disculpas por revivir este hilo. Bueno el motivo de este comentario era para preguntar de que manera añadiste el código anteriormente mencionado por Jonatha Melgoza ya que tengo tu mismo inconveniente. Yo intente con lo siguiente:
      String Dir = System.getProperty(«user.dir»+ «/U1T1»);
      // U1T1 es el nombre del video.
      Luego en la parte de la url lo coloque asi.
      url = new URL(Dir);

      Al momento de compilar y ejecutar el vídeo me arroja el siguiente error:

      ene 04, 2016 5:38:21 PM matematicas.Decimos.Unidad1.Ventana init
      GRAVE: null
      java.net.MalformedURLException
      at java.net.URL.(URL.java:620)
      at java.net.URL.(URL.java:483)
      at java.net.URL.(URL.java:432)
      at matematicas.Decimos.Unidad1.Ventana.init(Ventana.java:56)
      at matematicas.Decimos.Unidad1.Ventana.(Ventana.java:45)
      at matematicas.Decimos.Unidad1.Tema1.jButton3ActionPerformed(Tema1.java:693)
      at matematicas.Decimos.Unidad1.Tema1.access$3100(Tema1.java:19)
      at matematicas.Decimos.Unidad1.Tema1$32.actionPerformed(Tema1.java:514)
      at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
      at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
      at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
      at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
      at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
      at java.awt.Component.processMouseEvent(Component.java:6535)
      at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
      at java.awt.Component.processEvent(Component.java:6300)
      at java.awt.Container.processEvent(Container.java:2236)
      at java.awt.Component.dispatchEventImpl(Component.java:4891)
      at java.awt.Container.dispatchEventImpl(Container.java:2294)
      at java.awt.Component.dispatchEvent(Component.java:4713)
      at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
      at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
      at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
      at java.awt.Container.dispatchEventImpl(Container.java:2280)
      at java.awt.Window.dispatchEventImpl(Window.java:2750)
      at java.awt.Component.dispatchEvent(Component.java:4713)
      at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
      at java.awt.EventQueue.access$500(EventQueue.java:97)
      at java.awt.EventQueue$3.run(EventQueue.java:709)
      at java.awt.EventQueue$3.run(EventQueue.java:703)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
      at java.awt.EventQueue$4.run(EventQueue.java:731)
      at java.awt.EventQueue$4.run(EventQueue.java:729)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
      at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
      at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
      Caused by: java.lang.NullPointerException
      at java.net.URL.(URL.java:525)
      … 43 more

    • Disculpas nuevamente, ya lo resolví, solo había que adaptar la ruta de la url para que la reconozca y no arroje la excepción.

      url = new URL(«file:///»+directorio+»\\Resourses\\U1T1.mpg»);

  10. hola necesito reproducir varios videos un un solo video ya prove con jmf pero solo me reproduce un solo video es que necesito que cuando escriba en el texarea varias palabras me muestre dentro de la interfaz un reproductor de video mostrandome esos video en uno solo

    Responder
    • Hola Jonathan me sirvió bastante tu tutorial, pero tengo una duda ¿cómo podría realizar una lista de reproducción de videos, que al momento en que termine de reproducir un video, instantáneamente se reproduzca el siguiente?, gracias

    • Hola, ya me salio la lista de reproducción, pero con un problema, el primer video me reproduce bien pero al momento de reproducir el siguiente se antepone al panel del primer video y así sucesivamente con los demás videos

    • hola gracias por tu
      atencion mira tengo la interfaz hecha en netbeans y tengo un textarea donde
      escribo un texto esas palabras cada una tiene su video correspondiente ese
      video hace la seña en lengua de señas de la respectiva palabra. cuando escribo una palabra doy clik en un boton me muestra el reproductor en
      el jpaneldevideo la respectiva traducción bueno hasta hay todo esta bien. pero
      necesito que cuando escriba varias palabras osea un texto ejemplo hola sordo colegio
      le doy clik a un boton y me muestre en el jpaneldevideo el reproductor de video
      reproduciendo esas palabras osea que me muestre el video del ejemplo anterior hola cuando
      termine esa me muestre enseguida el otro video sordo cuando termine esta me muestre el video colegio. si es una lista de reproduccion
      mira este es el codigo que tengo MIL GRACIAS POR TU ATENCION QUE DIOS TE BENDIGA

      package gui;

      import java.awt.Dimension;

      import java.io.IOException;

      import java.net.MalformedURLException;

      import java.net.URL;

      import java.util.ArrayList;

      import java.util.logging.Level;

      import java.util.logging.Logger;

      import javax.media.Player;

      import javax.swing.JOptionPane;

      import traductor.GestorArchivos;

      import traductor.Traductor;

      public class Gui extends javax.swing.JFrame {

      /**

      * Creates new form Gui

      */

      private Traductor td;

      private GestorArchivos g;

      public Gui() {

      initComponents();

      td = new Traductor();

      g = new GestorArchivos();

      }

      public String espacio() {

      Gui h = new Gui();

      String a = textArea.getText().toUpperCase();

      return a;

      }

      private void botonTraducirActionPerformed(java.awt.event.ActionEvent evt) {

      // TODO add your handling code here:

      String texto = textArea.getText().toUpperCase();

      if (!texto.equalsIgnoreCase(«»)) {

      String[] dividirTexto = td.dividirTexto(texto);

      td.generarSecuencia(dividirTexto);

      //String text = «»;

      //// //////////////////////////////////////////////////////////////

      aca me reproducia un texto pero me muestra el reproductor por fuera de la interfaz y necesito que el reproductor quede dentro de la interfaz

      /*

      try {

      File file = new File («C://Traductor//Traduccion//LReproduccion.wpl»);

      Desktop.getDesktop().open(file);

      } catch (IOException e) {

      e.printStackTrace();

      } */

      // reproductor e = new reproductor();

      // e.show();

      //////////////////////////////////////////////////////////////////////

      aca comienza lo que me esta funcionando

      try {

      //controles de reproduccion

      //se crea un url para especificar el archivo a reproducir

      //esto solo por el momento

      URL url = null;

      //se capturan las dimensiones del contenedor, en este caso se llama pantalla

      Dimension d = new Dimension(PanelVideo.getWidth(), PanelVideo.getHeight());

      ArrayList lista = new ArrayList();

      for (String palabra : dividirTexto) {

      url = new URL(«file:/C:/Traductor/BibliotecaSenas/» + palabra.trim() + «.mpg»);

      lista.add(url);

      }

      for (URL ruta : lista) {

      //ahora se crea una referencia al objeto

      paneldevideo video = new paneldevideo(ruta, d);

      //para terminar añadimos al JPanel

      PanelVideo.add(video);

      PanelVideo.setVisible(true);

      }

      } catch (MalformedURLException ex) {

      Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);

      } catch (IOException ex) {

      Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);

      }

      //////////////////////////////////////////////////////////////////////

      } else {

      JOptionPane.showMessageDialog(this, «Primero escriba algun texto para realizar la traduccion»);

      }

      }

      ESTA ES LA CLASE paneldevideo.java

      package gui;

      import java.awt.Component;

      import java.awt.Dimension;

      import java.io.IOException;

      import java.net.URL;

      import java.util.ArrayList;

      import java.util.logging.Level;

      import java.util.logging.Logger;

      import javax.media.CannotRealizeException;

      import javax.media.Manager;

      import javax.media.NoPlayerException;

      import javax.media.Player;

      import javax.swing.JPanel;

      /**

      *

      */

      //la clase se extiende de un JPanel para heredar sus atributos —

      public class paneldevideo extends javax.swing.JPanel{

      private Player mediaPlayer = null;

      private Component controls;

      private Component video2;

      /**

      *

      * @param mediaURL

      * @param d

      */

      public paneldevideo(URL mediaURL, Dimension d) {

      Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true);

      try {

      // crea un reproductor especificando la direccion del archivo

      mediaPlayer = Manager.createRealizedPlayer(mediaURL);

      // optiene los componentes del video

      video2 = mediaPlayer.getVisualComponent();

      video2.setSize(d.width, d.height);

      video2.setVisible(true);

      //optiene los componentes de control del reproductor

      controls = mediaPlayer.getControlPanelComponent();

      controls.setSize(d.width, 24);

      if (video2 != null) {

      add(video2); //agrega el componente del reproductor al panel

      }

      mediaPlayer.start(); // comienza la reproduccion

      } // fin try

      catch (NoPlayerException noPlayerException) {

      System.err.println(«No se encontro medio disponible, osea no se reproduce archivo»);

      } // fin catch

      catch (CannotRealizeException cannotRealizeException) {

      System.err.println(«no se pudo realizar el reproductor»);

      } // fin catch

      catch (IOException iOException) {

      System.err.println(«Error de lectura del archivo»);

      } // fin catch

      }

      /**

      *

      * @param listaReproduccion

      * @param d

      */

      public paneldevideo(ArrayList listaReproduccion, Dimension d) {

      Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true);

      for (URL mediaURL : listaReproduccion) {

      try {

      // crea un reproductor especificando la direccion del archivo

      mediaPlayer = Manager.createRealizedPlayer(mediaURL);

      // optiene los componentes del video

      Component video2 = mediaPlayer.getVisualComponent();

      video2.setSize(d.width, d.height);

      video2.setVisible(true);

      //optiene los componentes de control del reproductor

      controls = mediaPlayer.getControlPanelComponent();

      controls.setSize(d.width, 24);

      // if (video2 != null) {

      // add(video2); //agrega el componente del reproductor al panel

      // }

      mediaPlayer.start(); // comienza la reproduccion

      } // fin try

      catch (NoPlayerException noPlayerException) {

      System.err.println(«No se encontro medio disponible, osea no se reproduce archivo»);

      } // fin catch

      catch (CannotRealizeException cannotRealizeException) {

      System.err.println(«no se pudo realizar el reproductor»);

      } // fin catch

      catch (IOException iOException) {

      System.err.println(«Error de lectura del archivo»);

      } // fin catch

      }

      }

      public Component controles() {

      return controls;

      }

      public Component controles(Dimension d) {

      controls.setSize(d);

      return controls;

      }

      }

    • Hola Yuli,

      Perdona por la tardanza pero es que entre mi trabajo, este blog, otros proyectos y dias festivos no me doy abasto :/ voy a revisar tu codigo en cuanto pueda y si puedo ayudarte en algo asi lo hare..

      Saludos!

    • bueno le agradeceria de todo corazon porque necesito terminar eso es lo que me falta que dios lo bendiga por su atencion espero que me pueda colaborar espero su respuesta pronto gracias

  11. Hola!muy buenas.Mira estoy haciendo un videojuego y queria poner un video en un JPanel.El problema esta que solo me reproduce el sonido del video,y si es en mpeg,los demas me saltan excepciones.Sabrias porque puede ser?me sería de gran ayuda.Gracias de antemano!

    Responder
  12. Hola Jonathan!! fijate que me marca este error:

    Unable to handle format: DX50, 672×288, FrameRate=25.0, Length=580608 0 extra bytes

    Unable to handle format: mpeglayer3, 48000.0 Hz, 0-bit, Stereo, Unsigned, 32000.0 frame rate, FrameSize=8 bits

    Failed to realize: com.sun.media.PlaybackEngine@26d560

    Error: Unable to realize com.sun.media.PlaybackEngine@26d560

    dic 08, 2013 2:01:25 PM Ventana init

    SEVERE: null

    me puedes apoyar? Te agradeceria!!

    Responder
  13. Hola disculpa no me aparece la libreria jmf.rar

    ya tengo instalado el Java Media Framework 2.1.1.e, ya se reinicio mi maquina y aun no me aparece esa libreria :/ como le hago?

    Responder
    • Hola Pedro,

      Ehh cual libreria no te aparece? la de descargar desde la pagina de oracle? no se a que te refieres con que no te aparece.. Una vez descargada Java Media Framework desde la pagina de Oracle e instalada y reiniciada tu makina es solo cosa de empezar a programar, no necesitas agregar alguna libreria a tu proyecto..

      Saludos!

    • estas son las librerias que no me salen :/ el javax el el problema :/
      import javax.media.CannotRealizeException;
      import javax.media.Manager;
      import javax.media.MediaLocator;
      import javax.media.NoPlayerException;
      import javax.media.Player;

      impo

    • Hola pedro,

      Si no te las importa automaticamente entonces necesitaras hacerlo tu, ve a tu carpeta donde se instalo JMF y encontraras una carpeta llamada lib, dentro encontraras los jar ( librerias ) que tendras que agregar a tu proyecto, si usas netbeans en el panel izquierdo en tu proyecto abajo encontraras el nodo de librerias, boton derecho y selecciona add Jar/Folder y selecciona tus librerias ..

      Saludos!

    • ya lo hice pero nada de nada segun esto necesito el package media ese como lo consigo o como lo hago?? porque no me sale

      tines algun correro donde te pueda contactar y mandarte las imagenes o mi proyecto para cheques por que no me sale?

  14. Hola me a ayudado mucho tu ejemplo, pero me a saltado un problema, al yo seleccionar la ruta del video que es de formato .MPG y corrido el programa (si tengo instalado el Java Media Framework 2.1.1.e, y le agregue la libreria jmf.rar al programa para poder quitar los errores de importacion de javax) me salta un error que es el siguiente:

    Unable to handle format: MPEG, 640×480, FrameRate=25.0, Length=460800

    nov 15, 2013 5:58:55 PM videoprueba.Ventana init

    SEVERE: null

    java.lang.NullPointerException

    at videoprueba.Ventana.init(Ventana.java:48)

    at videoprueba.Ventana.(Ventana.java:31)

    at videoprueba.Videoprueba.main(Videoprueba.java:6)

    Me podrias ayudar en como arreglar esto?

    Responder
    • Hola Jesus,

      Se me ocurre que podrias agregar el codigo para pasar al siguiente recurso dentro de el evento de terminacion de el player. Solo Agrega el controlador a tu player:

      player.addControllerListener(new ControllerListener(){
      @Override
      public void controllerUpdate(ControllerEvent ce) {
      if(ce instanceof EndOfMediaEvent){
      System.out.println(«Termina de reproducir»);
      }
      }
      });

      Tambien puedes enterarte de otros eventos, como:

      ControllerEvent
      AudioDeviceUnavailableEvent
      CachingControlEvent
      ControllerClosedEvent
      ControllerErrorEvent
      ConnectionErrorEvent
      InternalErrorEvent
      ResourceUnavailableEvent
      DataLostErrorEvent
      DurationUpdateEvent
      FormatChangeEvent
      SizeChangeEvent
      MediaTimeSetEvent
      RateChangeEvent
      StopTimeChangeEvent
      TransitionEvent
      ConfigureCompleteEvent
      RealizeCompleteEvent
      PrefetchCompleteEvent
      StartEvent
      StopEvent
      DataStarvedEvent
      DeallocateEvent
      EndOfMediaEvent
      RestartingEvent
      StopAtTimeEvent
      StopByRequestEvent

      Saludos.

    • Primero agradecer la atención y pronta respuesta a mi consulta.

      Pues voy a hacer lo que me sugieres y estudiar los eventos que mencionas.

      …y de nuevo gracias.

Deja un comentario