1 utilisateur anonyme et 17 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

[Java] Enregistrement de vidéos avec JMF

 
n°2606
dealer
Profil : Big Penguin
Avatar
profil
Posté le 21-12-2008 à 16:58:02  
 

Yop tout le monde, :hello:

 

Bon alors, je dois réaliser une application java consistant à enregistrer des vidéos depuis un périphérique relié à mon ordinateur. Le périphérique en question, est un robot capable de se déplacer doté d'une caméra wireless. Voilà la bête en question sans la caméra : http://www.ceebot.com/ceebot/misc/elements/chhemisson.jpg.

 

Pour ce faire j'utilise la librairie JMF.

 

En fait le réel problème est que je dois pouvoir en même temps  afficher ce que j'enregistre. Pour l'instant, j'arrive à faire sois l'un sois l'autre mais pas les deux.
J'ai essayé d'utiliser une DataSource clonné à ce moment tout à l'air de fonctionner mais les vidéos ont une taille de 0 ko. :cry:

 

Voilà la classe qui me permet d'enregistrer les vidéos (avec en utilisant la DataSource clonée):

 
Code :
  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. package botcam.wrk;
  6. import botcam.cste.Constante;
  7. import java.io.IOException;
  8. import javax.media.*;
  9. import javax.media.format.VideoFormat;
  10. import javax.media.protocol.*;
  11. /**
  12. *
  13. * @author
  14. */
  15. public class WrkCapture {
  16.     private Player player;
  17.     private MediaLocator mediaLoc;
  18.     private CaptureDeviceInfo captureDevice;
  19.     private DataSource dSource;
  20.     private DataSink dSink;
  21.     private Processor proc;
  22.    
  23. //Méthode s'ocupant de récupérer la caméra puis de le retourner à l'IHM pour l'affichage
  24.     public Player startCam() {
  25.         captureDevice = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0" );
  26.         mediaLoc = captureDevice.getLocator();
  27.         try {
  28.             dSource = Manager.createDataSource(mediaLoc);
  29.             player = Manager.createRealizedPlayer(dSource);
  30.             player.start();
  31.         } catch (CannotRealizeException ex) {
  32.             System.out.println("Erreur CannotRealizeException : " + ex.getMessage());
  33.         } catch (NoDataSourceException ex) {
  34.             System.out.println("Erreur NoDataSourceException : " + ex.getMessage());
  35.         } catch (IOException ex) {
  36.             System.out.println("Erreur IOException : " + ex.getMessage());
  37.         } catch (NoPlayerException ex) {
  38.             System.out.println("Erreur NoPlayerException : " + ex.getMessage());
  39.         }
  40.         return player;
  41.     }
  42. //Méthode s'occupant d'enregistrer la vidéo
  43.     public boolean commencerEnregsitrement(String nomFichier) {
  44.         boolean ok = false;
  45.         try {
  46. //Définition du format utilisé
  47.             String outputFormat = FileTypeDescriptor.QUICKTIME;
  48.             FileTypeDescriptor ftd = new FileTypeDescriptor(outputFormat);
  49.             Format[] format = new Format[]{new VideoFormat(null)};
  50. //Création de la datasource clone
  51.             DataSource dSourceClonable = Manager.createCloneableDataSource(dSource);
  52.             DataSource dSourceCloned = ((SourceCloneable) dSourceClonable).createClone();
  53. //Création du Processor
  54.             ProcessorModel pm = new ProcessorModel(dSourceCloned, format, ftd);
  55.             proc = Manager.createRealizedProcessor(pm);
  56.             DataSource ds = proc.getDataOutput();
  57. //Création du fichier
  58.             MediaLocator ml = new MediaLocator("file:" + Constante.LOCATION_VIDEO + nomFichier + ".mov" );
  59. //Initialisation de la DataSink
  60.             dSink = Manager.createDataSink(ds, ml);
  61. //Démarrage du Processor et de la DataSink
  62.             dSink.open();
  63.             dSink.start();
  64.             proc.start();
  65.             ok = true;
  66.         } catch (NoDataSinkException ex) {
  67.             System.out.println("Erreur NoDataSinkException : " + ex.getMessage());
  68.         } catch (IOException ex) {
  69.             System.out.println("Erreur IOException : " + ex.getMessage());
  70.         } catch (NoProcessorException ex) {
  71.             System.out.println("Erreur NoProcessorException : " + ex.getMessage());
  72.         } catch (CannotRealizeException ex) {
  73.             System.out.println("Erreur CannotRealizeException : " + ex.getMessage());
  74.         }
  75.         return ok;
  76.     }
  77. //Méthode s'occupant de terminer le téléchargement
  78.     public boolean terminerEnregsitrement() {
  79.         boolean ok = false;
  80.         try {
  81.             proc.stop();
  82.             dSink.stop();
  83.             dSink.close();
  84.             proc.close();
  85.             ok = true;
  86.         } catch (IOException ex) {
  87.             System.out.println("Erreur IOException : " + ex.getMessage());
  88.         }
  89.         return ok;
  90.     }
  91. }
 

Donc avec ce code là, j'ai des vidéos de 0 ko.
Merci à ceux et celles qui se pencheront sur mon problème.


Message édité par dealer le 23-12-2008 à 19:59:09
answer
mood
GoogleAds
profil
Posté le 21-12-2008 à 16:58:02  
 

answer

Aller à :
Ajouter une réponse