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());
}
}
}
12 déc. 2014 à 08:34
concernant le framework ,j'utilise jmf
Merci
15 déc. 2014 à 16:48
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++
16 déc. 2014 à 14:35
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
16 déc. 2014 à 15:01
17 déc. 2014 à 08:49
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********/