# Java Screencast app



## pulse00 (17. Jun 2009)

hi,

weiss jemand ob es möglich ist, mit java eine video-screencapture applikation zu implementieren ? also im prinzip in regelmässigen intervallen screenshots zu machen und daraus ein video zu bauen.

Komme eher aus der C++ ecke, und wollt mal die java community fragen, ob das von der performance her machbar wäre.

vielen dank !


----------



## The_S (17. Jun 2009)

Wie oft willst du denn einen Screenshot machen? Für Screenshots gibts die Klasse Robot.


----------



## pulse00 (17. Jun 2009)

im idealfall 25 mal die sekunde, dh. alle 40 millisekunden.

Hab auch schon etwas rumprobiert, erst hab ich einen TimerTask geschrieben, der alle 40 ms nen screenshot macht, und diesen in nem BufferedImage speichert. Auf dem weg bekam ich natürlich nach dem 10-15. screenshot nen OutOfMemoryError.

Zweiter versuch war, jedes BufferedImage sofort in ein File zu schreiben. Leider scheint das file schreiben länger zu dauern als 40 ms, also auch keine Option.

Der Dritte versuch war, eine zweite TimerTask basierte Klasse zu machen die für das Fileschreiben zuständig ist:

CaptureImageTask macht alle 40ms nen screenshot, startet pro screenshot einen WriteFileTask in einem separaten thread, welchem er den BufferedWriter zum schreiben übergibt.

Leider bekomme ich auch bei letzterem Setup den OutOfMemoryError. 


Jemand ne idee wie man das hinbekommen könnte ?


----------



## The_S (18. Jun 2009)

Für sowas müsstest du dich wohl "tiefer" in die Grafikausgabe (GraKa, Treiber, DirectX, ...) einhängen, was mit Java wohl eher schwer zu realisieren ist. Sorry, mehr kann ich dir hier nicht helfen.


----------



## EgonOlsen (18. Jun 2009)

Als was hast du die Images denn geschrieben?


----------



## ice-breaker (19. Jun 2009)

ein ScreenCapturing in Einzelbildern zu machen, ist von der Dateigröße sehr ineffizient, da entstehen schon nach wenigen Minuten hunderte an Megabytes.


----------



## objcler (19. Jun 2009)

ice-breaker hat gesagt.:


> ein ScreenCapturing in Einzelbildern zu machen, ist von der Dateigröße sehr ineffizient, da entstehen schon nach wenigen Minuten hunderte an Megabytes.



Wieso? Man macht ein Bild und packt es gleich in ein Videocontainer. Der kümmert sich dann schon darum, dass das entsprechend "komprimiert" wird.


----------



## EgonOlsen (19. Jun 2009)

ice-breaker hat gesagt.:


> ein ScreenCapturing in Einzelbildern zu machen, ist von der Dateigröße sehr ineffizient, da entstehen schon nach wenigen Minuten hunderte an Megabytes.



Ist bei Fraps aber nicht anders, sonst wird das Schreiben zu lahm. Man muss die entstandene Datei danach aufbereiten, sonst ist sie arg groß.


----------



## ice-breaker (19. Jun 2009)

nach seinen Worten klang es für mich eher wie eine Diaschau mit 25Bildern pro Sekunde.


----------



## pulse00 (19. Jun 2009)

ice-breaker hat gesagt.:


> nach seinen Worten klang es für mich eher wie eine Diaschau mit 25Bildern pro Sekunde.



Da hast du recht, so hab ichs mal ganz am anfang versucht. Mir gings nur darum, bevor ich richtig anfange erst mal abzuchecken, ob das in java generell machbar ist. Kenn mich mit video auch noch nicht wirklich aus, deswegen der "naive" weg mit den einzelbildern.

Um das in nen Videocontainer zu packen hab ich mich nach multimedia frameworks umgesehen,  das vielversprechendste auf das ich bis jetzt gestossen bin ist Quicktime for Java.

Wäre das damit realisierbar ?


----------



## JohannisderKaeufer (20. Jun 2009)

Vielleicht ein wenig OT.

Wenn wir jetzt angenommen eine Swing-Anwendung aufnehmen wollten um daraus beispielsweise ein Tutorial zu machen, dann haben wir doch eine Anwendung die schon weis wie sie auszusehen hat.

Nun könnte man ja hingehen, und eine eigene Graphics komponente einschmuggeln, die zusätzlich aufzeichnet was sie tut und wann sie das tut.

Oder einen Ansatz über Aspecte.

zb. 
0 ms - Frame.paintComponent()
1 ms - Panel.paintComponent()

daraus sollte man wiederum die Anwendung, bzw. das Video ablaufen lassen können.


----------

