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:
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:
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
Tambien probe obteniendola con "vfw:Microsoft WDM Image Capture (Win32):0" y na de na :-[
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.
Tambien tengo un ejemplo que hace uso de lo que me cuentas pero no tampoco rula :-[
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
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?
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
Postealo pls ;)
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
Gracas :D voy a darle una ojeada ;)
De nada estoy probando estos codigos :
http://netload.in/dateiIesg05RkDt/src.zip.htm
Para ver que funciona la cam compilas el Viewer
El otro se supone que es para streaming pero aún no lo he hecho funcionar
PD : Si os da problemas al compilar el TestClass2 , os vais al metodo getDataSource de V4L4JDataSource y sustituis la forma de crear el framegrabber por :
String dev = "/dev/video0";
int w=640, h=480, std=1, channel = 0, qty = 60;
fg = vd.getJPEGFrameGrabber(w, h, channel, std, qty);
fg.startCapture();
Aun asi no me a funcionao