Захват экрана апплета Java на видео

Я хотел узнать, как можно захватить screencast с помощью java. Я знаю, что с помощью класса Robot можно получить скриншот, но как я могу его захватить как видео, а затем загрузить его на сервер? Как именно это будет работать?

идеи?

Ответы

Ответ 1

С чистым решением Java я сомневаюсь, что он будет работать, но, конечно же, это зависит от вашей интерпретации "видео".

На моем рабочем столе с разрешением 1920x1200 я могу получить около 20 кадров в секунду при использовании Java Robot для захвата всего экрана. Поскольку каждое изображение содержит > 6 Мбайт несжатых данных, для передачи необработанных данных этих изображений на сервер мне понадобится более 1 Гбит/с. Скорее всего, требующая так много полосы пропускания неприемлема, поэтому вам нужно либо уменьшить количество кадров в секунду, либо применить какое-то сжатие к изображениям.

Одной из возможностей является сжатие каждого изображения с использованием одного из форматов изображений, поддерживаемых ImageIO. Размер сжатых изображений, конечно, будет зависеть от того, что на самом деле отображается на экране, но производительность компрессоров не особенно хороша. Сжатие PNG должно обеспечить наилучшую степень сжатия без потерь для большинства настольных материалов, но, по крайней мере, мой компьютер способен обрабатывать всего около 2 кадров в секунду. Использование компрессора JPEG с настройками качества по умолчанию достигает около 5 кадров в секунду.

Использование обычных видеокодеков через слой абстракции, например jffmpeg, вероятно, обеспечит как лучшую производительность, так и лучшую степень сжатия, но я сомневаюсь, что основной видео кодеки, такие как WMV или H.264, подходят для обычного рабочего стола.

Если вам действительно требуется чистое решение Java (и вы не можете использовать какое-либо из доступных автономных программ, которые делают то, что вы просите), я бы попытался реализовать собственный простой алгоритм сжатия. При обычной работе с настольными компьютерами должно быть очень мало различий между большинством последовательных снимков экрана, поэтому вполне может быть выполнено полное преобразование первого кадра, а затем реализовать алгоритм, чтобы грубо обнаружить прямоугольники, в которых были сделаны изменения, а затем передавать только в сочетании с JPG или предпочтительным (качественным) сжатием PNG.

Ответ 2

Или используйте Xuggler, лучшую оболочку для FFmpeg на Java. Фактически, код для захвата экрана и кодирования видео является одним из стандартных учебных пособий.

Ответ 3

Мне тоже интересно. https://www.screencast.com/ в настоящее время делает именно это с чистым java (или, по крайней мере, прямо из браузера).

Ответ 4

Вы можете просто использовать что-то вроде Java для собственной сборки FFMPEG и выполнять командную строку во время выполнения. Вот апплет, который я сделал, который делает именно это: http://have2chat.net/screencast/