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

Code Army Bolivia
Mostrando entradas con la etiqueta Java Media Framework. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java Media Framework. Mostrar todas las entradas

22/7/11

JMF: Captura de video con filtros

JAN29


Dando respuesta a la pregunta de un seguidor del blog, ahora aprenderemos la creacion/implementacion de un proyecto en Java Media Framework  para la captura-filtrado del video de una webcam.

Si se tiene alguna duda en seguir los pasos del tutorial, ya sabes que en el blog/web existe bastante informacion sobre el uso dela libreria de JMF.

¿Que necesitamos?

  • La Libreria de Java Media Framework
  • IDE netbeans
  • Webcam

¿Que obtendremos?

 Quieres saber mas

continue reading

31/3/11

Capturar Imagen de una webcam con JMF

JAN29

Como se vio en un post anterior (Capturar video de una webcam con JMF) la captura de un video desde una webcam utilizando la API de Java Media Framework, capturar una imagen, no es cosa del otro mundo, bastara con realizar unas modificaciones a nuestra clase jfmVideo.java

Los requisitos son los mismos, o casi los mismos

Para este ejemplo, se utilizara como dispositivo de captura, "vfw:Microsoft WDM Image Capture (Win32):0"  que es el Controlador Universal de Windows para las camaras de video.


Que necesitamos:
  • IDE Netbeans 6.9
  • Libreria JMF (Java Media Framework) instalada y configurada en el sistema
  • Una WebCam, celular con camara tambien sirve
  • Componente jcSlide (Descargar desde aqui) para almacenar las imagenes que capturemos
1. Crea un proyecto en Netbeans y añade las siguientes clases: una clase interfaz video.java y una clas jmfVideo.java
las que estan tachadas son solo imagenes para la interfaz, no son necesarias, no te olvides de añadir la libreria Java Media Framework al proyecto.

2. Para la clase interfaz video.java, se deben añadir los siguientes objetos:
Recuerda crear los objetos con los nombres que estan en la imagen

3. El codigo de la clase jmfVideo.java es:

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.*;
import javax.media.cdm.CaptureDeviceManager;
import java.io.*;
import java.awt.*;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class jmfVideo {
//Controlador universal de windows
    private String dispositivo = "vfw:Microsoft WDM Image Capture (Win32):0";
    private Player player = null;

    public Component Componente(){
    Component componente_video;
        try {
            // Se obtiene el dispositivo
            CaptureDeviceInfo device = CaptureDeviceManager.getDevice(dispositivo);
            //se obtiene la fuente de datos de captura
            MediaLocator localizador = device.getLocator();
            //El localizador es del tipo "vfw://0" video para windows
            //se crea el PLAYER y se ejecuta
            player = Manager.createRealizedPlayer(localizador);
            player.start();
        } catch (IOException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoPlayerException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (CannotRealizeException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        }
        //Si se pudo crear el PLAYER, se obtiene el componente de video
        if ((componente_video = player.getVisualComponent()) != null) {
                //se da un tamaño al componente
                componente_video.setSize(320, 240);
                return componente_video;
            } else {
                JOptionPane.showMessageDialog(null,"No se pudo crear el video...");
                return null;
            }
    }

    //Metodo para capturar la imagen de la webcam
    Image img = null;
    public void capturarImagen(){
        FrameGrabbingControl ControlFG = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
        Buffer buffer = ControlFG.grabFrame();
        // creamos la imagen awt
       BufferToImage imagen = new BufferToImage((VideoFormat)buffer.getFormat());
       img = imagen.createImage(buffer);
    }

    public Image getImagen(){
        return img;
    }

    public void setImage(JLabel lb){
        capturarImagen();        
        lb.setIcon( new javax.swing.ImageIcon( img ) );
        System.out.println("ancho= " + img.getWidth(null));
        System.out.println("alto= " + img.getHeight(null));
    }


}

4. Para implementar esta clase en la interfaz, el codigo es el siguiente
Esto se debe colocar en el constructor, no es cuestion de copiar y pegar, analiza el codigo

jmfVideo b = new jmfVideo();
    /** Creates new form video */
    public video() {
        initComponents();
        this.setTitle("Captura de Imagen desde WebCam - by Mouse");
        //formulario al centro de la pantalla
        this.setLocationRelativeTo(null);
        //se coloca un layout tipo CAJA        
        VIDEO.setLayout(new javax.swing.BoxLayout(VIDEO, javax.swing.BoxLayout.LINE_AXIS));
        //se añade el componente de video
        VIDEO.add(b.Componente());
        imagen.setText("");
    }

El codigo para los botones es:


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        b.capturarImagen();
        jcSlide1.setImagen(new ImageIcon(b.getImagen()));        
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if( jcSlide1.getImagen() != null ){
            imagen.setIcon( jcSlide1.getImagen() );
        }else{
        JOptionPane.showMessageDialog(this,"Por favor. Debe seleccionar una imagen...");
        }
    }                                        

Si todo salio bien, solo es cuestion ejecutar el proyecto

Algunas imagenes tomadas con la webcam
un par de chicas que pasaban por ahi
Unas gradas :) si, como dije ese dia hizo frio y no habia mucha gente
Sin comentarios ;)

Un video de como funciona la aplicación, lastimosamente ese dia amanecio nublado  asi que no hubo mucho que filmar :)

Lo que todos esperaban, el código fuente

Click para descargar 
Enlace actualizado abril-2012


Felices capturas  - FIN

continue reading

5/3/11

Capturar video de una webcam con JMF

JAN29


Java Media Framework permite la reproduccion de archivos multimedia (video, musica), pero tambien permite capturar desde dispositivos externos (una webcam por ejemplo) video y audio, eso es lo que haremos hoy.

En un tutorial pasado se vio la manera de detectar los dispositivos que se encuentren actualmente en nuestro sistema, si no lo viste, date una vuela por aqui "Buscar Dispositivos". 

Para este ejemplo, se utilizara como dispositivo de captura, "vfw:Microsoft WDM Image Capture (Win32):0"  que es el Controlador Universal de Windows para las camaras de video.


Que necesitamos:
  • IDE Netbeans 6.9
  • Libreria JMF (Java Media Framework) instalada y configurada en el sistema
  • Una WebCam, celular con camara tambien sirve

Proyecto:

1. crea un nuevo proyecto en Netbeans, llamalo "jmfvideosimple", crea una clase "jmfVideo.java" y una clase mas de tipo JFrame, llamalo "video.java", debes tener algo como esto:
Debes añadir la libreria JMF al proyecto, para esto clic derecho donde dice "Bibliotecas" y clic en "Agregar Biblioteca", si no sabes como agregar una libreria a Netbeans, busca en el blog que hay un tuto que indica como.


2. A nuestra clase "jmfVideo.java" añade el siguiente codigo:


import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.*;
import javax.media.cdm.CaptureDeviceManager;
import java.io.*;
import java.awt.*;
import javax.swing.JOptionPane;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class jmfVideo {
    //Controlador universal de windows
    private String dispositivo = "vfw:Microsoft WDM Image Capture (Win32):0";
    private Player player = null;

    public Component Componente(){
    Component componente_video;
        try {
            // Se obtiene el dispositivo
            CaptureDeviceInfo device = CaptureDeviceManager.getDevice(dispositivo);
            //se obtiene la fuente de datos de captura
            MediaLocator localizador = device.getLocator();            
            //El localizador es del tipo "vfw://0" video para windows
            //se crea el PLAYER y se ejecuta
            player = Manager.createRealizedPlayer(localizador);
            player.start();            
        } catch (IOException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoPlayerException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (CannotRealizeException ex) {
            Logger.getLogger(jmfVideo.class.getName()).log(Level.SEVERE, null, ex);
        }
        //Si se pudo crear el PLAYER, se obtiene el componente de video
        if ((componente_video = player.getVisualComponent()) != null) {
                //se da un tamaño al componente
                componente_video.setSize(320, 240);
                return componente_video;
            } else {
                JOptionPane.showMessageDialog(null,"No se pudo crear el video...");
                return null;
            }
    }

}

Esta clase utiliza el dispositivo vfw:Microsoft WDM Image Capture (Win32):0, para crear un Player y devolver un componente de VIDEO.

3. Ahora, en la clase interfaz "video.java", debemos implementar la clase anterior, para ello,solo trabajaermos en el Constructor de la clase.


public class video extends javax.swing.JFrame {
    jmfVideo b = new jmfVideo();
    /** Creates new form video */
    public video() {
        initComponents();
        this.setTitle("WebCam - by Mouse");
        //formulario al centro de la pantalla
        this.setLocationRelativeTo(null);
        //se da un tamaño al jFrame
        this.setSize(320, 240);
        //se coloca un layout tipo CAJA
        getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.LINE_AXIS));
        //se añade el componente de video
        this.add( b.Componente());
    }

Como se ve en el ejemplo, se crea una instancia a nuestra clase "jmfVideo.java" y esta se añade al JFrame , el resto del codigo, solo es para dar un tamaño inicial al JFrame y una alineacion tipo CAJA (BOX) utilizando Layout.

4. Eso es todo, solo queda ejecutar el proyecto, teniendo la webcam ya conectada claro :), (creame, pasa hasta en las mejores familias)

Y Si hicimos todo bien, ya podremos ver el video dede nuestra webcam
Como modelo en el video podemos ver a mi perro haciendo lo que mejor sabe hacer, "dormir", hubiera querido filmar otra cosa, pero un cementerio tiene mas vida que el lugar donde vivo asi que toco grabar al perro :)

Proyecto
IDE: Netbeans 6.9.1
Click para descargar
Recuerda si te bajas el Codigo Fuente, esta bien, aprenderas, pero si realizas el proyecto tu solo, aprenderas mucho mejor

continue reading

4/3/11

JMF: Buscar Dispositivos

JAN29

Java Media Framwork ademas de permitir reproducir archivos multimedia, tambien permite trabajar con dispositivos de captura Audio/Video, para ello tiene a disposicion una amplia gama de comandos, entre los mas importantes, detectar que dispositivos se tienen instalados en la PC.


La siguiente clase, permite obtener una lista de los dispositivos actualmente instalados en la PC mediante la clase de JMF, CaptureDeviceManager, este nos permite obtener una lista de los dispositivos instalados. El CaptureDeviceManager también se utiliza para registrar la captura de nuevos dispositivos.


import javax.media.*;
import javax.media.cdm.CaptureDeviceManager;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Buscar_Dispositivos {    

    public Buscar_Dispositivos(){}

    public void Escaner(){
        //se recorre la cantidad de Dispositivos que encuentra disponibles
        for(int i=0; i<CaptureDeviceManager.getDeviceList().size();i++){
            //se muestra uno por uno en pantalla
           System.out.println( ( (CaptureDeviceInfo) CaptureDeviceManager.getDeviceList().get(i) ).getName() );
        }
    }
}

Se ejecuta la clase desde un Main:


public class Main {
    public static void main(String[] args) {
      new Buscar_Dispositivos().Escaner();
    }
}

Resultado

continue reading

22/11/10

Playlist con XML y Java (reproductor mp3)

JAN29


En este proyecto se utiliza la librería JDOM para leer los datos de un archivo XML desde java y
mostrarlos en pantalla, la librería JDOM nos permite manipular los datos XML fácilmente y cuenta con varios métodos que hacen nuestro trabajo mas agradable.

Que utilizamos:
  • JDOM: JDOM es una biblioteca de código abierto para manipulaciones de datos XML optimizados para Java.
  • JMF: Java Media Framework o JMF (en español entorno de trabajo multimedia de Java) es una extensión de Java que permite la programación de tareas multimedia en este lenguaje de programación.
  • Netbeans 6.0
  • XML: Extensible Markup Lenguage o Lenguaje de marcado extendible
  • Un editor de texto para crear el archivo XML (Notepad por ejemplo)
Proyecto:

El proyecto  PlayListXML esta formado por un clase XMLpanel.java la cual se extiende de un JPanel, es aqui donde utilizamos la libreria JDOM para manipular el archivo XML, esta clase hace uso de la clase Song.java la cual es un JPanel donde se colocaran los datos leidos del playlist XML. ademas este proyecto tambien utiliza la libreia de JMF para reproducir los archivos MP3

El archivo XML que forma el playlist, tiene la siguiente estructura:

<?xml version="1.0" encoding="UTF-8"?>  
<playlist>
 <song id="1">
  <titulo>TITULO</titulo>
  <artista>ARTISTA</artista>
  <album>ALBUM</album>
  <location>DIRECION DEL ARCHIVO MP3</location>
  <artLocation></artLocation>  
 </song>
</playlist>

Es un XML simple la cual esta formada por los elementos necesarios que puede tener un playlits, Titulo de la cancion, artista, album, direccion del archivo MP3 y un campo adicional donde se almacena la ruta de los Preview de los album, en este caso todos se encuentran dentro del JAR

El archivo XML con los datos de las canciones puede verse aqui abajo:
<?xml version="1.0" encoding="UTF-8"?>  
<playlist>
 <song id="1">
  <titulo>Mi Cordura</titulo>
  <artista>La logia</artista>
  <album>Nacer para morir</album>
  <location>E:/mp3/Mi Cordura.mp3</location>
  <artLocation>/album/album3.jpg</artLocation>  
 </song>
 <song id="2">
  <titulo>Jamas la vi</titulo>
  <artista>La Logia</artista>
  <album>Morir para nacer</album>
  <location>e:/mp3/Jamas La Vi.mp3</location>
  <artLocation></artLocation>  
 </song>
 <song id="3">
  <titulo>Patria</titulo>
  <artista>La Logia</artista>
  <album>Escalofriante</album>
  <location>e:\mp3\00000000000Patria.mp3</location>
  <artLocation>/album/album5.jpg</artLocation>  
 </song>
 <song id="4">
  <titulo>La Vieja</titulo>
  <artista>Cordura</artista>
  <album>No tengo idea</album>
  <location>e:\mp3\08 - La Vieja.mp3</location>
  <artLocation>/album/album5.jpg</artLocation>  
 </song>
 <song id="5">
  <titulo>Knockin On heavens door</titulo>
  <artista>GUns and roses</artista>
  <album></album>
  <location>e:\mp3\007.-KNOCKIN ON HEAVEN.mp3</location>
  <artLocation>/album/album5.jpg</artLocation>  
 </song>
</playlist>

La clase encargada de manipular los archivos XML es  XMLpanel.java:

package playlistxml;
import java.awt.Dimension;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class XMLpanel extends javax.swing.JPanel {
    
    Dimension d = new Dimension(470,500);
    
    //constructor al cual se le pasa la direccion del archivo XML
    public XMLpanel(String pl){    
        int i=0;
        //añadimos un layout
        this.setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS));               
        try {
         // Creamos el builder SAX
         SAXBuilder builder = new SAXBuilder();         
         Document doc = builder.build(new FileInputStream(pl));
          // Obtenemos la etiqueta raíz
         Element raiz = doc.getRootElement();                  
         List &lt;Element&gt; hijosRaiz = raiz.getChildren();                
         //recorremos todos los hijos de la raiz
         for(Element hijo: hijosRaiz){ 
             //creamos un nuevo objeto SONG
             this.add(new song());         
             //añadimos propiedades
             ((song)this.getComponent(i)).setTitulo(hijo.getChild("titulo").getValue());
             ((song)this.getComponent(i)).setArtista(hijo.getChild("artista").getValue());
             ((song)this.getComponent(i)).setAlbum(hijo.getChild("album").getValue());
             ((song)this.getComponent(i)).setLocation(hijo.getChild("location").getValue());             
             ((song)this.getComponent(i)).setPreview(hijo.getChild("artLocation").getValue());                                          
             i++;             
         }//fin hijos               
        }catch (JDOMException ex) {
            Logger.getLogger(XMLpanel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(XMLpanel.class.getName()).log(Level.SEVERE, null, ex);
        }         
        //asignamos tamaño al panel deacuerdo 
        d = new Dimension(410,(100*(i)));          
        this.setSize(d);        
        this.repaint();      
    }
    
  //sirve para obtener cual es el archivo mo3 seleccionado del playlist  
  public String getSongSelecionado(){
      String File="";
      for(int i=0; i&lt;this.getComponentCount();i++){            
            if(((song)this.getComponent(i)).getSeleccion()){
                File = ((song)this.getComponent(i)).getLoaction();                      
                break;
            }            
        }
    return File;
  }
    
}
Todo el proyecto esta comentado y es (creo) fácilmente entendible para un programador "intermedio", novatos abstenerse. se los dejo para su análisis y estoy mas que seguro que a mas de uno le servirá en su universidad, escuela , instituto o simplemente para conocer un poco mas de lo que puede ofrecer java.

Este es el resultado del proyecto

El proyecto completo hecho en Netbeans 6.0 junto con las librerías necesarias en el siguiente enlace

http://link.jc-mouse.net/?id=P14Y115TXM
Actualizado 21-marzo-2013

continue reading

16/5/10

Reproductor MP3 en java

JAN29


Posteando de tiempo, se me ocurrio compartir el codigo de un simple reproductor mp3 hecho en java con la API de Java Media Framework. El codigo qu presento a continuacion sirve como base para el desarrollo de proyectos mucho mas ambiciosos, pero claro todo depende de las ganas que le pongas al programar, todo esta en tus manos, yo te digo como comenzar pero tu decides como terminar.

El proyecto.
Necesitas:
  • Java, obvio no :D
  • un IDE, yo utilizo Netbeans 6.0
  • el API de Java Media Framework
  • 15 minutos de tu tiempo

Creando la Interfaz

1. Crea un nuevo proyecto en Netbeans y añade un JFrame: reproductor, a este jframe añade un Menu, un JSlider , dos jButton y un label en la parte inferior, trata de que te quede como en la imagen de abajo

El reproductor

2. Crea una nueva clase y llamala mp3.java, esta clase es la encargada de trabajar con los archivos MP3. El codigo necesario esta aqui:


import java.io.IOException;
import java.net.URL;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import java.util.Timer;
import javax.swing.*;
import java.awt.*;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class mp3{
//el player
private Player mediaPlayer;
//animacion
private Timer tiempo ;
private TimerTask task;
private int speed = 1000;//velocidad
private int frame=0;
//control    
boolean run = false;    
boolean todo_ok = false;
//archivo
URL mediaURL=null;
String file="";   
//otros
String t=null;
//filtro
private static FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo MP3","mp3","mp3");
    
//el constructor vacio
    public mp3() {} 
   /* controles de reproduccion */
public String STOP(){        
//comprueba que el reproductor tenga un archivo
    if (todo_ok){
        mediaPlayer.stop();  
        this.todo_ok=false;  
        this.run=false;
        this.file="";
        this.stopAnimation();
    }
    return "Reproductor mp3 - by Mouse";
}

/* Reproduce un archivo mp3, si no encuentra ninguno devuelve
 un string vacio */
public String PLAY(JSlider b){
    t ="No existe ningun archivo...";
    if (todo_ok){
        if(!run){//si ya se esta reproduciendo
            mediaPlayer.start();
            this.run=true;
            t="Reproduciendo";
            this.startAnimation(b);
        }
    }
    return t;
}  
  
 //para la animacion  
public void startAnimation(final JSlider b) {    
    if (todo_ok) {
        tiempo = new Timer();
        task = new TimerTask() {
            public void run() {     
                //calculamos el tiempo de la animacion por 100%
                frame = (int) Math.round((mediaPlayer.getMediaTime().getSeconds() * 100)/mediaPlayer.getDuration().getSeconds());
                //cuando ambos sean iguales quiere decir que el video a alcanzado el final de la reproduccion
                if(mediaPlayer.getMediaTime().getSeconds() == mediaPlayer.getDuration().getSeconds()){
                    frame=100; // 100%
                    STOP();//SE DETIENE Y DESTRUYE EL MEDIA PLAYER
                }
                else // sino
                {
                    // se actualiza el nuevo valor del Slider
                    b.setValue(frame);
                    //Porcentaja de reproduccion
                     System.out.println("Tiempo de reproduccion: " + frame + "% de 100%");
                }
               }
        };
        //se inicia la animacion
        tiempo.schedule(task,0,speed); 
    }
}

//detiene la animacion
public void stopAnimation() {
    tiempo.cancel();
    task.cancel();
}
     
/* Metod que muestra una ventana de dialgo para añadir "archivos" al reproductor
* hace uso del metodo anterior "setvideo"
*/
public String Abrir_mp3(){
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setFileFilter(filter);
    int result = fileChooser.showOpenDialog(null);  
    if ( result == JFileChooser.APPROVE_OPTION ){
        try {   
            //si se esta reproduciendo un mp3, se detiene
            if(todo_ok){this.STOP();}
            //se asigna a mediaURL el archivo de video seleccionado
            URL url = fileChooser.getSelectedFile().toURL();   
            //se coloca el nombre de la cancion en la variable file
            this.file= fileChooser.getSelectedFile().getName();
            //se asigna el mp3 al reproductor
            mediaPlayer = Manager.createRealizedPlayer( url );
            //se coloca a true
            this.todo_ok=true;          
         } 
         catch (NoPlayerException ex) {
            Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex);
         } catch (CannotRealizeException ex) {
            Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex);
         }            catch (IOException ex) {
            Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex);
         } 
        }
        return "Reproductor mp3 - " + this.file;
    }
}

Explicacion: Como se ve en el codigo, este reproductor tiene los controles basicos para  reproducir PLAY y detener STOP el archivo mp3, ademas unos metodos para animar el jSlider y asi ver el avance en la reproduccion, el metodo Abrir_mp3(); te presenta una ventana de dialogo para que puedas buscar tu archivo MP3 y reproducirlo, todo esto desde una interfaz grafica. El codigo esta bastante comentado.

3. Ahora para implementar este codigo en la interfaz, debes hacer lo siguiente:
Creas una instancia a nuestra clase mp3.java y añades los metodos a sus controles correspondientes.

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
    //abrir mp3
        this.setTitle(mimp3.Abrir_mp3());
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        //dale play
        jLabel1.setText(mimp3.PLAY(jSlider1));
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
       //detener
        this.setTitle(mimp3.STOP());
        jLabel1.setText("Detenido");
}
// instancia a la clase mp3.java    
mp3 mimp3 = new mp3();

Y eso es todo, aqui puedes ver el reproductor funcionando
Aqui el video para una mejor explicacion
esta es la base para reproductores mas trabajados, como por ejemplo mi version personal del reproductor winamp, aun en desarrollo, pero cuando lo termine lo subire para compartirlo con todos


No puede faltar el codigo fuente del proyecto en netbeans 6.0
Click para descargar
Alguna duda, no dudes en preguntar, pero recuerda que puedo aconsejarte pero no realizar todo el trabajo por ti, como dijo el profe Escalante, solo HAY QUE TENER GANAS

continue reading

8/3/10

[Respuesta] Redimensionar el video en JMF

JAN29


Dando respuesta a una duda sobre un post anterior que trata sobre la  "Reproduccion de un video en Java con Java MediaFramework", donde se me hace la pregunta sobre un problema al tratar de redimensionar el JFrame, el video se pierde o se distorsiona. Muy buena pregunta y aqui mi solucion.

El error que  muestra el reproductor de video, mas que error de programacion es un olvido de mi parte,ya que me enfoque en la reproduccion de un video y no , el error  se produce cuando se intenta redimensionar el JFrame, el video se distorsiona y cambia de posicion como se ve en la imagen de abajo. Y tambien en otras pruebas que realice al tratar  de redimensionar el JPanel, todos los controles se distorsionaron completamente.
¿Porque se produce esto? 
Cuando se utilizan IDE's como Netbeans que nos ayudan en la creacion de aplicaciones, el programador muchas veces da por hecho algunos aspectos como la alineacion, tamaño, posicion de los objetos en la interfaz y se deja estos con su valor en "default", muchas veces esto no nos causa mayor problema, pero en esta ocasion se puede observar de que si es importante una perfecta distribucion de los objetos en la interfaz.

La Solucion
La solucion que encontre consiste en darle a los componentes un tamaño y posicion 
this.setSize(500, 500);//JFrame
Super.setSize(480, 480);
pantalla.setSize(460, 360);
control.setSize(460,50);  
Logicamente estos valores solo son de referencia para este proyecto, ahora la interfaz estara compuesta de :

Se añadio un nuevo JPanel, llamado Super, este servira de contenedor para los demas JPanels, la nueva interfaz tiene la siguiente distribucion en la vista diseño:
Todo esto respecto al diseño, ahora en el codigo, los cambios realizados en el codigo de la clase "videopanel.java", la que es encargada de crear el Player, es la creacion de un nuevo metodo:

 public void UpdateSize(Dimension d){
        video2.setSize(d);
        video2.setLocation(0,0);
        controls.setSize(d.width, 50);
}

Esta nuevo metodo, es el encargado de dimensionar el Player del JMF, tambien de darle una posicion respecto a su contenedor (JPanel), lo mismo se realiza con el Component "control". No hay mayores cambios en esta clase.

En la interfaz se debe crear un metodo que redimensione todos los JPanel, incluidos demas controles como Button, Label, Textbox, etc. y despues llamar al metodo creado mas arriba "UpdateSize()" y pasarle las nuevas dimensiones del JPanel: Pantalla.


El resultado

Como siempre el codigo fuente de ayuda con los cambios en el reproductor en el siguiente enlace:
http://link.jc-mouse.net/?id=9UMP41UMP4

Espero haber explicado bien lo que trate de hacer, sino, pues las preguntas son bienvenidas

continue reading

Post recomendado