2013-05-16 3 views
2

Je veux diffuser le bureau captures d'écran en utilisant des douilles. Je ne sais pas la manière exacte de le faire, alors je suis allé avec le robot AWT :)Bureau TCP Streaming (java)

Robot robot = new Robot(); 
BufferedImage image = robot.createScreenCapture(screenRectangle); 

Le problème est que les images en provenance du robot sont trop gros pour faire un cours d'eau. Une capture de 1440x900 est environ 0.3MB et je ne peux pas le transférer assez rapidement pour créer un flux lisse 24fps.

Actuellement j'utilise un socket TCP, car j'ai eu des problèmes pour couper l'image en plusieurs parties et les envoyer avec UDP.

Probablement ce n'est pas la bonne méthode, mais ce qui est? Comment sont transférés les flux vidéo HD?

Merci à l'avance

Répondre

1

Je pense que vous aurez besoin d'une bibliothèque externe pour créer de la vidéo (dépend de la plateforme).

L'approche avec des images est simple mais vous devrez envoyer chaque image. Lorsque vous utilisez la taille de codec vidéo est plus petit parce qu'il envoie certains des cadres en taille réelle et d'autres ne contiennent qu'une partie modifiée de l'image Voir ici:

http://en.wikipedia.org/wiki/Key_frame

http://en.wikipedia.org/wiki/I-frame


Voici quelques ouvert libs -source Je viens de googlé:

https://code.google.com/p/java-screen-recorder/

http://www.xuggle.com/xuggler/


Je pense que vous pouvez également trouver des libs pour créer flux vidéo à partir d'images ...

1

Comment les flux vidéo HD transférés?

Typiquement comme un flux vidéo, ce qu'un «groupe d'images» ne l'est pas. Les codecs vidéo ont souvent des moyens astucieux de compresser des groupes d'images, par ex. en montrant seulement la partie de la trame suivante qui est différente à la précédente.

Vous pouvez également vous intéresser à l'encodage des images en tant que JPEG haute compression. Cela dit, je doute que vous obteniez un très bon taux de transfert à cette taille en pixels.