JMF: No detecta la Cam

Iniciado por Amerikano|Cls, 24 Marzo 2010, 17:31 PM

0 Miembros y 2 Visitantes están viendo este tema.

Amerikano|Cls

Saludos a todos, esta vez tengo un pequeño problema a ver si me pueden ayudar  :xD

Resulta que quiero hacer algo con el JMF y lo que se me ocurrio pues es capturar una foto de la WebCam, buscando en google di con este ejemplo:

Código (java) [Seleccionar]
import javax.swing.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;

public class SwingCapture extends Panel implements ActionListener
{
  public static Player player = null;
  public CaptureDeviceInfo di = null;
  public MediaLocator ml = null;
  public JButton capture = null;
  public Buffer buf = null;
  public Image img = null;
  public VideoFormat vf = null;
  public BufferToImage btoi = null;
  public ImagePanel imgpanel = null;

  public SwingCapture()
  {
    setLayout(new BorderLayout());
    setSize(320,550);

    imgpanel = new ImagePanel();
    capture = new JButton("Capture");
    capture.addActionListener(this);

    String str1 = "vfw:Logitech USB Video Camera:0";
    String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
    di = CaptureDeviceManager.getDevice(str1);
    ml = di.getLocator();

    try
    {
      player = Manager.createRealizedPlayer(ml);
      player.start();
      Component comp;

      if ((comp = player.getVisualComponent()) != null)
      {
        add(comp,BorderLayout.NORTH);
      }
      add(capture,BorderLayout.CENTER);
      add(imgpanel,BorderLayout.SOUTH);
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    Frame f = new Frame("SwingCapture");
    SwingCapture cf = new SwingCapture();

    f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
      playerclose();
      System.exit(0);}});

    f.add("Center",cf);
    f.pack();
    f.setSize(new Dimension(320,550));
    f.setVisible(true);   

  }


  public static void playerclose()
  {
    player.close();
    player.deallocate();
  }

  public void actionPerformed(ActionEvent e)
  {
    JComponent c = (JComponent) e.getSource();

    if (c == capture)
    {
      // Grab a frame
      FrameGrabbingControl fgc = (FrameGrabbingControl)
      player.getControl("javax.media.control.FrameGrabbingControl");
      buf = fgc.grabFrame();

      // Convert it to an image
      btoi = new BufferToImage((VideoFormat)buf.getFormat());
      img = btoi.createImage(buf);

      // show the image
      imgpanel.setImage(img);

      // save image
      saveJPG(img,"c:\\test.jpg");
    }
  }

  class ImagePanel extends Panel
  {
    public Image myimg = null;

    public ImagePanel()
    {
      setLayout(null);
      setSize(320,240);
    }

    public void setImage(Image img)
    {
      this.myimg = img;
      repaint();
    }

    public void paint(Graphics g)
    {
      if (myimg != null)
      {
        g.drawImage(myimg, 0, 0, this);
      }
    }
  }

  public static void saveJPG(Image img, String s)
  {
    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = bi.createGraphics();
    g2.drawImage(img, null, null);

    FileOutputStream out = null;
    try
    {
      out = new FileOutputStream(s);
    }
    catch (java.io.FileNotFoundException io)
    {
      System.out.println("File Not Found");
    }

    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
    param.setQuality(0.5f,false);
    encoder.setJPEGEncodeParam(param);

    try
    {
      encoder.encode(bi);
      out.close();
    }
    catch (java.io.IOException io)
    {
      System.out.println("IOException");
    }
  }

}


Pero el problema es que al compilarlo y ejecutarlo me lanza una excepcion: NullPointerException, pues al parecer no detecto la cam y devolvio null, en la siguiente linea:

Código (java) [Seleccionar]
ml = di.getLocator();

El problema no es con la cam porque el programa que trae el JMF por defecto para hacer las pruebas si la detecta correctamente y me muestra imagen, pero en este ejmplo no. A ver si me ayudan con esto, de antemano gracias  ;D




Mi blog:
http://amerikanocls.blogspot.com

Amerikano|Cls

Tambien probe obteniendola con "vfw:Microsoft WDM Image Capture (Win32):0" y na de na  :-[




Mi blog:
http://amerikanocls.blogspot.com

Leyer

Esto siempre da esos problemas a mi tambien me paso hace mucho y no lo pude resolver :xD supongo que tendras que buscar el nombre de tu dispositivo y colocarlo no se me ocurre otra, intenta con javax.media.cdm.CaptureDeviceManager.getDeviceList(); te ayudara mas pero no uso windows y esto en linux si que es un problema :xD

Un Saludo.

Amerikano|Cls

Tambien tengo un ejemplo que hace uso de lo que me cuentas pero no tampoco rula  :-[




Mi blog:
http://amerikanocls.blogspot.com

Debci

Cita de: LEYER en 24 Marzo 2010, 19:20 PM
Esto siempre da esos problemas a mi tambien me paso hace mucho y no lo pude resolver :xD supongo que tendras que buscar el nombre de tu dispositivo y colocarlo no se me ocurre otra, intenta con javax.media.cdm.CaptureDeviceManager.getDeviceList(); te ayudara mas pero no uso windows y esto en linux si que es un problema :xD

Un Saludo.
yo lo he hecho correr en linux xD

Saludos

Amerikano|Cls

Cita de: ..::| D3Bć1 |::. en 24 Marzo 2010, 21:31 PM
Cita de: LEYER en 24 Marzo 2010, 19:20 PM
Esto siempre da esos problemas a mi tambien me paso hace mucho y no lo pude resolver :xD supongo que tendras que buscar el nombre de tu dispositivo y colocarlo no se me ocurre otra, intenta con javax.media.cdm.CaptureDeviceManager.getDeviceList(); te ayudara mas pero no uso windows y esto en linux si que es un problema :xD

Un Saludo.
yo lo he hecho correr en linux xD

Saludos

El mismo ejemplo que puse?




Mi blog:
http://amerikanocls.blogspot.com

Debci

Cita de: Amerikano|Cls en 24 Marzo 2010, 22:44 PM
Cita de: ..::| D3Bć1 |::. en 24 Marzo 2010, 21:31 PM
Cita de: LEYER en 24 Marzo 2010, 19:20 PM
Esto siempre da esos problemas a mi tambien me paso hace mucho y no lo pude resolver :xD supongo que tendras que buscar el nombre de tu dispositivo y colocarlo no se me ocurre otra, intenta con javax.media.cdm.CaptureDeviceManager.getDeviceList(); te ayudara mas pero no uso windows y esto en linux si que es un problema :xD

Un Saludo.
yo lo he hecho correr en linux xD

Saludos

El mismo ejemplo que puse?
No lo vi en sun

Salu2

Amerikano|Cls





Mi blog:
http://amerikanocls.blogspot.com

Debci


jezu00

#9
Lo resolvisteis? porque yo lo he intentado instalar en ubuntu y solo me detecta el microfono , y esta claro que la webcam funciona.

Esto del jmf es una basura la verda. he mirado los .java y no los modifican desde 2001 o 2003 ya les vale como si no hubiese avanzao la cosa  


EDITADO :

He llegado a un proyecto alternativo a jmf , se llama fmj : http://fmj-sf.net/

Freedom for Media in Java es una alternativa a jmf de codigo abierto con , en teoria, las mismas funcionalidades que jmf captura de video ,transmisión multimedia..

lo intentare probar

EDITADO2:

Si en terminal poneis  gstreamer-properties

podeis ver la configuracion del micro ,cam etc hay me he dado cuenta de que tengo la camra como v4l2 que es una versión nueva de v4l y creo que jmf no es compatible con v4l2

Sigo probando cosas

EDITADO3:

La unica solución es :
http://code.google.com/p/v4l4j/

lo he compilado y en principio parece que funciona sus tests

EDITADO4:

al final lo he conseguido con v4l4j

/usr/lib/jvm/java-6-sun/jre/lib/i386 en ese directorio libv4l4j.so
/usr/lib/jvm/java-6-sun/jre/lib/ext en este v4l4j.jar junit-4.8.2.jar

leer el readme para instalarlo según ellos ponen pero al final he tenido que hacer eso a mano para hacerlo funcionar