Intereting Posts
Как разработать приложение дополненной реальности для Android Невозможно установить маржу элемента в ListView с помощью настраиваемого адаптера Получение ссылки на ViewHolder на RecyclerView Click Плюсы и минусы SQLite и общих настроек Получение ключа API для использования с облачными сообщениями Google Как Android Studio знает о новых версиях зависимостей? Ярлыки или пузыри Android в EditText Надежный способ получения данных StatusbarNotification (название, текст уведомления) Как заставить панель поиска Search Search заполнить всю панель действий? Могу ли я использовать стиль вкладок по умолчанию в своем пользовательском представлении вкладки? Реализовать несколько прослушивателей событий в одном фрагменте – Android Как отправить намерение с помощью телеграммы Невозможно переопределить стиль switchStyle и NumberPicker в Android Прокрутите внутри EditText, который находится в ScrollView ImageView: adjustViewBounds не работает с layout_height = "fill_parent"?

Запись на экране приложения In-App на Android для захвата 15 кадров в секунду

После многих поисков и дней экспериментов я не нашел прямого решения.

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

Есть ли какой-либо «простой» способ захвата экрана самого приложения?

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

Это кажется возможным, т. Е. Есть аналогичное приложение, которое делает это, его называют «Talking Tom»,

Solutions Collecting From Web of "Запись на экране приложения In-App на Android для захвата 15 кадров в секунду"

Это действительно зависит от того, как вы реализуете свое «домашнее животное». Вы рисуете на холсте? OpenGl ES? Обычная иерархия Android?

Во всяком случае, нет волшебного «recordScreenToVideo ()», как в одном из комментариев.

Тебе нужно:

  • Получите растровые изображения, представляющие ваши «рамки». Это зависит от того, как вы реализуете свое представление. Если вы нарисуете себя (Canvas или OpenGL), сохраните буферы исходного пикселя в качестве фреймов. Если вы используете обычную иерархию представлений, подкласс Android onDraw и сохраните «фреймы», которые вы получаете на холсте. Частота вызова системы onDraw будет не меньше фактической «частоты кадров» экрана. При необходимости дублируйте кадры после этого, чтобы предоставить видео с частотой 15 кадров в секунду.

  • Кодируйте свои фреймы. Похоже, что у вас уже есть механизм для этого, вам просто нужно, чтобы он был более эффективным.

Способы оптимизации кодирования:

  • Кэш ваших растровых изображений (кадров) и кодирование впоследствии. Это будет работать только в том случае, если ожидаемое видео будет относительно коротким, иначе вы выйдете из хранилища.
  • Запись выполняется только с частотой кадров, создаваемой вашим приложением (в зависимости от того, как вы рисуете), и используйте параметр энкодера для генерации видео с частотой 15 кадров в секунду (без фактического питания 15 кадров в секунду).
  • Отрегулируйте настройки качества на текущем устройстве. Это можно сделать, выполнив скрытый тест цикла ЦП при запуске приложения и определив некоторые пороговые значения.
  • Кодировать только наиболее релевантную часть экрана.
  • Опять же, действительно в зависимости от того, как вы реализуете – если вы можете сохранить некоторые «исторические данные», а затем преобразовать это в рамки без необходимости делать это в режиме реального времени, это было бы лучше. Например, «перемещение», «улыбка», «изменение цвета» – или любая ваша бизнес-логика, поскольку вы не уточнили об этом. Ваша функция «генерировать фильм» будет анимировать эти данные истории как последовательность кадров (без рисования на экране), а затем закодировать.

надеюсь, это поможет