2016-10-19 1 views
-1

Je travaille sur un projet javaCV et j'ai besoin d'afficher et d'enregistrer ce que la webcam capture. Le problème est que la vidéo de sortie dans mon code a une vitesse plus élevée que le réel. J'ai essayé de changer le frameRate du FrameGrabber et du FrameRecorder mais ce n'est pas la solution.Vitesse de sortie de la vidéo avec FrameGrabber JavaCV

Je vous serais reconnaissant si quelqu'un pouvait me aider: Voici mon code:

public static void main(String[] args) throws Exception, org.bytedeco.javacv.FrameGrabber.Exception, org.bytedeco.javacv.FrameRecorder.Exception{  

    // Display dimension 
    int ancho = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width; 
    int alto = java.awt.Toolkit.getDefaultToolkit().getScreenSize().height; 
    int screenNumber = CanvasFrame.getScreenDevices().length > 1 ? 1 : 0; 


    FrameGrabber grabber = FrameGrabber.createDefault(0); 
    grabber.setFrameRate(24); 
    FrameRecorder recorder = FrameRecorder.createDefault("output.avi", ancho, alto); 
    recorder.setFrameRate(24); 
    recorder.start(); 

    // CanvasFrame is a JFrame containing a Canvas component, which is hardware accelerated. 
    // It can also switch into full-screen mode when called with a screenNumber. 
    // We should also specify the relative monitor/camera response for proper gamma correction. 

    //Fullscreen mode 
    CanvasFrame frame = new CanvasFrame("Prueba Webcam", CanvasFrame.getDefaultGamma()/grabber.getGamma());   
    DisplayMode displaymode = frame.getDisplayMode(screenNumber); 
    frame.dispose(); 

    CanvasFrame frame2 = new CanvasFrame("Prueba 2", screenNumber, displaymode,CanvasFrame.getDefaultGamma()/grabber.getGamma()); 


    while (frame2.isVisible()) { 

     // Exit with "Esc" 
     frame2.addKeyListener(new KeyAdapter() { 
      public void keyPressed(KeyEvent ke) { // handler 
    if(ke.getKeyCode() == ke.VK_ESCAPE) { 
     try { 
       buildResults(); 
       System.out.println("escaped ?"); 
       System.exit(0); 


      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } else { 
     System.out.println("not escaped"); 
     } 
} 

});

 //Display and record image 
     frame2.showImage(grabber.grab()); 
     recorder.record(grabber.grab()); 

    } 
    frame2.dispose(); 
    recorder.stop(); 
    grabber.stop(); 
} 

}

Répondre