para - manual de programacion android pdf
Filtro de video Android (2)
Intento crear una aplicación en la que pueda agregar filtros a un video grabado. Básicamente, quiero replicar la funcionalidad que existe en el video de Instagram o Viddy.
He investigado y no puedo reconstruirlo todo. He investigado el uso de GLSurfaceView para reproducir el video grabado y sé que podría usar NDK para hacer la manipulación de píxeles y enviarla de regreso a SurfaceView o guardarla de alguna manera. El problema es que no sé cómo enviar los datos de píxeles porque parece que no hay función para acceder a ellos. Esta idea vino de la función de cámara "onPreviewFrame". La función devuelve una matriz de bytes que me permite manipular los píxeles y mostrarlos.
Otra idea es usar GLSurfaceView y usar OpenGL para renderizar el filtro. GLSurfaceView tiene un renderizador que puede configurar, pero no estoy muy familiarizado con OpenGL. Pero, nuevamente, esto se vuelve a obtener los píxeles de cada fotograma de video. También leí acerca de desgarrar cada cuadro como una textura y luego manipular la textura en OpenGL, pero las respuestas que he encontrado no son muy detalladas.
Por último, he investigado JavaCV. Tratando de usar FFmpegFrameGrabber, pero tampoco he tenido demasiado. Quería simplemente tomar un fotograma, pero cuando intento escribir el ByteBuffer del fotograma en un ImageView, aparece el error "buffer no lo suficientemente grande para píxeles".
¿Cualquier guía estaría genial?
Desde Android 4.3 puedes usar una Surface
como entrada para tu codificador. http://developer.android.com/about/versions/android-4.3.html#Multimedia
Entonces puede usar GLSurfaceView y aplicar los filtros usando shaders de fragmentos.
Puedes encontrar algunos buenos ejemplos aquí. http://bigflake.com/mediacodec/
Es bueno usar la biblioteca de filtros de exoplayer y esta hará su trabajo, pero para fusionar las capas filtradas con el video, debe hacer un trabajo adicional.
El enlace para el filtro de exoplayer está a su disposición: ExoplayerFilter
Tienes que ver el exoplayer para esto, pero sigue sus instrucciones y podrás hacer la tarea. Sígueme si surge algo.