Альтернативы для генерации видео потока из скриншотов

Я работаю в игрушечном проекте по удаленному администрированию. Пока что я могу делать скриншоты и управлять мышью с помощью класса Robot. Скриншоты являются экземплярами BufferedImage.

Прежде всего, мои требования: - Только сервер и клиент. - Производительность важна, так как клиент может быть приложением для Android.

Я думал открыть два сокетных соединения, одно для мыши и системных команд, а второе для видео.

Как я могу преобразовать скриншоты в видеопоток? Должен ли я конвертировать их в известный видеоформат или можно просто отправлять серию последовательных изображений?

Сжатие - еще одна проблема. Отправка снимков экрана в полном разрешении приведет к низкой частоте кадров, согласно моим предварительным тестам. Я думаю, что для восприятия движения мне нужно не менее 24 кадров в секунду, поэтому придется и уменьшать масштаб, и сжимать. Я мог бы преобразовать BufferedImages в файлы jpg и затем установить степень сжатия, но я не хочу хранить файлы на диске, они должны жить только в оперативной памяти. Другой возможностью было бы сериализовать экземпляры (представляющие несжатый снимок экрана) в GZipOutputStream. Каков правильный подход для этого?

Подведем итоги:

  • В случае, если вы рекомендуете подход "серия изображений", как бы вы сериализовали их в сокет OutputStream?
  • Если ваше предложение заключается в преобразовании в известный видеоформат, какие классы или библиотеки доступны?

Заранее спасибо.

UPDATE: мои тесты, клиент и сервер на одной машине
-Полный экран сериализованных BufferedImages (только dimension, type и int[]), без сжатия: 1.9 fps.
-полноэкранные изображения через GZip-потоки: 2.6 fps.
-уменьшенные изображения (ширина 640) и потоки GZip: 6.56 fps.
-Полноэкранные изображения и кодирование RLE: 4,14 кадров в секунду.
-Уменьшенные изображения и кодирование RLE: 7,29 кадров в секунду.

6
задан Mister Smith 15 February 2012 в 12:43
поделиться