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.