Está en la página 1de 4

Capturar video de una webcam con JMF

05/03/11. Publicado por Mouse en 10:14

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:
y y y

IDE Netbeans 6.9 Libreria JMF (Java Media Framework) instalada y configurada en el sistema Una WebCam, celular con camaratambien 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 aadir 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" aade 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 privateString dispositivo = "vfw:Microsoft WDM Image Capture (Win32):0"; private Player player = null; publicComponent Componente(){

Componentcomponente_video; try { // Se obtiene el dispositivo CaptureDeviceInfodevice = 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 tamao al componente componente_video.setSize(320, 240); returncomponente_video; } else { JOptionPane.showMessageDialog(null,"No se pudo crear el video..."); returnnull; } } }

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,solotrabajaermos 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 tamao 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 aade 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 aade al JFrame , el resto del codigo, solo es para dar un tamao 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