Grabación de una superficie con MediaCodec

Por lo tanto, en mi aplicación, puedo mostrar efectos (como el filtro borroso, gaussiano) al vídeo que viene de la cámara usando la biblioteca GPUImage .

Básicamente, I (biblioteca) tomará la entrada de la cámara, obtendrá los datos de bytes sin procesar, los convertirá en formato RGBA a partir del formato YUV, luego aplicará efectos a esta imagen y se mostrará en la Surface de GLSurfaceView con OpenGL. Finalmente, para el usuario, se ve como un video con efectos aplicados.

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

Pero esta discusión dice que no podemos pasar una Surface predefinida a MediaCodec .

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

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

Voy a grabar el audio en paralelo, combinar ese video y audio usando FFMPEG y presentar al usuario como un video con efectos aplicados.

Usted puede ver un ejemplo completo de esto en Grafika .

En particular, la actividad "Show + capture camera" registra la salida de la cámara a .mp4. También demuestra la aplicación de algunas técnicas simples de procesamiento de imágenes en el sombreado GL. Utiliza un GLSurfaceView y una danza convoluted para mantener la grabación va a través de cambios de orientación.

También posiblemente de interés, la "Record GL app con FBO" registra la actividad de OpenGL ES haciendo un par de maneras diferentes. Utiliza SurfaceView simple y es mucho más sencillo.

  • OpenGL al activar Android Phone
  • Android: actualiza el mapa de bits del hilo del temporizador
  • Transparencia de OpenGL ES 2.0 mediante pruebas alfa en shader
  • Usando Tracer Para opengl en depurador android
  • Android Vista vs SurfaceView vs GLSurfaceView para la aplicación de dibujo 2D con Zoomable interfaz de usuario
  • Añadir HTML / JS / CSS GUI a la aplicación OpenGL (Android e iOS)
  • GlDepthMask (GL_FALSE) trashes el búfer de cuadros en algunas GPUs
  • Android pinch / zoom y glfrustum
  • Android OpenGL ES: ¿Cómo se selecciona un objeto 2D?
  • NVidia PerfHUD ES Tegra en Google Nexus 7
  • ¿Cuándo sincronizo métodos o utilizo bloques sincronizados en mis métodos en un juego de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.