Con una soluzione Java pura, dubito che funzionerà, ma dipende ovviamente da quale sia la tua interpretazione del "video".
Sul mio desktop con una risoluzione 1920x1200, sono in grado di ottenere circa 20 fotogrammi al secondo quando si utilizza Java Robot per acquisire l'intero schermo. Poiché ogni immagine contiene più di 6 MB di dati non compressi, avrei bisogno di più di 1 Gbps di larghezza di banda per trasmettere i dati grezzi di queste immagini a un server. Molto probabilmente, richiedere così tanta larghezza di banda non è accettabile, quindi è necessario ridurre il numero di fotogrammi al secondo o applicare un qualche tipo di compressione alle immagini.
Una possibilità è quella di comprimere ciascuna immagine utilizzando uno dei formati di immagine supportati da ImageIO. La dimensione delle immagini compresse dipenderà ovviamente molto da ciò che è effettivamente mostrato sullo schermo, ma le prestazioni dei compressori non sono particolarmente buone. La compressione in PNG dovrebbe fornire il miglior rapporto di compressione senza perdita per la maggior parte dei contenuti desktop, ma almeno il mio computer è in grado di elaborare solo circa 2 fotogrammi al secondo. L'uso del compressore JPEG con le impostazioni di qualità predefinite raggiunge circa 5 fotogrammi al secondo.
L'utilizzo di codec video comuni attraverso un livello di astrazione come jffmpeg probabilmente otterrà prestazioni migliori e un migliore rapporto di compressione, ma dubito che i codec video mainstream come WMV o H.264 siano adatti per il contenuto desktop comune.
Se si richiede realmente una soluzione Java pura (e non si è in grado di utilizzare nessuno dei software standalone disponibili, che fanno ciò che si richiede), farei un tentativo di implementare il mio semplice algoritmo di compressione. Con l'attività desktop comune, dovrebbe esserci una minima differenza tra la maggior parte delle schermate consecutive, quindi quello che potrebbe funzionare abbastanza bene è trasmettere completamente il primo frame e successivamente implementare un algoritmo per rilevare approssimativamente i rettangoli, in cui sono state apportate modifiche e quindi trasmetti solo questi combinati con JPG o preferibilmente (qualità) PNG.
David, posso chiedo se posso dare un'occhiata al codice sorgente della tua app screencast per scopi di apprendimento? Grazie – user1030434