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

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

12 comentarios:

Anónimo dijo...

holas

Gustavo dijo...

Hola que tal? desde ya gracias por tus tutoriales la verdad estan muy buenos, yo tengo la siguiente duda. he echo lo que tu has echo con el reproductor, pero me gustaria mejorarlo, me he bajado tutos sobre la Api JMF pero la verdad mucho no entiendo :S lo que quiero hacer es:
1) ver la posibilidad de poder reproducir mas de un formato de video.
2) que cuando haga doble clic sobre el panel del video el mismo se redimensione a las dimensiones del monitor, algo asi como el reproductor de Windows Media player el famoso 123.
Si llegas a responder a mis preguntas por favor avisame a mi correo asi entro al canal y lo veo :D
mi correo es gustavo_490_808@hotmail.com

y desde ya muchas gracias!!!

Mouse dijo...

Gustavo lo que propones se puede realizar, pero la primera interrogante que tienes se trata mas sobre los desarrolladores de la API los cuales segun la pagina del proyecto, reproducen todo tipo de archivos, a mi solo me corrio con los mpeg, ya no hice mas pruebas pero supongo que debe haber algo que estoy olvidando, seguire investigando. Respecto a la pregunta 2, eso no es mas que un evento del java y si se puede hacer

saludos

Anónimo dijo...

Hola mouse fijate que necesito ayuda solo me reproduce formato .mpeg y necesito .avi .wmv y dvd necesito ayuda porfa!!!!

Rolando dijo...

Excelente trabajo amigo. Gracias desde Trujillo-Perú.

Leandro Cahuasquí dijo...

Hola Mouse, muchas gracias por tu aporte y tus ejemplos...

Tengo una duda... mira... lo que explicas en este código, es que cada vez que modifique el tamaño de la ventana actualiza la posición del video y la coloca en su posición...

Mi ventana está bloquea, tiene un mismo tamaño siempre... pero cuando cambia el número del jlabel, se des configura el tamaño... le puse en el timer y no funciona

Este es el código: cuando el jlabel cambia su contenido emite un sonido, pero no actualiza bien la pantalla del video... se demora 3 segundo.

lblturno1.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
//Aquí reproduce el sonido
//System.out.println("PROPIEDAD "+evt);
sonido();
UpdateSize();
}
}
);

Por tu ayuda gracias

mouse dijo...

el resize es solo para cuando se redimensione el tamaño del jframe, lo que debes hacer es darle un tamaño fijo a tus componentes utilizando los layouts, no se si te funcione, pero en el ejemplo que coloque a mi me funciono

Leandro Cahuasquí dijo...

Hola amigo, nuevamente una consulta...

Como puedo hacer que el vídeo se repita una y otra vez, es decir; reproduce el video, termina y luego vuelve a repetir el mismo video???


Estoy leyendo algunos conceptos de JMF pero no hay nada concreto.

Saludos

Anónimo dijo...

Hola, disculpa donde puedo bajarme el JMF ya que el que me baje no me funciona correctamente... me reproduce el video pero aparece el 75% en la pantalla, el restante me aparece negro... y eso me pasa también con tu ejemplo...

Gracias muy buen aporte...

mouse dijo...

Leandro Cahuasquí : eso es programacion java, esperar a que termine y lo vuelves a reproducir, sinceramente no me fije si JMF cuenta con esa opcion

Anonimo_ fijate el formato del video, o prueba con otro video

Leandro dijo...

Hola Mouse gracias por tus aportes son muy buenos...

Tengo el mismo problema que Anomino tiene, ya cambié de video como tu sugieres pero nada sigue apareciendo el 75% del video en la pantalla...

Recuerdo que dias atrás hice unas pruebas en Win 7 y funcionaba bien, crees que puede ser el sistema operativo???

Saludos
Leandro

jc mouse dijo...

tal vez, la mayoria de los problemas que reportan son con win7, sinceramente no lo probe en ese sistema operativo asi que no podria opinar

Post recomendado