Android - в режиме реального времени изменение вывода видео файла
Я боролся с этим в течение некоторого времени, нашел несколько тем об использовании TextureSurface, FFmpegFrameGrabber и т. Д., Но до сих пор не имею понятия. Я хотел бы загрузить видеофайл, чем взять кадр и внести некоторые изменения (обработать кадр с помощью JavaCV или OpenCV4Android) и показать его пользователю. Этот процесс должен повторяться для каждого кадра в видеофайле. У кого-нибудь есть подсказка, как это сделать?
1 ответ
Я еще не использовал FFmpegFrameGrabber прежде, но я использую ffmpeg JNI, написанный мной самостоятельно. Мое решение:
- Получите данные кадра (NV21 или BGR24) по ffmpeg.
- Обработка данных кадра с помощью моего алгоритма обработки изображений / видео.
- Загрузить данные кадра в графический процессор в виде текстуры OpenGL.
- Отображение данных с помощью фрагментного шейдера OpenGL в полноэкранном прямоугольнике.
У меня есть другая идея, если 2-я операция может быть записана в шейдерном графическом процессоре (многие эффекты камеры в реальном времени в мобильном устройстве выполняются этим методом). Вы можете использовать MediaPlayer вместо ffmpeg. И написать шейдер GPU для SurfaceTexture.