Ajuda para JMF(java media framework)!

5 respostas
java.filipe

Boa tarde, comunidade java.
Necessito da seguinte ajuda.
Estou criando uma aplicação stand-alone onde tenho a necessidade de capturar uma foto através de uma webcam.
Em minhas pesquisas, descobri que a API utilizada para este fim é a JMF.
Então galera, preciso de ajuda para entender como contruir um Jframe ou JDialog, que irá exibir a imagem de minha webcam e permitir que eu grave o arquivo em disco.
Acredito que esta não seja uma operação muito fácil, por isso necessito da contribuição de quem puder me ajudar…
Agradeço.

ATT,

Filipe Nonato

5 Respostas

ViniGodoy

Os do próprio site não servem?
http://java.sun.com/javase/technologies/desktop/media/jmf/reference/codesamples/index.html

java.filipe

Não consegui fazê-los funcionarem…aff
preciso de ajuda

A

java.filipe:
Não consegui fazê-los funcionarem…aff
preciso de ajuda

Você já instalou a JMF ?

Uma vez tudo instalado, se vc quiser eu tenho um código que mostra a imagem da WebCam em um JPanel, só não tenho a parte de capturar e gravar a imagem em sí.

Sds

André
:?

java.filipe

Instalei já …velho…
Me mande este código…por favor!!!Tem como!!!
Depois daí eu vejo como funciona este framework…
Estou no aguardo…
Qualquer coisa pode me mandar no email…
[email removido]

abraços

A
java.filipe:
Instalei já ....velho... Me mande este código...por favor?!?!?!??!Tem como?!?! Depois daí eu vejo como funciona este framework..... Estou no aguardo... Qualquer coisa pode me mandar no email.... [email removido].... abraços
Segue o código:
package captura;

/**
 *
 * @author André
 */

import java.awt.*;
import javax.media.*;
import javax.media.format.AudioFormat;
import javax.media.format.VideoFormat;
import javax.swing.*;
import java.awt.event.*; 


public class Main {

public static Player player = null;   
public static CaptureDeviceInfo di = null;   
public static MediaLocator ml = null;



//-------- Inicio
 public static void main(String[] args) {
     
//CaptureDeviceInfo deviceInfo =
//CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");

//------------
// Busca de informações dos dispositivos de captura registrados
     
java.util.Vector deviceListVector = CaptureDeviceManager.getDeviceList(null);
    if (deviceListVector == null)
    {
          System.out.println("... error: media device list vector is null, program aborted");
          System.exit(0);
    }
    if (deviceListVector.size() == 0)
    {
          System.out.println("... error: media device list vector size is 0, program aborted");
          System.exit(0);
    }

    for (int x = 0; x < deviceListVector.size(); x++)
    {
        // display device name
        CaptureDeviceInfo deviceInfo = (CaptureDeviceInfo) deviceListVector.elementAt(x);
        String deviceInfoText = deviceInfo.getName();
        System.out.println("device " + x + ": " + deviceInfoText);

        // display device formats
        Format deviceFormat[] = deviceInfo.getFormats();

    for (int y = 0; y < deviceFormat.length; y++)
        {
                // serach for default video device
                if (deviceFormat[y] instanceof VideoFormat)
                {
                        System.out.println(">>> capture video device = " + deviceFormat[y].toString());
                }
                if (deviceFormat[y] instanceof AudioFormat)
                {
                        System.out.println(">>> capture audio device = " + deviceFormat[y].toString());
                }
       }
    }
     	System.out.println("fim da listagem ");
// --------
        
// Inicialização dos componentes para viusalização

JFrame frame1 = new JFrame("Primeiro teste de captura");  // JFrame de Teste        
JButton botao_stop =  new JButton("Sair");

//container onde serão adicionados todos componentes   
Container container1 = frame1.getContentPane();         
JPanel panel1 = new JPanel();

container1.add(botao_stop,BorderLayout.EAST);
botao_stop.addActionListener( new ActionListener(){ 
       public void actionPerformed(ActionEvent e){
           player.close();
           player.deallocate();
           System.exit(0);
       }
   });
   
String str1 = "vfw:Microsoft WDM Image Capture (Win32):0";
 

di = CaptureDeviceManager.getDevice(str1);   
ml = di.getLocator();   

    try    
    {   
      player = Manager.createRealizedPlayer(ml);
      System.out.println("Valor de time base: "+player.getTimeBase().getTime());
      player.start();

      Component comp, compcontrol;
      if ((comp = player.getVisualComponent()) != null)   
      {
        compcontrol = player.getControlPanelComponent();
        panel1.add(comp,BorderLayout.SOUTH);
        container1.add(compcontrol,BorderLayout.SOUTH);

      }   
    }    
    catch (Exception e)    
    {   
      e.printStackTrace();   
    }   
container1.add(panel1, BorderLayout.NORTH);

frame1.pack();    
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// fecha a aplicação
frame1.setVisible(true);
    
    }

}

Verifique no JMF Registry na Aba "Capture Device" se nos itens listados à esquerda aparece algo como "vfw".

Se sim, clique em cima dele e verifique na listagem da direita se existe a linha "NAME=vfw:Microsoft WDM Image Capture (Win32):0"
Se vc encontrar, mas se a descrição não bater com a que está acima, você deverá substituir a linha do programa por esta que está listada.
Nela o JMF Registry mostra como a sua webcam é referenciada pela JMF.

Avisa se deu certo!

Sds 8)

André Menegussi

Criado 17 de março de 2010
Ultima resposta 21 de mar. de 2010
Respostas 5
Participantes 3