Conversión de imágenes en vídeo
¿cómo puedo convertir imágenes a vídeo sin utilizar FFmpeg o JCodec , sólo con android MediaCodec . Las imágenes para video son archivos de mapa de bits que pueden ser ARGB888 o YUV420 (mi elección). Lo más importante es que el video tiene que ser jugable en dispositivos Android y la API máxima es 16. Sé todo sobre API 18 MediaMuxer y no puedo usarlo.
Por favor, ayúdame, estoy atascado en esto por muchos días. (JCodec a lento, y FFmpeg muy complicado de usar).
- VideoView se bloquea después de mucho tiempo jugando
- Recorte de vídeo antes de la codificación con MediaCodec para Grafika "Captura continua" Actividad
- Android MediaPlayer no está dispuesto a buscar a través de la secuencia de vídeo RTSP
- Android - ¿Es posible 'bloquear' la velocidad de fotogramas de vista previa de una cámara?
- Cómo activar FullScreen con VideoView Android
- Android MediaPlayer Streaming desde un redireccionamiento PHP no funciona-out!
- La parada del mediarecorder de Android falló
- Problema de transmisión en vivo de Android RTSP
- Recibir y decodificar H.264 en vivo en Android
- Android - Cómo iniciar la grabación de vídeo automáticamente cuando se llama a la cámara intención
- Reproducción de vídeo en pantalla completa
- Recomponer Disposición de actividad para reproducir vídeo en pantalla completa cuando se gira la pantalla
- Cómo escalar el video en un SurfaceView más grande que la ventana en Android?
No existe una forma sencilla de hacerlo en la API 16 que funciona en todos los dispositivos.
Encontrará problemas con la alineación del búfer , los espacios de color y la necesidad de utilizar diferentes diseños YUV en diferentes dispositivos .
Considere la cuestión de la alineación de búfer. En los dispositivos pre-API 18 con SOCs de Qualcomm, se tuvo que alinear los planos CbCr con un offset de 2K desde el inicio del búfer. En la API 18, todos los dispositivos utilizan el mismo diseño; esto se hace cumplir por las pruebas CTS que se agregaron en Android 4.3.
Incluso con API 18 todavía tiene que ejecutar tiempo de detección si el codificador quiere planar o semi-planar valores. (Probablemente no sea relevante para su situación, pero ninguno de los formatos YUV emitidos por la cámara son aceptados por MediaCodec
.) Nota no hay entrada RGB a MediaCodec
.
Si la portabilidad no es una preocupación, es decir, que está apuntando a un dispositivo específico, su código será mucho más simple.
Hay fragmentos de código en las páginas de SO enlazadas anteriormente. El ejemplo "oficial" más cercano es el buffer-to-buffer / buffer-to-surface tests in EncodeDecodeTest . Estas son pruebas API 18, lo que significa que no realizan la danza "si QC y API16 cambian la alineación del búfer", pero sí muestran cómo hacer la detección planar o semiplanar. No incluye un convertidor de color RGB-a-YUV, pero hay ejemplos de tales alrededor de la web.
En el lado positivo, la salida del codificador parece estar bien en cualquier dispositivo y versión de la API.
La conversión del flujo crudo H.264 a un archivo .mp4 requiere una biblioteca de terceros, ya que como se observó MediaMuxer
no está disponible. Creo que algunas personas han instalado ffmpeg como una utilidad de línea de comandos y lo ejecutó de esa manera (tal vez como esto ?).