Reproducir un video en java no es imposible menos tan complicado como parece, ademas java nos proporciona herramientas para desarrollar nuestras aplicaciones. Basta de charla y vamos a lo que interesa.
¿que necesitamos?
Necesitamos el API multimedia de java llamado Java Media Framework, descargate la ultima version de su pagina, instalalo y reinicia la pc.
Netbeans claro, sera nuestra herramienta para desarrollar la aplicacion de prueba.
Un archivo de video con extension MPG, segun lei, la api de java JMF es capaz de reproducir varios tipos de formatos, en mi caso solo reprodujo MPG y MP3, las causas no lo se aun.
El reproductor
El reproductor consta de una clase (ESTA SE DEBE CREAR FILE-> NEWFILE -> EMPTY JAVA FILE) y se copia el codigo abajo y se coloca como nombre al archivo: videopanel.java encargada de crear el objeto reproductor y de una clase reproductor,java, nuestra interfaz.
Codigo fuente
Clase videopanel.java
package videojava;
import java.awt.Component;
import java.awt.Dimension;
import java.io.IOException;
import java.net.URL;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
/**
* @web http://jc-mouse.blogspot.com/
* @author mouse
*/
public class videopanel extends javax.swing.JPanel {
private Player mediaPlayer;
private Component controls;
public videopanel(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
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;
}
}
Esta clase hace uso del API JMF y la extiende hasta un objeto, en este caso un jPanel, pasando como referencias la URL del video en cuestion, tratando de capturar los errores que se pudieran encontrar en el proceso, el codigo esta por demas comentado y creo que se entiende.
La interfaz
La interfaz del reproductor es sencilla, consta de un jpanel pantalla, lugar donde insertaremos el video, un jpanel control donde se localizara los controles del reproductor, jButton abrir y jTextfiel txturl
Las partes mas importantes del codigo son:
Este codigo debe añadirse en el objeto jButton "abrir" con el evento ActionPerformed, lo que hace es llamar a una ventana de dialogo para buscar el archivo y luego inicializar los objetos reproductor y controles
URL mediaURL = null;
videopanel mediaPanel;
private void abrirActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(null);
if ( result == JFileChooser.APPROVE_OPTION ){
try {
//se asigna a mediaURL el archivo de video seleccionado
mediaURL = fileChooser.getSelectedFile().toURL();
txturl.setText("" + mediaURL);
//se obtiene el tamaño del panel de video
Dimension dp = new Dimension(pantalla.getWidth(), pantalla.getHeight());
//se crea el reproductor pasando como parametros
// el archivo y dimensiones
mediaPanel = new videopanel( mediaURL ,dp );
pantalla.add(mediaPanel);
pantalla.setVisible(true);
//se obtiene dimensiones del contenedor de los controles
// y se pasa como parametro para crear los controles de reproduccion
Dimension d = new Dimension(control.getWidth(),control.getHeight());
control.add(mediaPanel.controles(d));
control.setVisible(true);
}
catch (IOException ex) {
Logger.getLogger(reproductor.class.getName()).log(Level.SEVERE, null, ex);
}
}
}