VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ es un proyecto que permite trabajar con una instancia de VLC en java.
En este tutorial construiremos un reproductor de videos usando la librería VLCJ y librerías de VLC con el IDE Netbeans, nuestro reproductor sera capaz de abrir un archivo de video (MP4, 3GP, Dat, webm), contara con los controles básicos (PLAY, PAUSE, STOP, MUTE) se usaran slider para mostrar el avance en la reproducción del video así como modificar el punto de reproducción moviendo el slider, finalmente se podrá sacar capturas del video en cualquier punto de reproducción.
Necesitamos
Tiempo 30 minutos
Nivel: Intermedio
Paso 1: VLCJ/JNA
La librería VLCJ requiere de la librería JNA (Java Native Access), la librería JNA nos permite tener acceso las bibliotecas compartidas nativas del sistema operativo sin usar la interfaz nativa de Java. En este tutorial, usaremos la versión de VLC 2.4.1 y JNA 3.5.1, cada versión de VLCJ requiere una versión diferente de JNA, para evitar problemas se recomienda revisar la documentación de VLCJ.
Descarga estas librerías e instala en Netbeans.
Paso 2. Archivos DLL
Necesitamos las librerías libvlc.dll y libvlccore.dll de VLC, estas por defecto se encuentran en «C:\Program Files\VideoLAN\VLC\», así que si no tienes el reproductor, debes descargar e instalar en tu pc.
Paso 3. Proyecto java
Abre netbeans y crea un nuevo proyecto que se llamara «DemoVLCJ» dale la siguiente estructura, añade un JFrame llamado «Reproductor«, añade las librerías JNA y VLCJ
Paso 4. Interfaz de usuario
Abre el jframe «Reproductor» en modo diseño y toma tu tiempo en crear la interfaz como la siguiente imagen:
Importante: los nombres de cada control deben estar escritos como en la imagen.
Paso 4. Codificación
Abre el jframe en modo código «Source» .
Debes agregar los siguientes import:
import com.sun.jna.Native; import com.sun.jna.NativeLibrary; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import javax.swing.AbstractButton; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.filechooser.FileNameExtensionFilter; import uk.co.caprica.vlcj.binding.LibVlc; import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent; import uk.co.caprica.vlcj.player.MediaPlayer; import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter; import uk.co.caprica.vlcj.runtime.RuntimeUtil;
Se declaran las siguientes variables antes del constructor de clase:
private EmbeddedMediaPlayerComponent player; private File file; static{ NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC\\"); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); } //bandera para controlar la reproduccion de video y el cambio en el avance de video private boolean band = true;
podemos observar que indicamos la ruta de los archivos DLL para que estos sean cargados en el proyecto, si tienes instalado el VLC en otra dirección, debes modificar esta variable.
en estos momentos tenemos el constructor de clase vacío, es decir:
public Reproductor() { initComponents(); //codigo aqui }
Es en este constructor donde escribiremos todo el código necesario para hacer funcionar el reproductor
Primero declaramos algunas propiedades del proyecto y agregamos el PLAYER a un contenedor
setTitle("VLCJ Player");//nombre de reproductor setLocationRelativeTo(null);//centrar en pantalla player = new EmbeddedMediaPlayerComponent(); //se añade reproductor jPanel2.add(player); player.setSize(jPanel2.getSize()); player.setVisible(true); //slider control de volumen sldVolumen.setMinimum(0); sldVolumen.setMaximum(100); //slider control progreso sldProgress.setMinimum(0); sldProgress.setMaximum(100); sldProgress.setValue(0); sldProgress.setEnabled(false);
Finalmente agregamos los eventos para cada control del reproductor
//Control abrir archivo btnOpenFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("Videos", "mp4","flv","webm","3gp","dat"); fileChooser.addChoosableFileFilter(filter); //fileChooser.setCurrentDirectory(new java.io.File("C:\\videos\\tmp\\")); if ( fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION ){ file = fileChooser.getSelectedFile(); btnPlay.doClick(); } } }); //Control captura de ventana btnSnapshot.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(file!=null){ String absolutePath = file.getAbsolutePath(); String newPath = absolutePath .substring(0, absolutePath .length()-4) + "_" + System.currentTimeMillis() + ".png"; if( player.getMediaPlayer().saveSnapshot(new File(newPath)) ) JOptionPane.showMessageDialog(null, "Snapshot: " + newPath ); } } }); //Control de reproduccion btnPlay.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (file!=null){ player.getMediaPlayer().playMedia(file.getAbsolutePath()); sldVolumen.setValue( player.getMediaPlayer().getVolume() ); sldProgress.setEnabled(true); setTitle( file.getName() + " - VLCJ Player"); } } }); //Control de pausa btnPause.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player.getMediaPlayer().setPause( player.getMediaPlayer().isPlaying()?true:false ); } }); //Control detener reproduccion btnStop.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { player.getMediaPlayer().stop(); sldProgress.setValue(0); sldProgress.setEnabled(false); setTitle("VLCJ Player"); } }); //Control silenciar btnMute.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { AbstractButton abstractButton = (AbstractButton) actionEvent.getSource(); player.getMediaPlayer().mute( abstractButton.getModel().isSelected() ); } }); //Control slider cambiar volumen sldVolumen.addChangeListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent e) { Object source = e.getSource(); player.getMediaPlayer().setVolume( ((JSlider) source).getValue() ); } }); //Listener de reproductor para mostrar el progreso en la reproduccion del video player.getMediaPlayer().addMediaPlayerEventListener(new MediaPlayerEventAdapter() { @Override public void positionChanged(MediaPlayer mp, float pos) { if(band){ int value = Math.min(100, Math.round(pos * 100.0f)); sldProgress.setValue(value); } } @Override public void finished(MediaPlayer mediaPlayer){ } }); //Listener para el slider progress sldProgress.addMouseListener(new MouseListener(){ @Override public void mouseClicked(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) { band= false; } @Override public void mouseReleased(MouseEvent e) { band = true; } @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} }); //Control para cambiar a posicion de reproduccion sldProgress.addChangeListener(new ChangeListener(){ @Override public synchronized void stateChanged(ChangeEvent e) { if( !band ){ Object source = e.getSource(); float np = ((JSlider) source).getValue() / 100f; player.getMediaPlayer().setPosition(np); } } });
Si no marca ningún error, ejecuta el reproductor y a disfrutar 🙂 caso contrario revisa que los nombres de los controles sean los mismos que los de este proyecto, revisa también que las librerias jar sean las mismas que los de este proyecto.
Código fuente: reproductor VLCJ
enjoy!!!
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Los gráficos de torta, también llamados gráficos de 360 grados o circulares, son gráficos estadísticos que se utilizan p...
Este 2019 se implementara en Bolivia un nuevo Sistema de Facturación Electrónica con nuevas características y medidas de...
Magic Button, es un botón animado para android bajo licencia del MIT desarrollado por Bloder (Brasil), el proyecto esta...
Aplicación en Java realida con el IDE de Netbeans 6.9 para trabajar con images en Base de Datos en Access 2003, el progr...
En post anteriores vimos lo que son los parámetros IN y los parámetros OUT pero existe otro tipo de parámetro que es la...
Repl.it es un proyecto de tres jóvenes emprendedores (Amjad, Haya, Maso), es un compilador en linea el cual te permite p...
Los comentarios estan cerrados
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...
Bastante interesante para mi que estoy aprendiendo java. Excelente aporte
Hola,
muy interesante tu articulo sobre vlcj. Tengo una pregunta he probado tu implementación y funciona perfectamente pero intento implementarlo para un código mio pero si no pongo Design no me funciona he realizado diferentes pruebas y no me salgo del error que me da. Has realizado pruebas solo con JFrame.
Gracias de antemano y espero tu respuesta.
no lo probé a profundidad la mayoría de la documentacion esta en ingles
Y si quisiera que al iniciar ya tenga una ruta del video predeterminada? como hago eso?? ayudame por favor
Pues le das la URL del archivo directamente
Hola disculpa estoy utilizando el código para un proyecto. Los videos los tengo en la carpeta SRC/RECURSOS ya sale todo, pero al momento de crear el .jar no se reproduce los videos. Me podrías ayudar por favor
Hola, si tus archivos están dentro el JAR debes fijarte q la ruta sea la correcta, cuando creas el JAR cambia la direccion no es la misma que cuando ejecutas desde el IDE, te recomiendo que si tus archivos son grandes no los empaquetes en el JAR sino llamalos desde en un directorio aparte
Netbeans sale este error:
java.lang.UnsatisfiedLinkError: Unable to load library ‘libvlc’: No se puede encontrar el módulo especificado.
el error te dice todo: «No se puede encontrar el módulo especificado»
buenas tardes
si me puede ayudar no me ejecuta me sale un error en
at com.vlcj.demo.Reproductor.(Reproductor.java:29)
ya descargue el vlc copie la ruta en donde se aloja el programa C:\Program Files (x86)\VideoLAN\VLC y todo pero la falla persiste que puede ser en este caso, y el error no lo muestra en la linea de codigo donde se aloja la ruta si no es en lla siguiente linea de codigo la que esta dejo de la linea de codigo de la ruta
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
agradesco su respuesta
Como se podria añadir una funcion para insertar subtitulos