Фильтр для Android

Я пытаюсь создать приложение, где я могу добавлять фильтры к записанному видео. В принципе, я хочу воспроизвести функциональность, существующую в видеоролике Instagram, или Viddy.

Я провел исследования, и я не могу собрать все это вместе. Я изучил использование GLSurfaceView для воспроизведения записанного видео, и я знаю, что могу использовать NDK для манипуляции пикселями и отправить его обратно в SurfaceView или сохранить его каким-то образом. Проблема в том, что я не знаю, как отправлять данные пикселя, потому что, похоже, нет никакой функции для доступа к нему. Эта идея исходила от функции камеры "onPreviewFrame". Функция возвращает массив байтов, позволяющий мне манипулировать пикселями и отображать их.

Другая идея - использовать GLSurfaceView и использовать OpenGL для рендеринга фильтра. У GLSurfaceView есть средство визуализации, которое вы можете установить, но я не очень хорошо знаком с OpenGL. Но опять же, это возвращается к фактическому получению пикселей каждого видео кадра. Я также читал о том, чтобы разорвать каждый кадр как текстуру, а затем манипулировать текстурой в OpenGL, но ответы, которые я встретил, не очень детализированы.

Наконец, я просмотрел JavaCV. Попытка использовать FFmpegFrameGrabber, но у меня тоже не было. Я хотел просто захватить один кадр, но когда я пытаюсь записать фрейм ByteBuffer в ImageView, я получаю ошибку "буфер не достаточно большой для пикселей".

Любое руководство будет замечательным.

Ответ 2

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

Ссылка для фильтра exoplayer для вас: ExoplayerFilter

Для этого вам нужно использовать exoplayer, но следуйте инструкциям, которые вы сможете выполнить. Пинг меня, если что-то придет.