Gravar Video com 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;
        }
    }
}