2010-01-13 23 views
15

Volevo scoprire come si può catturare lo screencast utilizzando java. So che usando la classe Robot uno si può ottenere uno screenshot ma come faccio a catturarlo come un video e poi caricarlo sul server? Come funzionerebbe esattamente?Acquisizione della schermata dell'applet Java su un video

idee?

+0

David, posso chiedo se posso dare un'occhiata al codice sorgente della tua app screencast per scopi di apprendimento? Grazie – user1030434

risposta

14

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.

+0

Come fa screencast-o-matic.com farlo con un frame rate così piacevole? Capisco e sono d'accordo con te che sarà necessario un algoritmo di compressione molto buono. – Obaid

+0

Come faccio a saperlo? Prima di tutto, acquisiscono solo una piccola parte dello schermo (640x480?) E una parte dell'applet è implementata nel codice nativo. Forse si riesce a eseguire il debug attraverso il codice dell'applet decompilato se si vuole veramente sapere. – jarnbjo

+0

+1 Bel tentativo di spiegare. Grazie. – Favonius

4

Oppure utilizzare Xuggler, un wrapper migliore per FFmpeg in Java. In effetti, il codice per catturare lo schermo e codificare il video è uno dei standard tutorials.

+0

Xuggler non mi permette di eseguire la lib come applet. (o mi manchi qualcosa?) – Obaid

+0

Esatto; oggi non supporta le applet, ma è sulla nostra roadmap per il futuro. –

2

Sono anche curioso di questo. https://www.screencast.com/ sta facendo proprio questo con un'esperienza di puro java (o almeno direttamente dal browser).

2

È possibile utilizzare qualcosa come Java in una build FFMPEG nativa ed eseguire la riga di comando in fase di esecuzione. Ecco un'applet che ho realizzato che fa proprio questo: http://have2chat.net/screencast/

+0

Se è possibile, per scopi didattici puoi condividere il codice sorgente per questo? Sarebbe davvero bello se tu potessi mostrare come potevi accedere alla webcam dall'applet – Jatin

Problemi correlati