Mit einer reinen Java-Lösung bezweifle ich, dass es funktioniert, aber es hängt natürlich davon ab, was Sie für die Interpretation von "Video".
Auf meinem Desktop mit einer Auflösung von 1920x1200 bin ich in der Lage, ungefähr 20 Bilder pro Sekunde zu erhalten, wenn ich den Java-Roboter verwende, um den gesamten Bildschirm zu erfassen. Da jedes Bild> 6 MByte unkomprimierte Daten enthält, würde ich mehr als 1 GBit/s Bandbreite benötigen, um die Rohdaten dieser Bilder an einen Server zu übertragen. Höchstwahrscheinlich ist es nicht akzeptabel, so viel Bandbreite zu benötigen. Sie müssen also entweder die Anzahl der Bilder pro Sekunde verringern oder eine Art Kompression auf die Bilder anwenden.
Eine Möglichkeit besteht darin, jedes Bild mit einem der von ImageIO unterstützten Bildformate zu komprimieren. Die Größe der komprimierten Bilder hängt natürlich stark davon ab, was tatsächlich auf dem Bildschirm angezeigt wird, aber die Leistung der Kompressoren ist nicht besonders gut. Komprimierung nach PNG sollte die beste verlustfreie Kompressionsrate für die meisten Desktop-Inhalte bieten, aber zumindest kann mein Computer nur etwa 2 Bilder pro Sekunde verarbeiten. Die Verwendung des JPEG-Komprimierers mit Standardqualitätseinstellungen erreicht etwa 5 Bilder pro Sekunde.
Mit herkömmlichen Videocodecs durch eine Abstraktionsschicht wie jffmpeg wird wahrscheinlich sowohl eine bessere Leistung als auch eine bessere Komprimierungsrate erreicht, aber ich bezweifle, dass gängige Videocodecs wie WMV oder H.264 für allgemeine Desktopinhalte geeignet sind.
Wenn Sie wirklich eine reine Java-Lösung benötigen (und keine der verfügbaren eigenständigen Software verwenden können, die das tun, wonach Sie fragen), würde ich versuchen, meinen eigenen einfachen Komprimierungsalgorithmus zu implementieren. Bei üblicher Desktop-Aktivität sollte zwischen den meisten aufeinander folgenden Screenshots kaum ein Unterschied bestehen. Was also gut funktioniert, ist, den ersten Frame vollständig zu übertragen und danach einen Algorithmus zu implementieren, um Rechtecke, in denen Änderungen vorgenommen wurden, grob zu erkennen Übertragen Sie nur diese kombiniert mit JPG oder vorzugsweise (Qualität) PNG-Komprimierung.
David, ich kann Fragen Sie, ob ich den Quellcode Ihrer Screencast-App für Lernzwecke sehen kann? Danke – user1030434