Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

18/12/09

Reproducir video en java y netbeans con Java Media Framework

JAN29

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 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);
            } 
        }
    }                



Para descargarte el proyecto de ejemplo
Click para descargar

43 comentarios:

Anónimo dijo...

Gracias...lo pruebo y comento!!

Salu2!

Sergio dijo...

Funciona de maravilla como aplicación...lastimosamente no sirve como applet...me tire un buen tiempo convirtiendolo...y al final el JFileChooser no se carga en el navegador por ende nunca reproduce.

pero creo que creando un metodo como el getURL y pasandole la dirección directamente sin tener que abrir el dialogo para escoger el archivo debe funcionar en el navegador.

Salu2!

Anónimo dijo...

Que tal buen día: Me pareció un excelente aporte, realice mi aplicación con las instrucciones indicadas, al momento de ejecutar la aplicación y cargar el archivo me marca un error, no entiendo porque ya que lo hice tal y como dicen las indicaciones, por lo tanto descargue el proyecto y ohhhh sorpresa sale el mismo error en el mismo lugar, les pido de su apoyo el error me sale en la línea de código de la clase videopanel la línea 27: video2.setSize(d.width, d.height);


Atte: SUSY

Mouse dijo...

Sergio no hice la prueba en un applet pero yo creo que si puede funcionar como dices, haber si tengo tiempo lo intento

Susy dime cual es el error que te sale y con gusto te ayudo

Anónimo dijo...

Hola mouse:

El error que me genera es:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Gracias por la ayuda

Atte:
SUSY

diego orlando dijo...

gracias por toda la ayuda que tienes
Att.
Didi

Anónimo dijo...

excelente tutorial muchas gracias, ahora quisiera saber cómo hago para poder agregar varios videos al playlist y otra pregunta en la documentación del JMF he leido que soporta el formato .avi pero he tratado de reproducir videos con este formato y me sale error... qué puede estar pasando....

Anónimo dijo...

A mi me escupe el mismo error que a susi, eso si, lo estoy ejecutando en eclipse. gracias por adelñantado, si consigo hacerlo funcionar te lo paso dentro de un applet.

Anónimo dijo...

Gracias por el aporte, tengo una pregunta: solo funciona para mpg? he probado con otros formatos y no puedo reproducir el video. Gracias nuevamente.

Mouse dijo...

el API dice que si se puede, habria que experimentar

Requiem dijo...

Ke tal use estos pasos para armar un karaoke ... el problema que tengo es que el media player solo me permite ejecutarlo 10 veces ... en la 11 al parecer lo reproduce pero no se ve en el panel "pantalla" ... algo para poder reparar esto y pueda reproducir indefinidamente ?

Anónimo dijo...

como van mi inconveniente es el siguiente cuando compilo en netbeans el video con los controles salen bien pero en el momento de crear el .jar la ventana sale vacía y no he dado con el problema, por favor alguien tiene alguna idea?
gracias

Anónimo dijo...

hola ta muy bueno el tuto pero tengoun problema sale error en javax.import.media.Manager; y en import javax.media.player; bueno si me puedes echar la mano por que sale eso xf

Mouse dijo...

REQUIEM: no entiendo eso de que solo te permite ejecutarlo 10 veces, yo me hice un reproductor de mp3 y lo uso casi todo el dia y ningun problema de limites

anonimo1: si lo compilas como esta en el ejemplo, no hay problemas, fijate en los repaint()

anonimo2: ese error se debe a que no encuentra las APIS, fijate que los hayas instalado correctamente

Anónimo dijo...

Le daré una revisada a tu código me gusta buscarle fallos a todo jeje no te ofendas si encuentro algunos y los corrija te dejo mi web http://jonathan-palomino.blogspot.com/ ahi tengo temas orientados a java

Anónimo dijo...

hola mouse ...
me podrías ayudar en instalar el jmf en fedora 14 ....
e podido en ubuntu y en windows pero en fedora no puedo....

Anónimo dijo...

A MI NO ME SALE ERROR!!! PORQUE YO SI SE DOND ESTA EL ERROR.!!! PERO LO MALO ESTA EN KE NO VISUALIZO NADA...!!!! SOLO ESCUCHO LO KE DICEN NOMAS...!!! PON EL METODO PARA VISUALIZARLO ..T_T

Anónimo dijo...

hola amigo tengo un problema medio raro. Utilicé tu código para cargar un vídeo.

Mi aplicación tiene un panel donde reproduce este vídeo y en otro panel muestra unos números de la bdd, pues bien cuando agregan un nuevo número a la bdd este cambia y cambia en el panel, el problema se da en el vídeo parece como que se descuadra, como que se va a la mitad y se hace más pequeño, porque es este problema???

Espero tu valiosa ayuda.

dejo un video para ser mas explicito.

http://www.youtube.com/watch?v=rIxdnEsIRE8&feature=player_embedded

jc mouse dijo...

ivlecamo84 aqui tienes la respuesta a tu error:

http://jc-mouse.blogspot.com/2010/03/respuesta-redimensionar-el-video-en-jmf.html

espero te sirve, sino avisas

Richard dijo...

hola!! sq tengo un problema con esto:
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
como lo puedo corregir?
gracias

ale dijo...

Pues parece que no se manejar java
intente con el codigo ya no salen errores pero no me reconoce la camara pues ejecuta y no hace nada me podrias ayudar

mouse dijo...

Richard: cual es el error que te sale ?

mmmmmmmmm medio raro tu problema, talvez sea algo externo a java, prueba con otro sistema operativo,. otra camara , talvez ese sea el error

Anónimo dijo...

Excelente aporte..funcionó
totalmente y esta bastante claro..
mil gracias

Anónimo dijo...

buenas

como se puede hacer el auto loop

gracias

Anónimo dijo...

BIEN FUNCIONA , EN EL APPLET BASTA CON FIRMARLO Y A DISFRUTAR: =)

Ricardo dijo...

hola que al amigo..cheque tu aplicacion de video..e intente realizarlo...pero me arroja este error:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at videopanel.Videopanel.(Videopanel.java:37)
at videopanel.reproductor.abrirActionPerformed(reproductor.java:140..etc...
podrias decirme como solucionarlo...de antemano gracias...

vleix_010707 dijo...

gracias x compartir tus conocimientos :D

Ricardo dijo...

que tal?.....al realizar el proeycto del reproductor de video...arroja el siguiente error:

Unable to handle format: MPEG, 352x288, FrameRate=25.0, Length=152064

a que se debe?..como corregirlo?..basicamente...la imagen es la que no ve...pero si tiene sonido...espero puedas ayudarme..de antemano gracias..

Anónimo dijo...

si la imagen no se ve pero si el sonido, prueba con videos diferentes, el error te dice que no puede leer el formato de video que quieres reproducir

Anónimo dijo...

Como hago para que al abrir otro video lo reproduzca (no solo el audio) sino que si habia algo reproduciendose lo detenga y reproduzca el nuevo video que se selecciono, gracias

Anónimo dijo...

necesito que el video sea uno de internet. que la url sea de un video de internet como de youtube o algo asi. se puede hacer??

Andy J. Campo López dijo...

Agradeceria que subas el tuto del reproductor Mp3

Geovanny J. dijo...

Tengo un problema, cuando me genero un loop de videos llega al 9 o 10 y la pantalla se queda en negro y el componente de reproducción avanza, pero no muestra ninguna imagen ni sonido.
No estoy usando el JChose, sino que le mando las ubicaciones de los videos.

cualquier ayuda les agradecería mucho.

jc mouse dijo...

antes de reproducir un archivo, debes verificar que no exista otro video en reproudccion, si existiera, antes debes detenerlo y reproducir el siguiente

Leandro dijo...

Estimado JC mouse, muchas gracias por tu aporte, tu siempre nos ayudas...

Quiero consultarte una cosa...
Talvez el disco duro o la mainboard influyen en la libreria Java Media Framework te comento mi problema:

Tengo un maquina Gygabyte Atom 1.6, Disco de segate 500gb, ram de 2gb y so Win 7 de 4bits.

Instalo la librería JMF en el pc y se instala correctamente, pero al ejecutar me da un erro de Exception, que no existe la libreria, etc... este error me da en la gygabyte porque en otra compu funciona la aplicación correctamente... solo en esta maquina me da este error, cambie de sistema operativo a win 7 32 bits, win xp y nada, este error es raro (No te pongo el error porque estoy formateando nuevamente la máquina), entonces investigando y probando en otras maquinas llegué a la conclusión que es la maindboar o el disco... En fin, tu crees que esto puede ser posible?

Leandro dijo...

Este es el error que me da, a pesar que está correctamente instalado el JMF:

C:\Users\Jhona>java -jar "C:\SEAP_DISPLAY\BCE-SEAPDisplay.jar"
Conexi¾n a BDD (localhost) jdbc:mysql://localhost/seap ... Ok
Conexi¾n BDD con DISPLAY ABIERTA
Contados Timer: 1
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: javax/med
ia/NoPlayerException
at display.display.reproducirvideo(display.java:844)
at display.display.(display.java:48)
at display.display$19.run(display.java:1521)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javax.media.NoPlayerException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 17 more
Exception in thread "Timer-0" java.lang.NullPointerException
at display.display$18.run(display.java:1189)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)

Katherin Lissett dijo...

Buenas!! :D

Al compilar el código que esta para descargar me salen los siguientes errores y de verdad no se como corregirlo!

Si alguien me puede ayudar se los agradecería muchísimo.

Gracias

Unable to handle format: MPEG, 320x240, FrameRate=25.0, Length=115200
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at videojava.videopanel.(videopanel.java:27)
at videojava.reproductor.abrirActionPerformed(reproductor.java:140)
at videojava.reproductor.access$100(reproductor.java:12)
at videojava.reproductor$2.actionPerformed(reproductor.java:59)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6290)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6055)
at java.awt.Container.processEvent(Container.java:2039)
at java.awt.Component.dispatchEventImpl(Component.java:4653)
at java.awt.Container.dispatchEventImpl(Container.java:2097)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
at java.awt.Container.dispatchEventImpl(Container.java:2083)
at java.awt.Window.dispatchEventImpl(Window.java:2482)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:607)
at java.awt.EventQueue$1.run(EventQueue.java:605)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:621)
at java.awt.EventQueue$2.run(EventQueue.java:619)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

mouse dijo...

ya intentaste con otros formatos de videos

David dijo...

Amigo Mouse, Tengo un error no encuentra la clase Manager, en si el paquete Javax.media y he intentado conseguirlo pero no lo encuentro en ningun jdk utilizo neat beans 7.3

mouse dijo...

¿tienes el JMF instalado?

Christian Andre Ccami Gutierrez dijo...

me funciona de maravilla pero kiero reproducir otros formatos de video se podra?? si es haci me gustaria q me diga el codigo para poder hacer esto....

Anónimo dijo...

Hola JC-MOUSE he intentado realizar la aplicación e incluso descargue la que tu realizaste y aún no logro que me funcione, descargué e instalé el JMF 2.1.1e y ya agregué los .jar de ese framework y ya he intentado con formatos mpg, avi y mov y ninguno me ha funcionado y en el error me sale lo siguiente:

Unable to handle format: MPEG, 640x360, FrameRate=25.0, Length=345600
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at videojava.videopanel.(videopanel.java:27)

espero puedas ayudarme, gracias

Anónimo dijo...

men quisiera saber como reproducir vídeos pero sin necesidad de buscarlos manual mente osea que envés de abrir esas sub ventanas solo fuera colocando la ubicacion del video por ejemplo algo asi " C:\Users\HP\Desktop\video.mpg" men porfa contesteme es que lo nesecito urgente

Post recomendado