Bonjours, alors voilà j'ai réalisé un programme de prise de contrôle à distance avec java se.
J'utilise la class Robot avec la méthode createCaptureScreen pour capturer l'image de l'écran. J'envoie alors en rafale (boucle infinie) chaque nouveau bufferImage retourné par la fonction pour "simuler" un flux vidéo. Puis j'envoie par socket ces images en rafale au client.
Seul problème j'envoie environ 190 images par minute, soit du 3 fps (image par secondes) en moyenne. (J'arrive a 1800 capture d'écran sans envoie par le réseau).
Comment faire pour obtenir un framerate convenable, c'est à dire minimum 24 images par secondes ?
De plus, avec la boucle infinie qui capture et envoie immédiatement les nouvelles images vers le client, la consommation CPU est très importante !!!
Bref comment faire pour corriger ces problèmes ?
Utiliser les socketChannel au lieu des socket traditionnel apporte t-il vraiment des gains en performance ?
Comment font les programme type VNC pour obtenir un taux aussi élevé en image par secondes ? Peut être utiliser le protocole UDP mais je suis pas sure que cela améliore les performances, car il me faudra vérifier dans tout les cas l'intégrité des données reçu chez le client avant d'afficher l'image via le GUI.
La fonction createCaptureScreen fait des appels systèmes d'après ce que l'on ma dit, et donc rend le processus long.Dois-je utiliser jni pour accéder à l'api win32 pour faire moi même l'appel à une fonction système pour capturer l'écran ?
Je pense que ca reviendra au même...
Comme vous le comprenez, je dois non seulement parer ce problème de performances minables, tout en gérant les ressources CPU qui sont énorme.
Si vous avez des idées, merci d'avance pour votre aide![]()
Partager