Как встроить текст при записи видео в Android?

Моя цель - записать видео в Android с встроенным секундомером во время записи.

Я следовал за примерами Grafika Project, CameraCaptureActivity.java, где они используют OpenGL 2.0 для записи небольшого блока вместе с записью видео. Они используют следующий код для рисования блока в OpenGL 2.0

private static void drawExtra()
{
      GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
      GLES20.glEnable(GLES20.GL_SCISSOR_TEST);
      GLES20.glScissor(0, 0, width / 3, height / 3);
      GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
      GLES20.glDisable(GLES20.GL_SCISSOR_TEST); 
}

Приведенный выше код рисует белый блок в нижней левой части видео во время записи и сохранения.

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

У меня нет знаний об OpenGL 2.0. Нужна помощь, чтобы просто нарисовать текст на той же поверхности, где записывается видео, чтобы он встраивался в него, как эта белая коробка.

2 ответа

Решение

Вы можете попробовать Intel INDE на https://software.intel.com/en-us/intel-inde и Media Pack для Android, который является частью INDE, учебные пособия на https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorials. Он имеет пример эффекта TextOverlayEffect для размещения текста на видео

Это не характерно для MediaCodec. Рисование текста в OpenGL - довольно распространенная вещь, которую нужно делать. Обычный подход состоит в том, чтобы визуализировать текст с помощью механизма шрифтов (например, Skia) в текстуру, а затем визуализировать текстуру.

Android Breakout использует этот подход: он рендерит фиксированный набор строк в текстуру, а затем визуализирует из этой текстуры. Большинство строк целые ("игра окончена"), но цифры счета обрабатываются индивидуально. Смотрите, в частности, этот класс.

Если ваш набор символов ограничен, и вы не слишком взволнованы по поводу кернинга (например, текст ASCII на английском языке получается довольно хорошо), вы можете просто визуализировать отдельные глифы символов и затем рисовать из этого. Версия 1.1. инструмента "screenrecord" делает это. (Обратите внимание, что это реализовано в C++.)

Вы можете увидеть как на работе в этом видео. Начальная страница текста и строка текста в верхней части экрана накладываются на экранную запись при записи видео, рисуется по одному символу за раз. "Готов?" сообщение с тенью отбрасывается игрой из одной строки. (Меню только отображаются с Android Framework.)

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

Другие вопросы по тегам