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.
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:
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)
32 comentarios:
Hola
Oye y si quiero que me detecte la camara integrada de un portatil, se odria asi tambien en general como el controlador de windows que pusiste ahi, estoy intentando porbar el que tu hiciste pero no funciona
yo probe el codigo con dos webcam, camara de celular, una camara de video SIPIX y camara integrada de portatil en sistema operativo windows XP y vista sin problemas, talvez debas darte una vuelta por :
http://jc-mouse.blogspot.com/2011/03/jmf-buscar-dispositivos.html
asi podras configurar tu camara con JMF
saludos
hola amigo... tengo una consulta que hacerte y ojala puedas ayudarme
al iniciar jmStudio y capturar imagen me sale la pantalla color rosa y no se ve nada pero la luz de la cam se enciende... la cam esta en buen estado ya ke funciona en msn y otros programas... espero tu respuesta y gracias de antemano
Tendras algo sobre system tray en netbeans?
Hol quiero felicitarte por tu excelente trabajo hasta ahora con tu blogger.
Hace varios dias vengo buscando este tema de web cam y java. Pues tu proyecto lo he podido ejecutar con éxito asi como muchos anteriores pero el unico problema que me causa es que al parecer no es totalmente compatible con windows 7 x64 porque me camba el tema a BASICO.
Espero me puedas ayudar muchas gracias. (=
Boa tarde estou com pequeno problema compilo o codigo em minha maquina mas ela aparece a seguinte mensagem mesmo apos ter instalado tudo corretamente aparece essa msn de Erro:
Exception in thread "main" java.lang.NullPointerException
at jmfvideosimple.jmfVideo.Componente(jmfVideo.java:24)
at jmfvideosimple.video.(video.java:18)
at jmfvideosimple.Main.main(Main.java:7)
da diferenca uma maquina 32 bits e uma de 64 para utilizar o JMF ?se poder me ajuda Obrigado.
buen dia, llevo dias buscando esto pero en Vb2008, no encuentro como hacerlo, no tendras este codigo en vb2008???? o 2005 gracias por tu respuesta
Varias personas ya me dijeron que winseven no es totalmente compatible con JMF, supongo que habra que esperar a que actualicen el API
RM: ese es un problema con el dispositivo, verifica que JFM reconoce tu camara
Julio: nuevos codigos desde la siguiente semana :)
Hola amigo que bueno blog el tuyo te felicito hay muchas cosas interesantes tengo una inquietud lo que pasa es que cuando ejecuto la aplicacion me sale una ventana preguntando por el video source en el video veo que la aplicacion no lo hace y carga de una vez el video
Pero esto solo funca en window$, nada de linux, por que al parecer usas librerías propias de windows, y la clase debería ser transparente al SO pues esa es la gracia de programar en Java, sino pues mejor lo hago en algún lenguaje de Microshit.
thanx
ola sera que jmf funcionan para tramitir tv en vivo por medio de una tarjeta de video
Hola tengo win7..instale el jmf, por este mismo proyecto de querer transmitir video para una videoconferencia, y al intentar ejecutar las clases, ni siquiera se inicializa el FRAME.. cual seria el problema??.
Como podria implementarlo en un jsp ya q tengo un formulario donde capturo los datos del empleado y quiero tomarle la foto
Buena tarde mouse una pregunta,como podría grabar lo que se está capturado en el video,por ejemplo para que quedé grabado como. .avi
Hola, muy bueno el post, te he copiado la clase para capturar el video de la web cam pero con una pequeña modificación ya que el método getDevice no reconoce me webCam. Sin embargo, a la hora de añadir el componet debe haber algún problema que no consigo solucionar, el Jpanel que contiene el video aparece en rosa y cuando minimizo el Jframe que lo contiene aparece sobre cualquier elemento que hubiese debajo de la parte rosa una captura de pantalla. Es muy extraño, te pongo el código para ver si se te ocurre algo. Un saludo y Gracias por adelantado:
La action performance que inicia el Jframe:
private void VideoCamActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//Se pide el nombre del nuevo directorio. Y se crean los directorios de las
//distintas emociones en él.
IODialog entradaSalida = new IODialog();
String pathBaseDD;
String directorioFuente = entradaSalida.readLine("Introduce el \n"
+ "nombre de la nueva base de datos");
pathBaseDD = CreaDirectoriosBaseDatos(directorioFuente);
// Se crea el objeto
VentanaWebCam h1 = new VentanaWebCam();
// se añade al jDesktopPane
jDesktopPane1.add(h1);
h1.SetPath(pathBaseDD);
//se muestra en pantalla
h1.setVisible(true);
}
la ventana h1:
public VentanaWebCam() {
initComponents();
VideoPanel.add(video.Componente());
}
la modificacion de tu código
// // Se obtiene el dispositivo
// CaptureDeviceInfo device = CaptureDeviceManager.getDevice(dispositivo);
// //se obtiene la fuente de datos de captura
// MediaLocator localizador = device.getLocator();
MediaLocator localizador = new MediaLocator("vfw:\\Device\\0000008b");
Creeme que cunado pruebo tu codigo, al compilarlo netbeans me vota una exepcion como esta:
Exception in thread "VFW Request Thread" java.lang.UnsatisfiedLinkError: JMFSecurityManager: java.lang.UnsatisfiedLinkError: no jmvfw in java.library.path
at com.sun.media.JMFSecurityManager.loadLibrary(JMFSecurityManager.java:206)
at com.sun.media.protocol.vfw.VFWCapture.(VFWCapture.java:19)
at com.sun.media.protocol.vfw.VFWSourceStream.doConnect(VFWSourceStream.java:241)
at com.sun.media.protocol.vfw.VFWSourceStream.run(VFWSourceStream.java:763)
at java.lang.Thread.run(Thread.java:722)
Aclaro uso netbeans 7
JMF tiene errores con windows seven
Hola Mouse!
Sabés qué dispositivo debo usar para MAC OS? O cómo configurar el jmfRegistry para que reconozca la cámara built-in iSight?
Gracias!
lo siento, ni idea de como usar en MAC
Muy buen post Mouse!!
Tengo una duda, se puede tomar video en un formato mayor a 640x480, tengo una camara en la que la máxima resolución de video es de 1280x720 pixeles, pero el formato de video mas grande que he podido tomar es solo el de 640x480, ayuda x favoooor!!!
Dejo una pequeña colección de videotutoriales sobre el uso de la webcam con el JMF para al que le pueda interesar.
Videotutoriales sobre la webcam en Java
a pillin te vi haciendo spam :)
buenos videos recomendado :)
Hola mouse me encanta tu forma de enseñar la cosas .,.,,. sacas 10 ,,. oye como le ago para que en lugar de que capture video con la cam sea con la mi telefono es un android
Hola mouse, esta página es excelente. Me gustan mucho tus tutoriales. Oye quisiera saber que tal esta la compatibilidad del JMF en linux. Supongo que por ser java es totalmente portable entre sistemas operativos.
Saudos desde Colombia!!
Existe una forma para que no aparezca el formulario windows pidiendo el origen de video
Hola Gracias Mouse he Hecho todo y me funciona perfecto, tengo un problema cuando me genera el jar no me reconoce nada de jmf no me sale para seleccionar la camara,
he hecho de todo he copiado las librerias a la carpeta dist/lib y aun sigue el error , no se porque no me muestra la camara, pero desde netbeans si lo muestra todo, el problema es cuando genero el jar de la aplicacion, espero me ayudes, gracias
a alguien le funciono despues de generar el .jar..???
Hola me podrías ayudar porfa, como hago para que me reconozca el tv tuner en vez de la cámara web?Graciasssssssssssssss
hola amigo, es posble ayudarme con algo de codigo de como puedo enviar el video en un correo atraves de php? es posible que me ayudes?
oye amigo, al ejecutar el proyecto no me sale ningún error, pero cuando ya me muestra la ventana en donde se supone tiene que verse la captura de la cámara, a mi me aparece esa ventana pero mostrándome un color fiusha, no se a que se deba o puede que sea a la versión del jdk??
Alguien sabe como implementarlo en mac os? para que reconozca la cámara??
muy buena ayuda para nosotros que estamos aprendiendo el mundo de la programacion gracias...!
Publicar un comentario