Transmision de video usando sockets en Java
Este post será corto de palabras pero como siempre con mucho código fuente para descargar, analizar y reutilizar. Un amigo de guatemala me hizo una consulta acerca de la transmisión de video y bueno, Dos horas antes de escribir este post me propuse darle una mano. La idea era transmitir video pero sin usar R.T.P. sino transmitiendo uno a uno los frames provenientes de una fuente de video, que en este caso es una cámara web.
Anteriormente posteé la forma de cómo acceder a los frames de video usando el Java Media Framework, si no lo has leído aún te recomiendo lo hagas http://rolandopalermo.blogspot.com/2010/06/procesamiento-de-video-en-tiempo-real.html y en este post vamos a transmitir esos frames capturados. No explicaré el código porque en internet hay bastante información así como ejemplos de cómo usar sockets en java.
Anteriormente posteé la forma de cómo acceder a los frames de video usando el Java Media Framework, si no lo has leído aún te recomiendo lo hagas http://rolandopalermo.blogspot.com/2010/06/procesamiento-de-video-en-tiempo-real.html y en este post vamos a transmitir esos frames capturados. No explicaré el código porque en internet hay bastante información así como ejemplos de cómo usar sockets en java.
Fig. Servidor
Fig. Cliente
Aquí les dejo el proyecto desarrollado usando Netbeans.
Saludos y espero te sea de utilidad!... No olvides dejar tu comentario que motiva el seguir compartiendo el conocimiento y las experiencias.
No se como agradecerte, era lo unico que me faltaba, y no tenia la mas remota idea de como hacerlo. Cualquier otra cosa te estare molestando. Muchisimas gracias.
ResponderBorrarRolando, estube probando pero no me funciona el transmisor de video, al ejecutarlo me salen 2 errores: Linea 58 y Linea 196. No se que sea.
ResponderBorrarEs cuestion de que configures tu java media framework. Ejecuta el JMStudio y busca configura tu cámara web o lee la documentación de JMF.
ResponderBorrarProbe un proyecto que solo captura una fotografia y si funciona la aplicacion, pero no funciona el Acceder2Frames.java. Ya vi el JMStudio pero no se que sea
ResponderBorrarProblema resuelto, tenia una IP fija, por estar probando el proyecto en red, lo restaure y funciona de maravilla. Que tendria que agregarle para eviar sonido. Agradezco tu ayuda.
ResponderBorrarVas a tener que agregarle mucho empeño y ganas de investigar. ^^
ResponderBorrarSaludos.
Ok, me has ayudado mucho y lo agradezco, me sacaste de un gran apuro. Te cuidas.
ResponderBorrarAmigos estoy tratando de mostrar el video capturado de la camara wep integrada de mi portatil en un frame, y que al hacer clicl muestre en otro frame la imagen o ofto de ese instante, par lograrlo intente poner a funcionar este programa pero me salen dos errores
ResponderBorrarat com.blogspot.rolandopalermo.sockets.Acceder2Frames.(Acceder2Frames.java:58)
at com.blogspot.rolandopalermo.sockets.Acceder2Frames.main(Acceder2Frames.java:196)
por favor si me puedes ayodar te lo agradeceria inmensamente.
Ya instalaste el JMF, si ya lo hiciste, tienes que configurar la camara en el panel del JMF, saludos.
ResponderBorrarhola buenas tardes rolando lei tu publicacion y quiero q m ayudes me pidieron q transmitiera el video de una webbcam en tiempo real asi como tu lo haces pero de ahi insertarlo a una pagina web para q se vea me podras ayudar dame tu correo o algo para contactarte en verdad me urge para un proyecto espero y me contestes pronto
ResponderBorrarmi correo es roberto860205@hotmail.com
ava.lang.ExceptionInInitializerError
ResponderBorrarCaused by: java.lang.RuntimeException: Uncompilable source code - package javax.media does not exist
at com.blogspot.rolandopalermo.sockets.Acceder2Frames.(Acceder2Frames.java:25)
Could not find the main class: com.blogspot.rolandopalermo.sockets.Acceder2Frames. Program will exit.
Exception in thread "main" Java Result: 1 me marca ese errror ayuda
Aprender a detectar el origen de una excepción es parte de aprender a programar en Java.
ResponderBorrarSaludos.
es que soy nuevo en esto por eso me atrevo a recurrir a tu ayuda y espero no te nolestes
ResponderBorrarLA APLICACIÓN ES UN MUY BUEN EJEMPLO... ME GUSTARÍA SABER COMO HACER PARA CAPTURAR EL SONIDO TAMBIÉN... GRACIAS
ResponderBorrarWenas está muy weno el programa, pero tengo un problema me tira un NullPointerException en la clase acceder2Frames y creo que es xq el dispositivo que esta escrito o al menos lo que se le envia en ese momento no existe esta es la linea dispositivo = CaptureDeviceManager.getDevice(source);, entonces investigué un poco y encontré el método CaptureDeviceManager.getDeviceList(); pero no me devuelve nada sabes si ese es el error o ando buscando el error por mal camino si puedes me respondes a zevox11@gmail.com
ResponderBorrarmuchas gracias me ayudo mucho!!!
ResponderBorrarGracias por el aporte.
ResponderBorrarSolo quiero mencionar a todas aquellas personas que apenas comienzan a emplear multimedia en java, que despues de instalar el JMF, ejecuten el archivo "jmfinit.exe" localizado en la carpeta bin del JMF. Lo que permitira reconocer los dispositivos, posteriormente abran la aplicacion "jmstudio.exe" localizada en la misma carpeta y en la opcion de File-Preferences-Capture devices, debe aparecer su camara algo como "vfw:Microsoft WDM Image...". En su momento si descargan alguna aplicacion y la ejecutan, les sugiero utilizar los JAR´s que se encuentran en la carpeta de lib. Ya que en muchos foros algunos compañeros tienen ese problema, pero si funciona con los JAR´s que se descargan con el proyecto, pues que mejor.
Oye Rolando primeramente te agradesco por tu aportacion, me ha ayudado de mucho, pero tengo un problema, al ejecutarlo me funciona bien, pero despues de unos 10 o 15 minutos la memoria del BufferedImage se desborda y me manda el siguiente mensaje:"java.lang.OutOfMemoryError" en la siguiente linea de codigo: "BufferedImage bufferedImage = (BufferedImage)buffer_image.createImage(buffer);"
ResponderBorrarYa intente vaciar la memoria del BufferedImage despues de usarla, pero me sigue dando el mismo error, ¿Tienes alguna idea para solucionar este error?.
hola muy agradecido por tu tuto
ResponderBorrarhola muchas gracias por tu tuto
ResponderBorrarquiciera saber com puedo hacer para mostar en el servidor varios clientes es decir si tengo 6 equipos mas un servidor como hago para que desde el servidor pueda ver los 6 equipos al mismo tiempo ????
Disculpa la pregunta, pero ¿Como ejecuto el cliente? al momento de compilarlo solamente aparece el servidor, soy muy nuevo en java y debido a que sigo sin poder usar el JMF para guardar video me pareció mejor idea transmitirlo como imagenes.
ResponderBorrarBien Hermano ya con esto me solucionado el proyecto final te agradesco mucho solo unos cuantos arreglos pero gracias hermano,saludos
ResponderBorrarhhoolllaa
ResponderBorrarsalu2 amigos muii bueno tu proyecto pero me salen erroes
ResponderBorrarimport javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.Processor;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
package javax.media doesnt exit como puedo solucionar este incoveniente..
http://www.oracle.com/technetwork/java/javase/download-142937.html
ResponderBorrarHola, soy nueva en esta página web.
ResponderBorrarTengo que hacer un proyecto muy parecido, tengo que transmitir vídeo (capturado del display de mi ordenador) con UDP.
He escrito algo de código, pero estoy intentando que el cliente pueda ver en el display la imagen. Para ello estaba leyendo tus posts. ¿Me puedes ayudar a adaptar tus consejos a mi proyecto? En ese caso te proporcionaré mi dirección de email.
Muchísimas gracias.
Hola amiga, a qué te refieres con display. Estoy seguro que podremos ayudarte con tu proyecto.
ResponderBorrarCon display me refiero al monitor de un PC. El proyecto se trata de con un frame grabber capturar la imagen del monitor, guardarla y transmitirla por multicast con UDP. He empezado a escribir el Cliente y el Servidor, y estoy intentando enviar una imagen .jpg al cliente pero no se como abrir un reproductor o ventana con la imagen que se está reciviendo. Si tienes tiempo, me gustaría enviarte por correo mi código (no es muy diferente a lo que se puede encontrar por internet). A ver si me puedes ayudar.
ResponderBorrarGracias
El código es casi el mismo que el que se ha publicado aquí amiga, solo tienes que cambiar la fuente que en tu caso sería un screenshot de tu pantalla, luego enviarlo a una dirección multicast. Saludos
ResponderBorrarDe acuerdo, lo provaré, muchas gracias.
ResponderBorrarHola amigo, me parece excelente el proyecto y me gustaría hacerle unas modificaciones para poder enviar un archivo de video que ya se encuentra en mi máquina. Cambié el MediaLocator para este fin pero no estoy seguro de como manipular los frames, ya que tal como está me saca errores (Failed to configure: com.sun.media.PlaybackEngine@1a643473).
ResponderBorrarTe agradecería mucho que pudieras colaborarme y nuevamente felicitaciones.
Excelente, funsiona sin problema!!
ResponderBorrarQue tal rolando tengo un problemita mira necesito controlar una cámara ip con una interfaz hecha en java y no se por donde empezar el proyecto de antemano muchas gracias por tus sugerencias.
ResponderBorrarBuen día Edgar, te recomiendo leer este post: http://rolandopalermo.blogspot.com/2012/03/camara-ip-cam-java.html
ResponderBorrarNo te olvides de seguirnos a través de Facebook para enterarte de muchas novedades.
Saludos
Gracias Rolando por Tu post, esta muy bueno,,,,
ResponderBorrarPero tengo una duda como seria la adaptacion para que el receptor del video, en este caso no sea quien abre el puerto osea el ServerSocket, sino que sea el cliente el socket que se conecta al servidor por asi decirlo...
Seria bueno que el video se transmitiera del ServerSocket a los Socket que se conectann,....
echame una mano, que estado intentando por no encuentro como...
Este comentario ha sido eliminado por el autor.
ResponderBorrarGracias .
ResponderBorrarsolo una pregunta puedo transmitir el audio de las misma manera sin utilizar R.T.P
muy bueno el post amigo.. una pregunta.. para hacerlo con ipv6 como seria?
ResponderBorrara mi no me sale no he podido configurar la camara integrada del portatil :( con el JMF ayudenme :( !!!! no he podido ver como funciona :(
ResponderBorrarpublic Acceder2Frames() {
ResponderBorrarinitComponents();
dispositivo = CaptureDeviceManager.getDevice(source);
++++++ localizador = dispositivo.getLocator();+++++++
timer = new Timer (1, new ActionListener () { //Cada 1 milisegundo capturará el frame de video
public void actionPerformed(ActionEvent e) {
FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
buffer = fgc.grabFrame();
// Convert it to an image
buffer_image = new BufferToImage((VideoFormat)buffer.getFormat());
img = buffer_image.createImage(buffer);
panelCaptura.setImage(img);
}
});
iniciarCaptura();
}
en la parte k estan los signos +++ (mas) me da un error alguien podria ayudarme
Coméntanos el error Agustin.
ResponderBorrarOye amigo tengo un problema en
ResponderBorrarlocalizador = dispositivo.getLocator();
espero tu ayuda
Grax
Al ejecutar el cliente da un error que tiene que ver la liena de codigo:
ResponderBorrarlocalizador = dispositivo.getLocator();
ayuda con esto porfavor necesito lo necesito de urgencia
hola cuando intento ejecutar el cliente me saltan estos errores:
ResponderBorrarException 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)
porfavor necesito ayuda para correr el programa
Excelente, me gustaría saber como podría hacer lo mismo utilizando cámaras Ip. Gracias de antemano ;)
ResponderBorrarHola Kenny, te recomiendo revisar el siguiente enlace: http://blog.rolandopalermo.com/2012/03/camara-ip-cam-java.html
BorrarHola Rolando, JMF no detecta mi cam... :/
ResponderBorrarHola, WVC80N, sorprendente equipo, le acabo de descubrir visión nocturna ajustándole los codecs, bueno los parámetros de los codecs, no es gran cosa pero consigue tonos blancos de tonos a un 80 % o 90 % oscuros en photoshop x ejemplo. La seguridad es excelente tiene audio, compatible con gran cantidad de equipos con navegación rtsp, alarma y acceso multiusuario. Diferenciación espacial hace saltar una alarma con movimiento en un recuadro, la wifi necesita ampliar sus configuraciones al igual que muchos teléfonos móviles pero va. Graba en dispositivos remotos, configurable, etc, reset, luz azul: de cámara azul, modos de luz azul, etc. Supongo que no tardaran en hacer otro firmware con control por aplicacion o un modelo fisheye nuevo, aplicativos dns, twitter, ...
ResponderBorrarQue tendría que hacer para reproducir un video local, Que no sea por una webcam o otro tipo de cámara.
ResponderBorrar