Ver por primera vez la WebCam

    Supongo que tendréis muchas ganas de ver vuestra linda cara en la pantalla del ordenador utilizando un programa creado por vosotros mismos. Haremos que vuestro deseo se haga realidad, así que poneros guapos y disfrutar de vuestra belleza ;)
    Hay dos formas de visualizar imágenes de la webcam con el JMF: una de ellas es obteniendo un componente especial que proporciona el Player y otra es utilizando el control FrameGrabbingControl que se obtiene también gracias al Player. La primera forma es la más sencilla pero no nos proporciona un control tan personalizado como la segunda manera de hacerlo. Como lo que queremos es ver nuestras caras lo antes posible vamos a utilizar la primera opción. En posteriores artículos ya crearemos una clase llamada WebCam que nos alejará del trato con JMF en posteriores proyectos y nos facilitará mucho el trabajo. Este esquema también nos puede ser útil para esta práctica, por lo menos hasta la clase Player.
    El objetivo de este programa es sencillo: mostrar en una ventana las imágenes que capta la webcam. Para ello vamos a crear una clase que se va a llamar CamFrame que herede de JFrame y a él le añadiremos el componente que nos ofrece el Player. Simplemente con eso ya podemos visualizar en nuestra pantalla lo que capta la webcam.

Captura del programa cuando la cámara enfocaba mi precioso suelo.
En mi caso se activa la combinación de colores básica de Windows 7.

    El código del programa es extremadamente sencillo. Sigue los siguientes pasos:
  1. Encontramos el CaptureDeviceInfo de la primera cámara web que encontremos en el equipo.
  2. Obtenemos a partir de él el MediaLocator.
  3. Utilizando la clase Manager creamos el  Player en el estado de realized.
  4. Iniciamos el Player.
  5. Obtenemos el componente visual del Player con el método getVisualComponent() y lo añadimos al JFrame.

    Aquí tienes el código del programa:

// CamFrame.java ---------------------------------------------------------------

package jwebcam;

import java.awt.Dimension;
import java.util.Vector;
import javax.media.*;
import javax.swing.JFrame;


/**
 *
 * @author ProgramminHeroes
 */
public class CamFrame extends JFrame {

    public CamFrame() {
        // Creamos y modificamos el JFrame adaptándolo a nuestras necesidades
        super("CamFrame");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(new Dimension(640, 480));
        this.setVisible(true);
        try {
            // Paso 1
            Vector vector = CaptureDeviceManager.getDeviceList(null);
            CaptureDeviceInfo camera = null;
            for (int i = 0; i<vector.size(); i++) {
                CaptureDeviceInfo device = 
                        (CaptureDeviceInfo) vector.elementAt(i);
                if (device.getName().startsWith("vfw")) {
                    camera = device;
                    break;
                }
            }
            if (camera == null) {
                System.out.println("No se ha encontrado una webcam.");
                System.exit(0);
            }
            // Paso 2
            MediaLocator locator = camera.getLocator();
            // Paso 3
            Player player = Manager.createRealizedPlayer(locator);
            // Paso 4
            player.start();
            // Paso 5
            this.add(player.getVisualComponent());
        } catch (Exception e) {
            e.printStackTrace();
        }
    } // fin de CamFrame();
    
    /**
     * @param args Argumentos de la línea de comandos
     */
    public static void main(String[] args) {
        new CamFrame();
    } // fin de main(String[]);

} // fin de la clase CamFrame

// fin de CamFrame.java --------------------------------------------------------

3 comentarios :

  1. hola. no es necesario terminar la conexión del player al cerrar la aplicación???

    ResponderEliminar
    Respuestas
    1. Hola, tienes razón, sería lo más correcto llamar al método stop de la clase Player.
      En el videotutorial siguiente sí que se utiliza dicho método.

      Eliminar
  2. JMF no hay caso que me tome la camara, el codigo me corre super bien, el problema es que al no detectarme la camara cae en el segundo if y obviamente me arroja el mensaje de que no se encuentra la camara para luego cerrarse, crees que puedes ayudarme con eso?. Muy buenos videos por lo demas.

    ResponderEliminar