Снимок экрана Java-апплета к видео - PullRequest
15 голосов
/ 13 января 2010

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

идеи

Ответы [ 5 ]

15 голосов
/ 13 января 2010

С чистым Java-решением я сомневаюсь, что оно будет работать, но это, конечно, зависит от того, как вы трактуете «видео».

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

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

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

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

5 голосов
/ 26 января 2010

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

2 голосов
/ 05 мая 2011

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

2 голосов
/ 12 марта 2010

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

1 голос
/ 03 июля 2011

Я скачал основной файл захвата *.JAR для Screencast-O-Matic.com . Чтобы скачать файл:

  1. Перейти на http://screencast -o-matic.com / jars / ScreencastOMaticRun-1.0.5.jar
  2. Сохранить файл
  3. Извлеките содержимое (я НЕ намерен использовать это в коммерческих целях!)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...