JMF. Could not connect to capture device

3 respostas
E

Estou com um problema com o Java Media Framework, preciso fazer uma aplicação para tirar uma foto pela webcam, o meu programa até aparece a tela perguntando qual dispositivo eu quero usar, mas quando eu seleciono o dispositivo ele da esse erro:
java.io.IOException: Could not connect to capture device

Alguem sabe o que pode ser?

Abaixo o código que eu estou usando, agradeço quem poder ajudar.

package util;
import java.awt.BorderLayout;  
import java.awt.Component;  
import java.awt.Graphics;  
import java.awt.Image;  
import java.awt.Panel;  
import java.awt.image.RenderedImage;  
import java.io.File;  
import java.io.IOException;  
  
import javax.imageio.ImageIO;  
import javax.media.Buffer;  
import javax.media.CaptureDeviceInfo;  
import javax.media.Manager;  
import javax.media.MediaLocator;  
import javax.media.Player;  
import javax.media.cdm.CaptureDeviceManager;  
import javax.media.control.FrameGrabbingControl;  
import javax.media.format.VideoFormat;  
import javax.media.util.BufferToImage;  
import javax.swing.JButton;  
import javax.swing.JOptionPane;  
import javax.swing.JPanel;  
  
  
public class CapturaFoto extends JPanel {  
      
      
    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;  
  
    private static final long serialVersionUID = 1L;  
    private JButton captura = null;  
  
  
    public CapturaFoto() {  
        super();  
        initialize();  
    }  
  
  
    private void initialize() {  
        this.setLayout(new BorderLayout());  
        this.setSize(327, 259);  
        this.add(getCaptura(), BorderLayout.SOUTH);  
        this.setVisible(true);  
          
  
        String str2 = "vfw//0";  
        di = CaptureDeviceManager.getDevice(str2);  
        ml =  new MediaLocator("vfw://0");  
        try {  
            player = Manager.createRealizedPlayer(ml);  
            player.start();  
            Component comp;  
            if ((comp = player.getVisualComponent()) != null) {  
                add(comp, BorderLayout.NORTH);  
            }  
            add(captura, BorderLayout.SOUTH);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
      
    }  
  
    public void gravaImg (Image imagem){          
        String caminho = "C:\\" + "\\Fotos\\"+"001"+".JPG";  
        try {  
            ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho));  
            JOptionPane.showMessageDialog(this, "Imagem Capturada!");  
        } catch (IOException e) {  
            JOptionPane.showMessageDialog(null, "não foi possivel encontrar " +  
                    "o dispositivo para a captura da imagem.");  
            e.printStackTrace();  
        }  
          
    }  
    private JButton getCaptura() {  
        if (captura == null) {  
            captura = new JButton("Captura");  
            captura.setBounds(50, 50, 50, 50);  
            captura.addActionListener(new java.awt.event.ActionListener() {  
                public void actionPerformed(java.awt.event.ActionEvent e) {  
                    FrameGrabbingControl fgc = (FrameGrabbingControl) player  
                            .getControl("javax.media.control.FrameGrabbingControl");  
                    buf = fgc.grabFrame();  
                    btoi = new BufferToImage((VideoFormat) buf.getFormat());  
                    img = btoi.createImage(buf);  
                    gravaImg(img);  
                }  
            });  
        }  
        return captura;  
    }  
      
    class ImagePanel extends Panel {  
  
        private static final long serialVersionUID = 1L;  
        public Image myimg = null;  
  
        public ImagePanel() {  
            JOptionPane.showMessageDialog(null, "setando a classe");  
            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 main(String[] args) {
    	CapturaFoto c = new CapturaFoto();
    	c.setVisible(true);
	}
}

3 Respostas

E

Cara estes tempos atrás fiz um programa para isso porém utilizei o DSJ, achei bem melhor e mais simples de se utilizar.

Se você quiser utilizar ou ver como ficou é só acessar o link abaixo, fiz essa aplicação utilizando o DSJ.
http://www.thinkti.com.br/webcam.html

Espero que ajude,

abs,

Evandro

J

Evandro_Contato:
Cara estes tempos atrás fiz um programa para isso porém utilizei o DSJ, achei bem melhor e mais simples de se utilizar.

Se você quiser utilizar ou ver como ficou é só acessar o link abaixo, fiz essa aplicação utilizando o DSJ.
http://www.thinkti.com.br/webcam.html

Espero que ajude,

abs,

Evandro

jmf tá descontinuada hà muito tempo. Eu mesmo venho postando a mesma resposta em tópicos porque o pessoal não procura no fórum. E já faz anos que venho fazendo isso. Eu imagino que a jmf não funciona mais no win7, já que a vfw(vídeo for windows) foi abolida ainda na época do vista.

soaresinfo

Cara, acho que se há uma forma decente de ter webcam integrado com java multiplataforma, uma alternativa caso seja possível, é integrar flash com algum componente java e fazer controle via socket. Nunca fiz isso e nem sei se é possível, quem sabe alguém anima testar.

Criado 5 de novembro de 2011
Ultima resposta 7 de nov. de 2011
Respostas 3
Participantes 4