Как встроить текст при записи видео в 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.)
Лучше всего найти библиотеку, которая сделает это за вас и имеет дружественную лицензию с открытым исходным кодом.