elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Conectar java + web cam
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Conectar java + web cam  (Leído 7,014 veces)
mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Conectar java + web cam
« en: 17 Mayo 2012, 06:19 am »

Buenas señores estoy desarrollando en android una aplicacion que incluye manejo de camara para hacer los testeos esoty usando una clase que encontre en google en la que puedo enlazar la camara del emuladro de android con mi web cam de mi laptop pero lo malo que no me sale me tira siempre este error :

<Unable to find a suitable player>

aqui les dejo la clase que encontre a ver si me dan una manito porque sale eso

Código
  1. import java.awt.Dimension;
  2. import java.awt.image.BufferedImage;
  3. import java.io.BufferedOutputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.IOException;
  6. import java.io.OutputStream;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. import java.util.Vector;
  10.  
  11. import javax.imageio.ImageIO;
  12. import javax.media.Buffer;
  13. import javax.media.CannotRealizeException;
  14. import javax.media.CaptureDeviceInfo;
  15. import javax.media.CaptureDeviceManager;
  16. import javax.media.Format;
  17. import javax.media.Manager;
  18. import javax.media.MediaLocator;
  19. import javax.media.NoDataSourceException;
  20. import javax.media.NoPlayerException;
  21. import javax.media.Player;
  22. import javax.media.control.FrameGrabbingControl;
  23. import javax.media.format.RGBFormat;
  24. import javax.media.format.VideoFormat;
  25. import javax.media.protocol.CaptureDevice;
  26. import javax.media.protocol.DataSource;
  27. import javax.media.util.BufferToImage;
  28.  
  29. /**
  30.  * A disposable class that uses JMF to serve a still sequence captured from a
  31.  * webcam over a socket connection. It doesn't use TCP, it just blindly captures
  32.  * a still, JPEG compresses it, and pumps it out over any incoming socket
  33.  * connection.
  34.  *
  35.  * @author Tom Gibara
  36.  *
  37.  */
  38.  
  39. public class WebcamBroadcaster {
  40.  
  41.        public static boolean RAW = false;
  42.  
  43.        private static Player createPlayer(int width, int height) {
  44.                try {
  45.                        Vector<CaptureDeviceInfo> devices = CaptureDeviceManager.getDeviceList(null);
  46.                        for (CaptureDeviceInfo info : devices) {
  47.  
  48.                                Format[] formats = info.getFormats();
  49.                                for (Format format : formats) {
  50.                                        if (!(format instanceof RGBFormat))
  51.                                                continue;
  52.                                        RGBFormat rgb = (RGBFormat) format;
  53.                                        Dimension size = rgb.getSize();
  54.                                        if (size.width != width || size.height != height)
  55.                                                continue;
  56.                                        if (rgb.getPixelStride() != 3)
  57.                                                continue;
  58.                                        if (rgb.getBitsPerPixel() != 24)
  59.                                                continue;
  60.                                        if (rgb.getLineStride() != width * 3)
  61.                                                continue;
  62.                                        MediaLocator locator = info.getLocator();
  63.                                        DataSource source = Manager.createDataSource(locator);
  64.                                        source.connect();
  65.                                        System.out.println("Done");
  66.                                        ((CaptureDevice) source).getFormatControls()[0]
  67.                                                        .setFormat(rgb);
  68.                                        return Manager.createRealizedPlayer(source);
  69.                                }
  70.                        }
  71.                } catch (IOException e) {
  72.                        e.printStackTrace();
  73.                } catch (NoPlayerException e) {
  74.                        e.printStackTrace();
  75.                } catch (CannotRealizeException e) {
  76.                        e.printStackTrace();
  77.                } catch (NoDataSourceException e) {
  78.                        e.printStackTrace();
  79.                }
  80.                return null;
  81.        }
  82.  
  83.        public static void main(String[] args) {
  84.                int[] values = new int[args.length];
  85.                for (int i = 0; i < values.length; i++) {
  86.                        values[i] = Integer.parseInt(args[i]);
  87.                }
  88.  
  89.  
  90.  
  91.                WebcamBroadcaster wb;
  92.                if (values.length == 0) {
  93.                        wb = new WebcamBroadcaster();
  94.                } else if (values.length == 1) {
  95.                        wb = new WebcamBroadcaster(values[0]);
  96.                } else if (values.length == 2) {
  97.                        wb = new WebcamBroadcaster(values[0], values[1]);
  98.                } else {
  99.                        wb = new WebcamBroadcaster(values[0], values[1], values[2]);
  100.                }
  101.  
  102.                wb.start();
  103.        }
  104.  
  105.        public static final int DEFAULT_PORT = 9889;
  106.        public static final int DEFAULT_WIDTH = 320;
  107.        public static final int DEFAULT_HEIGHT = 240;
  108.  
  109.        private final Object lock = new Object();
  110.  
  111.        private final int width;
  112.        private final int height;
  113.        private final int port;
  114.  
  115.        private boolean running;
  116.  
  117.        private Player player;
  118.        private FrameGrabbingControl control;
  119.        private boolean stopping;
  120.        private Worker worker;
  121.  
  122.        public WebcamBroadcaster(int width, int height, int port) {
  123.                this.width = width;
  124.                this.height = height;
  125.                this.port = port;
  126.        }
  127.  
  128.        public WebcamBroadcaster(int width, int height) {
  129.                this(width, height, DEFAULT_PORT);
  130.        }
  131.  
  132.        public WebcamBroadcaster(int port) {
  133.                this(DEFAULT_WIDTH, DEFAULT_HEIGHT, port);
  134.        }
  135.  
  136.        public WebcamBroadcaster() {
  137.                this(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_PORT);
  138.        }
  139.  
  140.        public void start() {
  141.                synchronized (lock) {
  142.                        if (running)
  143.                                return;
  144.                        player = createPlayer(width, height);
  145.                        if (player == null) {
  146.                                System.err.println("Unable to find a suitable player");
  147.                                return;
  148.                        }
  149.                        player.start();
  150.                        control = (FrameGrabbingControl) player
  151.                                        .getControl("javax.media.control.FrameGrabbingControl");
  152.                        worker = new Worker();
  153.                        worker.start();
  154.                        running = true;
  155.                }
  156.        }
  157.  
  158.        public void stop() throws InterruptedException {
  159.                synchronized (lock) {
  160.                        if (!running)
  161.                                return;
  162.                        if (player != null) {
  163.                                control = null;
  164.                                player.stop();
  165.                                player = null;
  166.                        }
  167.                        stopping = true;
  168.                        running = false;
  169.                        worker = null;
  170.                }
  171.                try {
  172.                        worker.join();
  173.                } finally {
  174.                        stopping = false;
  175.                }
  176.        }
  177.  
  178.        private class Worker extends Thread {
  179.  
  180.                private final int[] data = new int[width * height];
  181.  
  182.                @Override
  183.                public void run() {
  184.                        ServerSocket ss;
  185.                        try {
  186.                                ss = new ServerSocket(port);
  187.  
  188.                        } catch (IOException e) {
  189.                                e.printStackTrace();
  190.                                return;
  191.                        }
  192.  
  193.                        while (true) {
  194.                                FrameGrabbingControl c;
  195.                                synchronized (lock) {
  196.                                        if (stopping)
  197.                                                break;
  198.                                        c = control;
  199.                                }
  200.                                Socket socket = null;
  201.                                try {
  202.                                        socket = ss.accept();
  203.  
  204.                                        Buffer buffer = c.grabFrame();
  205.                                        BufferToImage btoi = new BufferToImage((VideoFormat) buffer
  206.                                                        .getFormat());
  207.                                        BufferedImage image = (BufferedImage) btoi
  208.                                                        .createImage(buffer);
  209.  
  210.                                        if (image != null) {
  211.                                                OutputStream out = socket.getOutputStream();
  212.                                                if (RAW) {
  213.                                                        image.getWritableTile(0, 0).getDataElements(0, 0,
  214.                                                                        width, height, data);
  215.                                                        image.releaseWritableTile(0, 0);
  216.                                                        DataOutputStream dout = new DataOutputStream(
  217.                                                                        new BufferedOutputStream(out));
  218.                                                        for (int i = 0; i < data.length; i++) {
  219.                                                                dout.writeInt(data[i]);
  220.                                                        }
  221.                                                        dout.close();
  222.                                                } else {
  223.                                                        ImageIO.write(image, "JPEG", out);
  224.                                                }
  225.                                        }
  226.  
  227.                                        socket.close();
  228.                                        socket = null;
  229.                                } catch (IOException e) {
  230.                                        e.printStackTrace();
  231.                                } finally {
  232.                                        if (socket != null)
  233.                                                try {
  234.                                                        socket.close();
  235.                                                } catch (IOException e) {
  236.                                                        /* ignore */
  237.                                                }
  238.                                }
  239.  
  240.                        }
  241.  
  242.                        try {
  243.                                ss.close();
  244.                        } catch (IOException e) {
  245.                                /* ignore */
  246.                        }
  247.                }
  248.  
  249.        }
  250.  
  251. }
  252.  


En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Conectar java + web cam
« Respuesta #1 en: 17 Mayo 2012, 06:58 am »

Puedes seguir los pasos que mencionan en esta pregunta hecha en StackOverflow: http://stackoverflow.com/questions/1276450/how-to-use-web-camera-in-android-emulator-to-capture-a-live-image

--

Ahora ciertamente no sabia que se podía hacer eso. Pero he visto ese error en otras ocasiones con el uso JMF y puedo decir que es posible que tu cámara sea incompatible y noe sté siendo reconocida por el runtime, o que tal vez en este caso este mal las direcciones en SocketCamera. En todo caso este es un error bastante dificil de corregir, y requiere bastante para encontrar una solución válida. Sin mencionar la poca documentación que existe al respecto.

Por otro lado puede ser que sea algo trivial y simple y con las instrucciones se resuelva. esperemos que este sea el caso. Porque si no es así me temo que me será muy dificil ayudarte en un futuro cercano.

Saludos


En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: Conectar java + web cam
« Respuesta #2 en: 17 Mayo 2012, 07:00 am »

Si se puede tiene que salirme para publicarlo en el foro :D me dijeron que cambie este parametro YUVFormat lugar de RGBFormat,ayudame en esa parte me salen errores porfavor !!!!
Aparentemente parece que funciona porque se prende el foco de mi camara!!!
pero no se ve nada:S mi duda esta si esta bien lo que he hecho

Código
  1. private static Player createPlayer(int width, int height) {
  2.        try {
  3.            Vector<CaptureDeviceInfo> devices = CaptureDeviceManager.getDeviceList(null);
  4.            for (CaptureDeviceInfo info : devices) {
  5.  
  6.                Format[] formats = info.getFormats();
  7.                for (Format format : formats) {
  8.                    if (!(format instanceof YUVFormat)) {
  9.                        continue;
  10.                    }
  11.                    //RGBFormat rgb = (RGBFormat) format;
  12.  
  13.                    YUVFormat YUV = (YUVFormat)format;
  14.                    //Dimension size = rgb.getSize();
  15.  
  16.                    Dimension size =YUV.getSize();
  17.                    if (size.width != width || size.height != height) {
  18.                        continue;
  19.                    }
  20.                   // if(YUV.get)
  21.                   // if (rgb.getPixelStride() != 3) {
  22.                    //    continue;
  23.                   // }
  24.                   // if (rgb.getBitsPerPixel() != 24) {
  25.                     //   continue;
  26.                   // }
  27.                  //  if (rgb.getLineStride() != width * 3) {
  28.                    //    continue;
  29.                  //  }
  30.                    MediaLocator locator = info.getLocator();
  31.                    DataSource source = Manager.createDataSource(locator);
  32.                    source.connect();
  33.                    System.out.println("XD");
  34.                    ((CaptureDevice) source).getFormatControls()[0].setFormat(YUV);
  35.                    return Manager.createRealizedPlayer(source);
  36.                }
  37.            }
  38.        } catch (IOException e) {
  39.            e.printStackTrace();
  40.        } catch (NoPlayerException e) {
  41.            e.printStackTrace();
  42.        } catch (CannotRealizeException e) {
  43.            e.printStackTrace();
  44.        } catch (NoDataSourceException e) {
  45.            e.printStackTrace();
  46.        }
  47.        return null;
  48.    }
  49.  
  50.  
  51.  
« Última modificación: 17 Mayo 2012, 07:09 am por mapers » En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Conectar java + web cam
« Respuesta #3 en: 17 Mayo 2012, 07:26 am »

Pues no veo nada sustancialmente mal, además no es que haya trabajado mucho con SMF o WebcamBroadcaste (con esta última no he trabajado nunca), pero leyendo he encontrado un comentario en respuesta a un problema de un usuario que tenia blackscreen y lo solucionaba así:

Citar

Had same problem of black screen but got it working.

Check that:
1)
Your Preview Class has the following (original) methods

public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
}

2) Your Manifest File contain CAMERA and INTERNET User permissions.

Espero sea información de ayuda.

Saludos
En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: Conectar java + web cam
« Respuesta #4 en: 17 Mayo 2012, 07:31 am »

En sintesis parece que si funciona la modificacion que hize porque cuando le doy al navegador mi ip de mi pc y el puerto que uso (127.0.0.1:9889) se ven los fotogramas lo malo que tengo que estar actualizando ( F5) para que se vea el siguiente fotograma ;
no tienes algun software que me puedas recomendar para verlos mas fluidos.
En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Conectar java + web cam
« Respuesta #5 en: 17 Mayo 2012, 07:43 am »

Revisando un poco por la web, me he dado cuenta que el emulador de Android para ICS soporta directamente la utilización de camaras web para las aplicaciones que requieran la cámara del telefono. Así que podrías probar a actualizar tu ADK y crear un AVD con ICS.

También te sugiero que revises estos enlaces:
http://www.inter-fuser.com/2009/09/live-camera-preview-in-android-emulator.html
http://www.ecole.ensicaen.fr/~reynaud/android/webcam_in_android_emulator.html

Que en tal caso de que no puedas hacer las pruebas con un AVD con ICS te pueden ser de gran ayuda.

Saludos
En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: Conectar java + web cam
« Respuesta #6 en: 17 Mayo 2012, 07:53 am »

De uno de esos enlaces lo e sacado pero no me conecta el android :S no se porque te podria pasar mi proyecto para que lo veas :S o no se puede 
En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Conectar java + web cam
« Respuesta #7 en: 17 Mayo 2012, 07:55 am »

Porque no usas el ADK más reciente y el emulador de ICS así te ahorras todos estos problemas.

Saludos
En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: Conectar java + web cam
« Respuesta #8 en: 17 Mayo 2012, 08:05 am »

como asi ???? pero tengo presente que la camara del emulador de androi no funciona
En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: Conectar java + web cam
« Respuesta #9 en: 17 Mayo 2012, 08:15 am »

Pero que emulador tienes? Hasta donde he visto el emulador de Ice Cream Sandwich soporta el uso de camaras web para aplicaciones que requieran la cámara del teléfono.

Aqui tienes la guia para instalar el último Android SDK: http://developer.android.com/sdk/installing.html

También asegurate de tener el último ADT (porque imagino que estás desde Eclipse)

Crea un nuevo dispositivo en el AVD Manager que use ICS y que tenga la camara activada por defecto. Eso debería bastar.

Saludos
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Conectar a Internet con Java...
Java
slim182 0 3,998 Último mensaje 24 Agosto 2005, 16:16 pm
por slim182
conectar java a dispositivo usb
Java
airhck 0 4,014 Último mensaje 24 Diciembre 2010, 00:20 am
por airhck
Conectar java con oracle 10g ex
Java
kch_l 5 11,125 Último mensaje 11 Octubre 2011, 18:10 pm
por sanbartels
Conectar java con sql server 2008
Java
Rijhording 2 17,680 Último mensaje 25 Febrero 2011, 16:21 pm
por Rijhording
Otra forma de conectar java~sql
Java
_-Javier-_ 3 4,023 Último mensaje 18 Marzo 2011, 00:53 am
por _-Javier-_
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines