Capture d'une video à l'aide de webcam sous java Netbeans [Résolu]

HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention - 11 déc. 2014 à 10:50 - Dernière réponse : HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention
- 24 déc. 2014 à 08:43
Bonjour, Cher Ami(e)s
j'ai un problème avec mon Projet

Mon projet parle sur l'enregistrement d'une vidéo à l'aide de Webcam sous Java Netbeans,j'arrive à visualiser le webcam a partir de mon interface netbeans ,il me reste a enregistrer une vidéo dans ma base de donnée sql ,pour cela j'ai besoin de votre aide Merci.
Je Compte sur vous
Afficher la suite 

Votre réponse

15 réponses

leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 12 déc. 2014 à 07:51
0
Merci
salut,
pour visualisé le flux vidéo issu de webcam tu utilises quel framework? cela pourrait nous situer sur l'aide à t'apporter
leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 15 déc. 2014 à 16:48
Salut! Ça aurait été intéressant de publié ta classe qui te permet de lire le flux issue de ta webcam ou source vidéo. A défaut de cela voici une classe que j'avais écrite pour un projet de VoIP. Tu y trouveras la méthode EnregistreVideo. Inspire toi de la classe pour résoudre ton problème; si éventuellement cela te pose un problème, n'hésite pas à demander.
package VideoConference_IP;

//import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.InetAddress;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.*;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.AudioFormat;
import javax.media.format.VideoFormat;
import javax.media.protocol.DataSource;
import javax.media.rtp.*;
import javax.media.rtp.event.*;
import javax.media.util.BufferToImage;
import java.io.*;
import java.util.concurrent.TimeoutException;

/**
 *<p>Titre:EnvoyerCaptureMedia </p>
 * <p>Description : Classe permettant de recevoir des flux audio et video via RTP
 * (nous estimons que cette classe ne se connecte que sur une seule machine où
 * nous essayons d'obtenir un flux audio et vidéo). Le flux audio se base sur le MPEG_RTP
 * et le flux video se base sur le JPEG_RTP.</p>
 * <p>Société :PlutoSoft</p>
 * @author OGOULOLA Marlin 
 */
public class RecevoirCaptureMedia implements ReceiveStreamListener 
{
    //déclaration de mes constantes
    /**Port source par défaut*/
    public static final int PORT_SOURCE = 22224;
    /**Port destinataire par défaut*/
    public static final int PORT_DESTINATAIRE = 40000;
    /**Format du son par défaut*/
    public static AudioFormat AUDIO_DEFAULT_FORMAT = new AudioFormat(AudioFormat.MPEG_RTP);
    /**Format de la par défaut*/
    public static VideoFormat VIDEO_DEFAULT_FORMAT = new VideoFormat(VideoFormat.JPEG_RTP);
    
    //déclaration des mes variables globales
    private int port_D, port_S;
    private Player player=null;
    private RTPManager audio_video;
    private DataSink Sink;
    private DataSource src;
    
    
    
    /**Constructeur
     * @param host Source des flux
     * @throws IOException Problème d'entrée/sortie
     * @throws InvalidSessionAddressException Adresse du flux incorrecte
     */
    public RecevoirCaptureMedia(String host)throws InvalidSessionAddressException, IOException
    {
        Recevoir(host, PORT_SOURCE, PORT_DESTINATAIRE, VIDEO_DEFAULT_FORMAT, AUDIO_DEFAULT_FORMAT);
    }
    
    /**Constructeur
     * @param host Source des flux
     * @param F1 format video
     * @param F2 format audio
     * @throws IOException Problème d'entrée/sortie
     * @throws InvalidSessionAddressException Adresse du flux incorrecte
     */
    public RecevoirCaptureMedia(String host,VideoFormat F1,AudioFormat F2) throws InvalidSessionAddressException, IOException
    {
        Recevoir(host, PORT_SOURCE, PORT_DESTINATAIRE, F1,F2);
    }
    
    /**Constructeur
     * @param host Source des flux
     * @param portsource Port source
     * @param portdest Port de destination
     * @throws IOException Problème d'entrée/sortie
     * @throws InvalidSessionAddressException Adresse du flux incorrecte
     */
    public RecevoirCaptureMedia(String host, int portsource, int portdest) throws InvalidSessionAddressException, IOException
    {
        Recevoir(host, portsource, portdest, VIDEO_DEFAULT_FORMAT, AUDIO_DEFAULT_FORMAT);
    }
    
    /**Constructeur
     * @param host Source des flux
     * @param portsource Port source
     * @param portdest Port de destination
     * @param F1 Format video
     * @param F2 Format audio
     * @throws IOException Problème d'entrée/sortie
     * @throws InvalidSessionAddressException Adresse du flux incorrecte
     */
    public RecevoirCaptureMedia(String host, int portsource, int portdest, VideoFormat F1, AudioFormat F2) throws InvalidSessionAddressException, IOException
    {
        Recevoir(host, portsource, portdest, F1, F2);
    }
    
    /**Méthode d'initialisation de la reception de flux média 
     *@param host Source des flux
     * @param portsource Port source
     * @param portdest   Port de destination
     * @param VIDEO_FORMAT  Format video
     * @param AUDIO_FORMAT Format  audio
     * @throws InvalidSessionAddressException Adresse du flux incorrecte
     * @throws IOException Problème d'entrée/sortie
     */
    private void Recevoir(String host, int portsource, int portdest, VideoFormat VIDEO_FORMAT, AudioFormat AUDIO_FORMAT)throws InvalidSessionAddressException, IOException
    {
        //configuration des ports
        this.port_D = portdest;
	this.port_S = portsource;
        
        //Configuration du gestionnaire de son et de la vidéo
        audio_video=RTPManager.newInstance();
        
        if(VIDEO_FORMAT!=null)
        {
            audio_video.addFormat(VIDEO_FORMAT,0);
        }
        
        if (AUDIO_FORMAT!=null)
        {
           audio_video.addFormat(AUDIO_FORMAT,0);
        }
        
        //Creation d'une SessionAddress pour l'adresse locale
	SessionAddress adr1 = new SessionAddress(InetAddress.getLocalHost(), port_S);
        
        //Initialisation du RTPManager 
	//à partir de cette SessionAddress
        audio_video.initialize(adr1);
        
        //Creation d'une SessionAddress pour l'adresse source
	SessionAddress adr2 = new SessionAddress(InetAddress.getByName(host), port_D);
        
        //Ajout de cette SessionAddress dans le RTPManager
        audio_video.addTarget(adr2);
        
        //Ajout du Listener de Reception de Stream dans le RTPManager
        
        audio_video.addReceiveStreamListener(this);
    }
    
   /**Méthode retournant le component du player (ne le retourne uniquement
    * si il a été initialisé, donc peut être long)
     * @return Retourne le composant graphique du player
     * @throws InterruptedException
     * @throws TimeoutException  
    */
    public Component AfficheVideoRecu()throws InterruptedException, TimeoutException
    {
        int nb = 0;
	while(!IsReady())
        {
            nb = nb + 50;
            if(nb > 10000)
            { //30 secondes au maximun
                throw new TimeoutException("Délais 30s dépassée");
	    }
            Thread.sleep(100);
			
	}
        Play();
        return player.getVisualComponent();
       
    }
    
    /**<p>  Cette méthode permet d'arrêter la reception de l'audio et de la video
     * bref détruire la connection </p>
     */
    public void ArretReception()
    {
       if (player!=null)
        {
            audio_video.dispose();
            player.stop();
            player.close();
         }
    }
    
    /** Méthode retournant le statut du son
     * @return retourne le statut du son 
     */
    public boolean IsMute()
    {
        boolean mute=false;
        if (player!=null)
        {
            mute=player.getGainControl().getMute();
        }
        return mute;
    }
    
    /** Méthode permettant de mettre ou non le son
     * @param mute statut
     */
    public void SetMute(boolean mute)
    {
        if (player!=null)
        {
            player.getGainControl().setMute(mute);
        }
    }
    
    /** Méthode retournant le playeur associé à ce flux
     */
    public void Play()
    {
       if(player!=null)
           player.start();
    }
    
    /** cette méthode permet de capturer l'image en cours
     * @param destination 
     */
   public void CaptureVideo(String destination)
   {
        if (player!=null)
        {
            //capture de l'image
            FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
            Buffer buf = fgc.grabFrame(); 
            // Convertion de cette capture en image
            BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
            Image img = btoi.createImage(buf);
            //enregistrement de l'image au format JPEG
            EnregistreImage(img, destination);
        }
               
   } 
   /**Cette méthode permet d'enregistrer une image sur un support de stockage
     * @param img l'image à enregistrer
     * @param destination  la destination de l'image
     */ 
  private void EnregistreImage(Image img,String destination)
 {
     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(Numero(destination,'P'));
     }
     catch(java.io.FileNotFoundException io)
     {
        System.out.println(io.getMessage()); 
     }
     //Encodeur JPEG
     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
     //paramètre d'encodage (qualité 50%)
     JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
     param.setQuality(1.0f, false);
     //assignation des paramètres d'encodage
     encoder.setJPEGEncodeParam(param);
     
     try
     {
         encoder.encode(bi);
         out.close();
     }
     catch(java.io.IOException io)
     {
         System.out.println(io.getMessage());
     }
 }
    
    /** methode me permetant de donner un numero au capture
     * @param Destination le dossier où le média sera enregistré
     * @param Type le type de média (P pour Photo et V pour Video) 
     * @return Nom enregistrement
     */
   private String Numero(String Destination,char Type)
    {
        if (Type=='P' || Type=='V')
        {
            final char id1,id2;
            if (Type=='P')
            {
                id1='P';id2='H';
            }
            else
            {
               id1='V';id2='D'; 
            }
            
            File di=new File(Destination); 
            File fl[] = di.listFiles(new FilenameFilter()
            { //classe me permettant de filtrer la liste des fichiers 
                @Override
                public boolean accept(File dir, String name)
                {
                    return name.charAt(0)==id1 && name.charAt(1)==id2;
                }
            });
            
            if (Type=='P')
            {
                 return Destination+"/PH"+fl.length+".jpg";
            }
            else
            {
                 return "file:"+Destination+"/VD"+fl.length+".wav";
            }
              
        }
       return null;     
      
    }
    
    /* (non-Javadoc)
     * @see javax.media.rtp.ReceiveStreamListener#update(javax.media.rtp.event.ReceiveStreamEvent)
      */
    @Override
    public synchronized void update(ReceiveStreamEvent arg0)
    {
        if(player == null &&(arg0 instanceof NewReceiveStreamEvent || arg0 instanceof StreamMappedEvent) && arg0.getReceiveStream() != null)
        {
            src = arg0.getReceiveStream().getDataSource();
            if(src != null)
            {
                try 
                {
                    //Initialisation du player
                    player = Manager.createRealizedPlayer(src);
		}
		catch (NoPlayerException e)
                {
                    e.printStackTrace();
		}
		catch (CannotRealizeException e)
                {
                    e.printStackTrace();
		}
               catch (IOException e)
               {
                   e.printStackTrace();
	       }
                
	    }
	}
    }
    /** Méthode retournant le statut du player
     * @return retourne le statut
     */
    public boolean  IsReady()
    {
        return player!=null;
    }
    
    /** Methode permettant d'enregistrer la vidéo recu
     * @param destination 
     */
    public void EnregistreVideo(String destination)
    {
        try
        {
            MediaLocator dest=new MediaLocator(Numero(destination,'V'));
            Sink=Manager.createDataSink(src,dest);
            Sink.open();
            Sink.start();
        } 
        catch (NoDataSinkException ex)
        {
            System.out.println(1);
        }
        catch(IOException e)
        {
           System.out.println(2); 
        }
    }
    /**
     * methode permettant d'arrêter l'enregistrement de la video
     */
    public void StopEnregistreVideo()
    {
        try 
        {
            Sink.stop();
        }
        catch (IOException ex)
        {
            
        }
    }
   
}


La fonction EnregistreVideo te permet de sauvegarder le ton flux vidéo sur dans une fichier. Essai et donne des retour; après on pourra le sauvegarder dans une base de données.
A++
HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention > leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 16 déc. 2014 à 14:35
Merci beaucoup pour votre soutien
J'ai un problème avec la classe que vous m'avez envoyé
Mon problème est que j'ai quatre bottons(4) sur mon interface Netbeans
1) Visualiser webcam
2) Enregistrer Video
3) Stopper l'Enregistrement
4) Rechercher Une Vidéo Enregistrer
J'ai créé une instance de la classe (RecevoirCaptureMedia capture=new RecevoirCaptureMedia() ;)mai je peux pas accéder aux differentes methodes de la classe
Merci encore une fois de plus
leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 16 déc. 2014 à 15:01
Au fait les méthodes permettant d'enregistrer et de stopper le flux vidéo issu de ta webcam doivent être écrite dans la classe qui te permet de visualiser la webcam. Pour plus d'aide publie en réponse cette classe
HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention > leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 17 déc. 2014 à 08:49
import java.io.IOException;
import java.util.logging.Level;
import javax.imageio.IIOException;
import javax.media.NoPlayerException;
import javax.media.CannotRealizeException;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.Manager;
import java.util.logging.Logger;
public class webcam extends javax.swing.JFrame {

Player player;
/**
* Creates new form webcam
*/
public webcam() throws IIOException, NoPlayerException, CannotRealizeException {
initComponents();
try{
intCamera();
}
catch(IOException ex )
{
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE,null , ex);
}


}
private void intCamera() throws IIOException,NoPlayerException,CannotRealizeException, IOException{

MediaLocator mLocator=new MediaLocator("vfw://0");
player=Manager.createRealizedPlayer(mLocator);
this.jButton1.add(player.getVisualComponent());
player.start();

}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jButton3.setText("Capture");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});

jButton4.setText("Save");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(92, 92, 92)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 104, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 197, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 210, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(46, 46, 46))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(68, 68, 68)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 61, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton4)
.addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(33, 33, 33))
);

pack();
}// </editor-fold>

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
new webcam().setVisible(true);
} catch (IIOException ex) {
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoPlayerException ex) {
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE, null, ex);
} catch (CannotRealizeException ex) {
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
// End of variables declaration
}


/****Je compte sur vous********/
HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention > leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 18 déc. 2014 à 09:58
import java.io.IOException;
import java.util.logging.Level;
import javax.imageio.IIOException;
import javax.media.NoPlayerException;
import javax.media.CannotRealizeException;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.Manager;
import java.util.logging.Logger;
public class webcam extends javax.swing.JFrame {

Player player;
/**
* Creates new form webcam
*/
public webcam() throws IIOException, NoPlayerException, CannotRealizeException {
initComponents();
try{
intCamera();
}
catch(IOException ex )
{
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE,null , ex);
}


}
private void intCamera() throws IIOException,NoPlayerException,CannotRealizeException, IOException{

MediaLocator mLocator=new MediaLocator("vfw://0");
player=Manager.createRealizedPlayer(mLocator);
this.jButton1.add(player.getVisualComponent());
player.start();

}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jButton3.setText("Capture");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});

jButton4.setText("Save");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(92, 92, 92)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 104, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 197, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 210, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(46, 46, 46))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(68, 68, 68)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 61, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton4)
.addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(33, 33, 33))
);

pack();
}// </editor-fold>

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(webcam.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
new webcam().setVisible(true);
} catch (IIOException ex) {
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoPlayerException ex) {
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE, null, ex);
} catch (CannotRealizeException ex) {
Logger.getLogger(webcam.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
// End of variables declaration
}


/****Je compte sur vous********/
Commenter la réponse de leplutonien
leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 18 déc. 2014 à 23:13
0
Merci
Salut
voici une classe qui résout ton problème.

package Capture;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.DataSink;
import javax.media.Format;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.Processor;
import javax.media.ProcessorModel;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.AudioFormat;
import javax.media.format.VideoFormat;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;
import javax.media.util.BufferToImage;

/**
 * <p>Titre :Media</p>
 * <p>Description : Gestion des </p>
 * <p>Société :PlutoSoft</p>
 * <p>Auteurs :OGOULOLA Marlin</p>
 * @
 */
public class Media {   
    private DataSource mixedDataSource = null;
    private DataSource videoDataSource = null;
    private DataSource audioDataSource = null;
    private Processor proc = null ;
    private DataSource source = null;
    private DataSink sink = null;
    private Player player = null; 
    
    public Media(){
        //preparation des sources de donnees video
        
        //récupération d'un périphérique vidéo à partir de son nom
        CaptureDeviceInfo captureDevice1 = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");
        //récupération du MediaLocator à partir du périférique de capture
        MediaLocator videoMediaLocator =captureDevice1.getLocator();
        try {
            //récupération d'une DataSource à partir d'un MediaLocator
            videoDataSource = Manager.createDataSource(videoMediaLocator);
            //connexion à la DataSource
            //videoDataSource.connect();           
           
        } catch (Exception e) {
            System.err.println("Erreur au niveau de la preparation des sources de donnees video");
            System.err.println(e.getMessage());           
            System.exit(0);
        }
        
        //preparation des sources de donnees audio
         //récupération d'un périphérique audio à partir de son nom
        CaptureDeviceInfo captureDevice2 = CaptureDeviceManager.getDevice("JavaSound audio capture");
        //récupération du MediaLocator à partir du périférique de capture
        MediaLocator audioMediaLocator =captureDevice2.getLocator();       
        try {
            audioDataSource = Manager.createDataSource(audioMediaLocator);
            //connexion à la DataSource
            //audioDataSource.connect();           
            
        } catch (Exception e) {
            System.err.println("Erreur au niveau de la preparation des sources de donnees audio");
            System.err.println(e.getMessage());
            System.exit(0);
        }
       
        // fusion des sources de donnees audio + video
        try {
            DataSource dArray[] = new DataSource[2];
            dArray[0] = videoDataSource;
            dArray[1] = audioDataSource;
            mixedDataSource = javax.media.Manager.createMergingDataSource(dArray);
        } catch (Exception e) {
             System.err.println("Erreur au niveau de la fusion");
            System.err.println(e.getMessage());
             System.exit(0);
        }
        // on cree un nouveau processor
        
       //on définit le format du fichier de sortie du media 
       FileTypeDescriptor outputType = new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO); 
       
       // on definit le format de chaque composant du media
       Format outputFormat[] = new Format[2];
       outputFormat[0] = new VideoFormat(VideoFormat.INDEO50);
       outputFormat[1] = new AudioFormat(AudioFormat.GSM_MS );
       
       // constructeur du processor
       ProcessorModel processorModel = new ProcessorModel(mixedDataSource, outputFormat, outputType);
       
       try {
            proc = Manager.createRealizedProcessor(processorModel); 
             // recupere la sortie processor
            source = proc.getDataOutput();
            source.connect();
            
        } catch (Exception e) {
            System.err.println("Erreur au niveau de la construction du nouveau processor");
            System.err.println(e.getMessage());
            System.exit(0);
        }
       
    }
    
    public void play(){
        if(source != null){
            //Initialisation du player
            try {
                 player = Manager.createRealizedPlayer(source);
                 player.prefetch();
                 
                 if(player != null){
                      player.start();
                 }
            } catch (Exception e) {
                 System.err.println("Erreur au niveau de la méthode play");
                 System.err.println(e.getMessage());
                 
            }        
        }
    }
    
    public void stop(){
         if (player!=null){
             source.disconnect();
             player.stop();
             player.close();
         }
    }
    public Component getVisuel(){
           if(player != null)
               return player.getVisualComponent();
           else
               return null;
    }
    
    /** Méthode  permetant de donner un numero au capture
     * @param Destination le dossier où le média sera enregistré
     * @param Type le type de média (P pour Photo et V pour Video) 
     * @return Nom enregistrement
     */
    private String Numero(String Destination,char Type){
        if (Type=='P' || Type=='V') {
            final char id1,id2;
            if (Type=='P'){
                id1='P';id2='H';
            }
            else
            {
               id1='V';id2='D'; 
            }
            
            File di=new File(Destination); 
            File fl[] = di.listFiles(new FilenameFilter(){
                //classe  permettant de filtrer la liste des fichiers 
                @Override
                public boolean accept(File dir, String name)
                {
                    return name.charAt(0)==id1 && name.charAt(1)==id2;
                }
            });
            
            if (Type=='P'){
                 return Destination+"/PH"+fl.length+".jpg";
            }
            else {
                 return "file:"+Destination+"/VD"+fl.length+".avi";
            }              
        }
       return null;     
    }
    
     /** Methode permettant d'enregistrer la vidéo recu
     * @param destination 
     */
   public void EnregistreVideo(String destination) {
        try
        {
            if(source != null){
              MediaLocator dest=new MediaLocator(Numero(destination,'V'));
                sink=Manager.createDataSink(source,dest);
                sink.open();
                sink.start();  
            }            
        } 
        catch (Exception ex){
           System.err.println("Erreur au niveau de l'enregistrement de la vidéo");
           System.err.println(ex.getMessage());
           System.exit(0);
        }        
    }
   
   /**
     * methode permettant d'arrêter l'enregistrement de la video
     */
    public void stopEnregistreVideo(){
        try 
        {
            sink.stop();
        }
        catch (IOException ex){
           System.err.println("Erreur au niveau de l'arret de  l'enregistrement de la vidéo");
           System.err.println(ex.getMessage());
           System.exit(0);
        }
    }
    
     /** cette méthode permet de capturer l'image en cours
     * @param destination 
     */
     public void CaptureVideo(String destination){
        if (player!=null){
            //capture de l'image
            FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
            Buffer buf = fgc.grabFrame(); 
            // Convertion de cette capture en image
            BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
            Image img = btoi.createImage(buf);
            //enregistrement de l'image au format JPEG
            EnregistreImage(img, destination);
        }               
   } 
     
     /**Cette méthode permet d'enregistrer une image sur un support de stockage
     * @param img l'image à enregistrer
     * @param destination  la destination de l'image
     */ 
    private void EnregistreImage(Image img,String destination){
        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(Numero(destination,'P'));
        }
        catch(java.io.FileNotFoundException io){
        System.out.println(io.getMessage()); 
     }
     //Encodeur JPEG
     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
     //paramètre d'encodage (qualité 50%)
     JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
     param.setQuality(1.0f, false);
     //assignation des paramètres d'encodage
     encoder.setJPEGEncodeParam(param);     
     try{
         encoder.encode(bi);
         out.close();
     }
     catch(java.io.IOException io){
         System.out.println(io.getMessage());
     }
 }    
}
HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention - 22 déc. 2014 à 10:17
salut ,
j'ai asseyez de comprendre le principe de fonctionnement de votre programme,mais mon problème se réside à la maniéré dont je vais appelé les différentes méthode voici un exemple ,mai lors l'exécution du programme j'ai toujours une erreurs

j'aimerai avoir une idée sur la gestion des différentes méthode c'est à dire quel méthode doit appelé en premier et comment merci


/** instance de la classe et appel de la méthode getVisel **/

Media source=new Media();
this.jButton4.add(source.getVisuel());






/**erreur générer lors de l'exécution du programme **/
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Media.<init>(Media.java:56)
at Video.jButton1ActionPerformed(Video.java:236)
at Video.access$000(Video.java:47)
at Video$2.actionPerformed(Video.java:106)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 22 déc. 2014 à 10:38
Voici comment utilisé les méthodes de cette classe.
//initialisé les sources de données
Media m = new Media();
//lancement
 m.play();
//obtenir le rendu
Frame fr = new Frame("Vidéo en cours");
fr.setSize(500, 500);
fr.add(m.getVisuel());
fr.setVisible(true);

La classe est bien documenté. Tu devrai donc t'en sorti pour le reste.
HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention > leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 22 déc. 2014 à 21:35
salut j'ai respecté ce vous m'avez dit mais j'ai un autre problème

voici une partie de la classe Media ,

apparemment ce comme si le problème réside au niveau de la partie en gras,et quand je essayé mettre la partie en gras si dessous

voici l'erreur



Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Media.<init>(Media.java:60)
at Video.jButton1ActionPerformed(Video.java:242)
at Video.access$000(Video.java:48)
at Video$2.actionPerformed(Video.java:106)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)

dans le try {////////}catch() erreur est :Erreur au niveau de la preparation des sources de donnees video
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)





//preparation des sources de donnees video

//récupération d'un périphérique vidéo à partir de son nom
CaptureDeviceInfo captureDevice1 = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");
/
//récupération du MediaLocator à partir du périférique de capture
MediaLocator videoMediaLocator = captureDevice1.getLocator();
try {

//récupération d'une DataSource à partir d'un MediaLocator
videoDataSource = Manager.createDataSource(videoMediaLocator);
//connexion à la DataSource
//videoDataSource.connect();

} catch (Exception e) {
System.err.println("Erreur au niveau de la preparation des sources de donnees video");
System.err.println(e.getMessage());
System.exit(0);
}
HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention > leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 23 déc. 2014 à 08:43
salut j'ai respecté ce vous m'avez dit mais j'ai un autre problème

voici une partie de la classe Media ,

apparemment ce comme si le problème réside au niveau de la partie que je mis en gras ci dessous,et quant je deplace la partie que mis en gras dans le bloc try cach voici l'erreur:Erreur au niveau de la preparation des sources de donnees video

voici l'erreur



Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Media.<init>(Media.java:60)
at Video.jButton1ActionPerformed(Video.java:242)
at Video.access$000(Video.java:48)
at Video$2.actionPerformed(Video.java:106)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)

dans le try {////////}catch() erreur est :Erreur au niveau de la preparation des sources de donnees video
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)





//preparation des sources de donnees video

//récupération d'un périphérique vidéo à partir de son nom
CaptureDeviceInfo captureDevice1 = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");
/
//récupération du MediaLocator à partir du périférique de capture
MediaLocator videoMediaLocator = captureDevice1.getLocator();
try {

//récupération d'une DataSource à partir d'un MediaLocator
videoDataSource = Manager.createDataSource(videoMediaLocator);
//connexion à la DataSource
//videoDataSource.connect();

} catch (Exception e) {
System.err.println("Erreur au niveau de la preparation des sources de donnees video");
System.err.println(e.getMessage());
System.exit(0);
}
HASSABALLAH 38 Messages postés jeudi 29 mars 2012Date d'inscription 26 mai 2015 Dernière intervention > leplutonien 21 Messages postés mardi 31 juillet 2012Date d'inscription 29 juin 2015 Dernière intervention - 24 déc. 2014 à 08:43
salut voici l'erreur que j'obtiens :Erreur au niveau de la préparation des sources de données vidéo
Commenter la réponse de leplutonien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.