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; [...]

16/2/10

Reproductor de videos en java: El Playlist y un poco de teoria

JAN29


Continuando con el tutorial "Reproductor de videos en java", en esta cuarta entregase hace un alto para dar una pequeña explicacion sobre la dimension y conformacion del proyecto, asi como de un poco sobre la "encapsulacion" propia de lenguajes de Objetos.

Hace su aparicion la clase "playlistclass.java", encargada de la gestion de una "lista de reproduccion", como esta clase no tiene que ver directamente con lo que es la API de JMF, decidi no explicarla en video, sino mas bien colocar el codigo integro de la clase que esta por demas comentando.

Esta largito la clase, pero es realmente sencilla.

package reproductorjava;

import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class playlistclass {
private Vector urlCompleto;
private Vector name;
private static FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo de video","mpg","mpeg");

    public playlistclass(){       
        //se crea dos vectores para almacenar la "url completa" y el "nombre" del archivo de video
        // los vectores tienen una capacidad inicial de 10 y un incremento de 2
        urlCompleto = new Vector(10,2);
        name = new Vector(10,2);       
    }
    
    /* Añade a los vectores la url y el nombre de un archivo     
     */
    public void setVideo(URL u, String s){                      
        urlCompleto.addElement(u);
        name.addElement(s);
    }
    
    /* Dado el nombre de un archivo de video, este es buscado en el vector y si
     es encontrado y removido de "ambos vectores" */
    public void removervideo(String s){
        name.removeElement(s);
        Enumeration n = name.elements();                                
            while(n.hasMoreElements()){
                String elemento=(String)n.nextElement();               
                if(elemento.equals(s)){                     
                   urlCompleto.remove(elemento);
                    break;
                }                 
            }        
    }
   
    /* Dado un string con el nombre de un video, se busca su posicion en el vector
     * y luego se retorna la posicion de la URL completa
     */
   public URL getURL(String s){            
        Enumeration n = name.elements();            
        URL turl=null;
            int d = 0;
            while(n.hasMoreElements()){
                String elemento=(String)n.nextElement();               
                if(elemento.equals(s)){ 
                    turl = (URL) urlCompleto.elementAt(d);
                    break;
                }
                 d++;
            }            
        return turl;
    }   
    
   /* devuelve la url dado la posicion del mismo */
   public URL getLastURL(int d){            
       URL turl = (URL) urlCompleto.elementAt(d);        
       return turl;
    }   
   
   /* Metod que muestra una ventana de dialgo para añadir "archivos" al playlist
    * hace uso del metodo anterior "setvideo"
    */
    public void Dialog(DefaultListModel modelo){
       JFileChooser fileChooser = new JFileChooser();       
       fileChooser.setFileFilter(filter);
       int result = fileChooser.showOpenDialog(null);  
       if ( result == JFileChooser.APPROVE_OPTION ){
            try {           
                //se asigna a mediaURL el archivo de video seleccionado
                URL url = fileChooser.getSelectedFile().toURL();          
                String namefile = fileChooser.getSelectedFile().getName();
                //coloca video 
                setVideo(url, namefile);   
                //añade a playlist
                modelo.addElement(namefile);                                             
            } 
            catch (IOException ex) {                
                Logger.getLogger(playlistclass.class.getName()).log(Level.SEVERE, null, ex);
            } 
        }
    }
    
}

Resumen: Esta clase "playlistclass.java", crea un playlisy utilizando vectores, dada la magnitud del proyecto, este simple playlist, solo almacena la URL del archivo de video en un vector, y en otro vector almacena el nombre del video para su posterior uso. Para utilizar esta clase en netbeans y en otros IDE similares, esta clase presenta una ventana de dialogo (JFileChooser), el cual hace uso de un filtro (FileNameExtensionFilter) para mostrar solamente videos con extension MPG. Asi mismo contiene los metodos necesarios para le gestion del Playlist (Añadir, remover, y obtener la URL de los archivos almacenados)

El proyecto no es complicado, hasta ahora solo hace uso de una clase "Paneldevideo.java" y de una clase de tipo Interfaz, que gracias a la encapsulacion podemos cambiarla facilmente

[ENLACE DE DESCARGA ACTUALIZADO 01/03/2015]
El codigo fuente del proyecto mas archivos de ayuda, esta aqui abajo
El código no esta optimizado y claro que puede ser mejorado, se aceptan criticas constructivas


ENJOY!!!

20 comentarios:

Anónimo dijo...

me encantaron tus tutoriales
estan geniales gracias por
ayudar a entender un poco de
la programacion orientada a objetos

Gerardo dijo...

Te agradezco un monton, te repasaste!! eres muy buena persona y un MASTER!! Gracias!!!!

Anónimo dijo...

gracias por los tutoriales pero podria hacerme un favor. podrias subir el link a otro gestor de descargas es que frakeshare no me permite hacer la descarga

Anónimo dijo...

hey hpombre le agradesco por todos sus tutoriales aprecio mucho que haya programadores tan buenos que difundan sus conocimientos sim embargo en este ejemplo tengo un problema
importjavax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
en las clase paneldevideo.java me dice que no se encuentra javax.media

Anónimo dijo...

la cosa esque ya instale el jmf
mi correo es lee_general@hotmail.com
gracias

RgatoR dijo...

Gracias por quitarme lo ignorante y tu pag esta de primera dejame felicitarte y claro que no sere una rata pondre lo agradecimientos correspondientes creeme y pues un saludo att. Gato universidad ITSSMT

Anónimo dijo...

gracias por el tutorial estan excelente pero te agradeceria si lo treparas a otro servidor ya que ese en el que esta no me deja bajarlo si no es mucho la molestia claro

Anónimo dijo...

hola el tutorial esta excelente pero podrias volverlo a subir o treparlo a otro servidor porque en el que esta no medeja vajarlo te lo agradeceria mucho

Oscar Alvarado dijo...

Hola andaba buscando info sobre como crear un reproductor mp3 en java y vi el tema de reproductor de video, quisiera saber si puedes publicar una entrada donde expliques como se realiza el reproducto wno si se puede claro. seria de mucha aiuda ia que recien me inicio en el mundo de java ^^... gracias.

Anónimo dijo...

eii ola me ayudaste muchoo... pero ps nose si puedas aser lo mismo pero con musica.. el detalle es que no m sale con una lista.. y staba viendo stee.. pero no se aplicarlo soy nuevoo pliss

Anónimo dijo...

muy bueno el reproductor seria interessante que hicieras un reproductor de java que reproduzca archivos swf

Anónimo dijo...

Hola q tal esta sabes esta chevere esta aplicación, pero tengo una duda al momento de reproducir el video en formato mpg una vez q la minimizas y vuelves a ver la aplicación, el video desaparece pero sigue sonando el sonido del video, q solucion le puedes dar??...
ah utilizas convertidor para pasar de un formtato a formato mpg... : )
Mi correo: reneguido_18@hotmail.com

Anónimo dijo...

GRACIAS POR SU INFORMACIÓN
LA VERDAD SE BE QUE ES UNA PERSONA QUE SI CONOCE DE ESTO
ESPERO PODER PONERME EN CONTACTO DIRECTO CON USTED PARA PODER APRENDER
MAS AQUÍ DE JO MI CORREO
romeo1_cid@hotmail.com

diseño web dijo...

si yo tambien aqui esta mi correo carlosmanuel635@yahoo.com

Anónimo dijo...

esta roto el link de descarga podrian subirlo de nuevo

Anónimo dijo...

me podrian ayudar con el codigo para los botones agragar y remover,
videos al reproductor en java.... tengo q entrgar un proyecto hoy, les agradeceria mucho su ayuda.!!!

Preda dijo...

Hola mouse que tal, primero que todo genial tu blog, super util, mi duda es con los codigos del reproductor, ya que el que hice con los videos tutoriales, y los que descargue (modificado y sin modificar) me dan todos el siguiente error:

Unable to handle format: MPEG, 320x240, FrameRate=25.0, Length=115200
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at reproductorjava.paneldevideo.(paneldevideo.java:35)
at reproductorjava.reproductor.jButton2ActionPerformed(reproductor.java:246)
at reproductorjava.reproductor.access$400(reproductor.java:10)
at reproductorjava.reproductor$6.actionPerformed(reproductor.java:135)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
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:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

si le puedes arrojar algo de luz al asunto genial, muchas gracias
ATT: Fabian
mi correo: Fabian_nav01@_hotmail.com

Anónimo dijo...

tengo problemas con lo del model llevo dias hacienmi propio reprducctor cn esto tutos pero solo teng oese problema

y rl de la url dela GUI

Anónimo dijo...

excelente aporte... estoy haciendo algo similar con tu proyecto lo he modificado para poder realizar otro similar para mostrar un listado de expedio de fichas..
de tal modo el sistema ya puede almacenar una lista extensa de videos, mostrar las fichas correspondientes, mensajes.
Esto por una parte.. pero encontre mi duda cuando quise reproducir toda mi lista de videos lo cual no me lo hace... no encontre un metodo el cual me tome todo el array de tipo url[] y este pueda reproducir una despues del otro sin tener q estar presionando play play play etc...
eso podria ser una solucion.. eh pensado en otro que controlar en la clase "videopanel" el tiempo de un video y al finalizar... comenzar con el otro.. en fin.. eso en teoria quisiera q me dieras una mano tan solo en como poder reproducir una lista de videos
mi email: superayoria@yahoo.com
un saludo de mi parte jcmouse y espero respuesta =)

mouse dijo...

si la API de JM tiene es opcion perfecto, si no la tiene, pues si, habria que controlar la duraccion de las canciones para ir reproduciendo una despues de otra

Post recomendado