android opengl-es ffmpeg glsurfaceview mediacodec

android - Grabar una superficie usando MediaCodec



opengl-es ffmpeg (1)

Entonces, en mi aplicación, puedo mostrar los efectos (como el filtro de desenfoque, gaussiano) al video que proviene de la cámara usando la biblioteca GPUImage .

Básicamente, I (biblioteca) tomará la información de la cámara, obtendrá los datos de bytes sin formato, los convertirá en formato RGBA del formato YUV, luego aplicará los efectos a esta imagen y se mostrará en la Surface de GLSurfaceView usando OpenGL. finalmente, para el usuario, parece un video con efectos aplicados.

Ahora quiero grabar los marcos de Surface como un video usando MediaCodec API.

pero esta discusión dice que no podemos pasar una Surface predefinida al MediaCodec .

He visto algunas muestras en bigflake donde está creando Surface usando MediaCodec.createInputSurface() pero para mí, Surface viene de GLSurfaceView .

Entonces, ¿cómo puedo grabar un fotograma de una Surface como un video?

Grabaré el audio paralelamente, fusionaré ese video y audio usando FFMPEG y lo presentaré al usuario como un video con los efectos aplicados.


Puedes ver un ejemplo completo de esto en Grafika .

En particular, la actividad "Mostrar + capturar cámara" registra la salida de la cámara en .mp4. También demuestra la aplicación de algunas técnicas simples de procesamiento de imágenes en el sombreador GL. Utiliza un GLSurfaceView y una danza intrincada para que la grabación siga los cambios de orientación.

También posiblemente de interés, la actividad "Record GL app with FBO" graba OpenGL ES de varias formas. Utiliza SurfaceView simple y es mucho más sencillo.