Gravar Video com a API Direct Show Java (DSJ)

Boa Tarde Galera estou precisando gravar video com o DSJ mas não estou conseguindo,já consegui implementar um frame que grave foto,gostaria de ajuda para implementar o video.desde já obrigado.

segue abaixo o codigo :


package capturarfotos;

//Bibliotecas necessárias para a execução do programa.
import de.humatic.dsj.*;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.io.File;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

//Classe para a captura da foto, utilizando a API DirectShow
public class CapturarFotos implements java.beans.PropertyChangeListener
{
    private DSCapture graph;
    
    public static void main (String args[]){
    new CapturarFotos();
    }
    
    public CapturarFotos()
    {
        createGraph();
    }
    
    //Método que inicializa a webcam e configura a mesma em frame.
    public void createGraph()
    {
            final javax.swing.JDialog frame = new JDialog();
            frame.setTitle("Capturar Fotos");

            DSFilterInfo[][] dsi = DSCapture.queryDevices(DSCapture.SKIP_AUDIO);
            graph = new DSCapture(DSFiltergraph.DD7,dsi[0][0],false,DSFilterInfo.doNotRender(),this);

            frame.add(java.awt.BorderLayout.CENTER,graph.asComponent());

            final javax.swing.JButton btnCapture = new javax.swing.JButton("Capturar");
           

            //Configurando o botão de captura;
            btnCapture.addActionListener(new java.awt.event.ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e)
                {
                    if((graph.getState() == DSCapture.PREVIEW))
                    {
                        BufferedImage gravar = graph.getImage();
                        
                        Image img = gravarImagem(gravar);
                    
                        frame.dispose();
                        graph.dispose();
                    }
                    else
                    {
                        graph.setPreview();
                    }
                }
            });

            frame.add(java.awt.BorderLayout.NORTH,btnCapture);
            frame.setModal(true);
            frame.pack();
            frame.setVisible(true);
            frame.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
        
    }
    
    public void propertyChange(java.beans.PropertyChangeEvent pe)
    {
        switch(DSJUtils.getEventType(pe)){}
    }

    //Método que grava o dado capturado pela webcam.
    public Image gravarImagem(BufferedImage imagem)
    {
        JFileChooser fc = new JFileChooser();
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        String caminho = "";

        if(fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
            caminho = fc.getSelectedFile().getAbsolutePath();
            
            try
            {
                  ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho+"/fotoTeste.jpg"));
                  JOptionPane.showMessageDialog(null, "Imagem Capturada com Sucesso!");
                  return imagem.getScaledInstance(100, 100, Image.SCALE_DEFAULT);
            } 
            catch (IOException e)
            {
                  JOptionPane.showMessageDialog(null, "Não foi possivel encontrar " +
                  "o dispositivo para a captura da imagem.");
                  return null;
            }
        }else{
            return null;
        }
    }
}

Tem esse link,
http://www.s2i.com.br/2011/04/14/gravando-videos-com-o-dsj-direct-show-java/
Aqui tem isso que vc quer e muito mais…

tenho problemas em capturar o audio, ele fica atrasado em relação ao video, alguem ja passou por esse problema?

[quote=amiltonrn]Tem esse link,
http://www.s2i.com.br/2011/04/14/gravando-videos-com-o-dsj-direct-show-java/
Aqui tem isso que vc quer e muito mais…[/quote]

Já usei esse exemplo , mas não consegui rodar nada… acho que não entendi como o cara explica.você conseguiu gravar?

eu consegui fazer!, se quiser eu posto o codigo!

manda ai 0/

[code]package br.com.webcam;

import de.humatic.dsj.CaptureDeviceControls;
import de.humatic.dsj.DSCapture;
import de.humatic.dsj.DSFilterInfo;
import de.humatic.dsj.DSFiltergraph;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JTabbedPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import java.io.File;
import java.io.IOException;
/**
*

  • @author AmiLtiNhO
    */
    public class Tmp extends JFrame implements ActionListener{
    CaptureDeviceControls controls = null;
    JFrame frame = new JFrame();
    JTabbedPane pane = new JTabbedPane();
    DSFilterInfo[][] dsi = null;
    DSFilterInfo[][] dsiVideo = null;
    DSFilterInfo[][] dsiAudio = null;
    DSCapture graph = null;
    JButton btnCapturar = null;
    JButton btnCancelar = null;
    JButton btnGravar = null;
    JLabel aux = null;

     public Tmp(){
         super();
         getContentPane().setLayout(null);
         setVisible(true);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setSize(600,600);
         dsi = DSCapture.queryDevices();
         dsiVideo = DSCapture.queryDevices(DSCapture.SKIP_AUDIO);
         dsiAudio = DSCapture.queryDevices(DSCapture.SKIP_VIDEO);
         //dsi[0][0].setPreferredFormat(1);
         //graph = new DSCapture(DSFiltergraph.RENDER_NATIVE,dsi[0][0],true,dsi[0][0], null);
         graph = DSCapture.fromUserDialog(this, DSFiltergraph.VMR7,null);
         
         if(((DSCapture) graph).getActiveVideoDevice() != null){
             controls = ((DSCapture) graph).getActiveVideoDevice().getControls();
         }
         if (controls != null) {
             for (int i = CaptureDeviceControls.BRIGHTNESS; i < CaptureDeviceControls.FOCUS; i++) {
                 try {
                     //     jf.add(controls.getController(i, 0, true));
                 } catch (Exception e) {
                     System.out.println("Erro aou inserir controle: " + controls.getController(i, 0, true));
                 }
             }
         }
    
         graph.asComponent().setBounds(0, 0, 590, 450);
         graph.setPreview();
         add(graph.asComponent());
         //getContentPane().add(graph.asComponent());
         
         btnGravar = new JButton("Gravar");
         btnGravar.setBounds(287, 527, 89, 23);
         getContentPane().add(btnGravar);
         
         btnCancelar = new JButton("Cancelar");
         btnCancelar.setBounds(485, 527, 89, 23);
         getContentPane().add(btnCancelar);
         
         btnCapturar = new JButton("Capturar");
         btnCapturar.setBounds(386, 527, 89, 23);
         getContentPane().add(btnCapturar);
         
         repaint();
         validate();
         addEventos();
     }
    

    private void addEventos() {
    btnGravar.addActionListener(this);
    btnCapturar.addActionListener(this);
    btnCancelar.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
    if(e.getSource() == btnGravar){
    //Verifica se o dispositivo está no status PREVIEW
    if (graph.getState() == DSCapture.PREVIEW) {
    File f = new File(“NewVideo.avi”);
    graph.setCaptureFile(f.getAbsolutePath(), null, null, true);
    graph.record();
    //Se não estiver, muda o status atual para PREVIEW
    } else {
    graph.setPreview();
    }
    }
    if(e.getSource() == btnCapturar){

     	int nome = 0;
     	BufferedImage im = graph.getImage();
     	
     	try {
     		
     		 //JOptionPane.showMessageDialog(null, caminho);
     		File f = new File(nome+".jpg");
     		while(f.exists()){
     			nome = nome + 1;
     					
     			f = new File(nome+".jpg");
     		}
     		
     		ImageIO.write(im, "JPG", new File(nome+".jpg"));
     	} catch (IOException e1) {
     		// TODO Auto-generated catch block
     		e1.printStackTrace();
     	}
     	
     	
         
     }
     if(e.getSource() == btnCancelar){
     	JOptionPane.showMessageDialog(null, "parado");
     	repaint();
     	validate();
     	graph.stop();
     	graph.setPreview();
     	try {
     		Thread.sleep(2000);
     	} catch (InterruptedException e1) {
     		// TODO Auto-generated catch block
     		e1.printStackTrace();
     	}
     	System.exit(0);
     	
     }
    

    }

    public static void main(String args[]) {
    new Tmp();
    }
    }
    [/code]

Aqui ta criando um arquivo de video mas não tem nada,tipo fica com 0Kb

engraçado, aqui funcionou^^, tu add o .jar no projeto e add a dll na pasta do java?

Olha ai como ta aparecendo,eu clico em ‘‘gravar’’ ele congela a tela… isso é porque ele muda de modo de PREVIEW para modo de captura?