Я могу сделать видео рабочего Java приложением Swing на лету?

У меня есть колебание Java программа GUI, которая представляет где угодно между 1 и 25 кадрами в секунду. Это - только одно окно и только одна панель, к которой я делаю весь рендеринг, например, никакие другие компоненты Swing.

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

Я знаю, как использовать класс Робота для получения снимков экрана моего окна Java, но я не могу возможно сохранять их на диск, когда я работаю, это замедлит все слишком много. Существует ли способ для меня использовать класс Робота (или возможно некоторая другая часть кода) для создания видео моего окна на лету при запущении моей программы?

Спасибо!

5
задан Warlax 2 February 2010 в 21:10
поделиться

4 ответа

Можно использовать обертку ffmpeg в классе Java - Xuggler и встроенный Java Robot. Приведем пример кода с Xuggler.

final Robot robot = new Robot();
final Toolkit toolkit = Toolkit.getDefaultToolkit();
final Rectangle screenBounds = new Rectangle(toolkit.getScreenSize());

// First, let's make a IMediaWriter to write the file.
final IMediaWriter writer = ToolFactory.makeWriter("output.mp4");

// We tell it we're going to add one video stream, with id 0,
// at position 0, and that it will have a fixed frame rate of
// FRAME_RATE.
writer.addVideoStream(0, 0,
 FRAME_RATE,
 screenBounds.width, screenBounds.height);

// Now, we're going to loop
long startTime = System.nanoTime();
for (int index = 0; index < SECONDS_TO_RUN_FOR*FRAME_RATE.getDouble(); index++)
{
    // take the screen shot
   BufferedImage screen = robot.createScreenCapture(screenBounds);

   // convert to the right image type
   BufferedImage bgrScreen = convertToType(screen,
   BufferedImage.TYPE_3BYTE_BGR);

   // encode the image to stream #0
   writer.encodeVideo(0,bgrScreen,
   System.nanoTime()-startTime, TimeUnit.NANOSECONDS);
   System.out.println("encoded image: " +index);

   // sleep for framerate milliseconds
  Thread.sleep((long) (1000 / FRAME_RATE.getDouble()));
}
// Finally we tell the writer to close and write the trailer if
// needed
writer.close();

Другой вариант - сайт Screentoaster - но я заметил, какая частота кадров в нем предусмотрена.

4
ответ дан 15 December 2019 в 01:01
поделиться

Разве вы не можете адаптировать вашу программу, чтобы сбросить содержимое вашего окна после каждого обновления вместе с точным временем? Затем опубликовал их в фильме, если вам это нужно.

Это даст вам полный контроль.

0
ответ дан 15 December 2019 в 01:01
поделиться

Если вы запускаете свой Программа в Linux, вы можете воспользоваться RecordMyDesktop . Это одна из лучших программ записи, которые я использовал с элементами управления над фреймератом и othernot.

0
ответ дан 15 December 2019 в 01:01
поделиться

Если вы просто хотите сохранить визуальные изменения, вы можете использовать некоторое программное обеспечение для укупорки экрана:

Укупорка скриншотов с открытым исходным кодом: http://www.donationcoder.com/Software/Mouser/screenshotcaptor/index.html (или просто используйте обычный экран alt+print, ctrl v для каждого состояния). Видео укупориватель с открытым исходным кодом: http://camstudio.org/

0
ответ дан 15 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: