Tengo compilado FFmpeg (libffmpeg.so) en Android. Ahora tengo que construir una aplicación como RockPlayer o usar el marco multimedia Android existente para invocar FFmpeg.
¿Tiene pasos / procedimientos / código / ejemplo sobre la integración de FFmpeg en Android / StageFright?
¿Pueden guiarme sobre cómo puedo usar esta biblioteca para la reproducción multimedia?
Tengo un requisito donde ya tengo transmisiones de audio y video, que necesito alimentar a FFmpeg y decodificarlo / renderizarlo. ¿Cómo puedo hacer esto en Android, ya que las API de IOMX están basadas en OMX y no pueden enchufar FFmpeg aquí?
Además, no pude encontrar documentación sobre las API de FFmpeg que deben usarse para la reproducción.
Respuestas:
Estos son los pasos que seguí para lograr que ffmpeg funcione en Android:
make
afuera y lejos. Deberá extraer también bionic (libc) y zlib (libz) de la compilación de Android, ya que las bibliotecas ffmpeg dependen de ellos.Cree una funcionalidad de ffmpeg de envoltura de biblioteca dinámica utilizando el NDK de Android . Hay mucha documentación sobre cómo trabajar con el NDK. Básicamente, necesitará escribir un código C / C ++ para exportar la funcionalidad que necesita de ffmpeg a una biblioteca con la que Java pueda interactuar a través de JNI. El NDK le permite enlazar fácilmente con las bibliotecas estáticas que ha generado en el paso 1, simplemente agregue una línea similar a Android.mk:
LOCAL_STATIC_LIBRARIES := libavcodec libavformat libavutil libc libz
Use la biblioteca dinámica ffmpeg-wrapping de sus fuentes java. Hay suficiente documentación sobre JNI, deberías estar bien.
Con respecto al uso de ffmpeg para la reproducción, hay muchos ejemplos (el binario ffmpeg en sí mismo es un buen ejemplo), aquí hay un tutorial básico. La mejor documentación se puede encontrar en los encabezados.
Buena suerte :)
fuente
Por varias razones, Multimedia fue y nunca es fácil en términos de lograr la tarea sin comprometer la eficiencia. ffmpeg es un esfuerzo para mejorarlo día a día. Es compatible con diferentes formatos de códecs y contenedores.
Ahora, para responder la pregunta de cómo usar esta biblioteca , diría que no es tan simple escribirla aquí. Pero puedo guiarte de las siguientes maneras .
1) Dentro del directorio ffmpeg del código fuente, tiene output_example.c o api_example.c . Aquí puede ver el código donde se realiza la codificación / decodificación. Tendrás una idea de qué API dentro de ffmpeg debes llamar. Este sería tu primer paso.
2) Dolphin Player es un proyecto de código abierto para Android. Actualmente tiene errores, pero los desarrolladores están trabajando continuamente. En ese proyecto, tiene lista toda la configuración que puede usar para continuar su investigación. Aquí hay un enlace al proyecto desde code.google.com o ejecute el comando " git clone https://code.google.com/p/dolphin-player/ " en una terminal. Puede ver dos proyectos llamados P y P86. Puedes usar cualquiera de ellos.
Un consejo adicional que me gustaría ofrecer es que cuando está creando el código ffmpeg, dentro de build.sh necesita habilitar los muxers / demuxers / encoders / decoders de los formatos que desea usar. De lo contrario, el código correspondiente no se incluirá en las bibliotecas. Me llevó mucho tiempo darme cuenta de esto. Así que pensé en compartirlo contigo.
Algunos conceptos básicos: cuando decimos un archivo de video, por ejemplo: avi, es una combinación de audio y video
Archivo de video = Video + Audio
Video = Códec + Muxer + Demuxer
códec = codificador + decodificador
=> Video = codificador + decodificador + Muxer + Demuxer (Mpeg4 + Mpeg4 + avi + avi - Ejemplo para contenedor avi)
Audio = Códec + Muxer + Demuxer
códec = codificador + decodificador
=> Audio = codificador + decodificador + Muxer + Demuxer (mp2 + mp2 + avi + avi - Ejemplo para contenedor avi)
El códec (el nombre se deriva de una combinación de en * co * der / * dec * oder) es solo una parte del formato que define los algoritmos utilizados para codificar / decodificar un marco. AVI no es un códec, es un contenedor que utiliza códec de video de Mpeg4 y códec de audio de mp2.
Muxer / demuxer se usa para combinar / separar los cuadros de un archivo usado mientras se codifica / decodifica.
Entonces, si desea utilizar el formato avi, debe habilitar los componentes de video + componentes de audio.
Por ejemplo, para avi, debe habilitar lo siguiente. Codificador mpeg4, decodificador mpeg4, codificador mp2, decodificador mp2, avi muxer, avi demuxer.
phewwwwwww ...
Programáticamente build.sh debe contener el siguiente código:
Espero no confundirte más después de todo esto ...
Gracias, cualquier ayuda necesaria, por favor hágamelo saber.
fuente
La implementación más fácil de construir y fácil de usar que he encontrado está hecha por el equipo del proyecto guardian: https://github.com/guardianproject/android-ffmpeg
fuente
He hecho un pequeño proyecto para configurar y construir X264 y FFMPEG usando el NDK de Android. Lo principal que falta es una interfaz JNI decente para que sea accesible a través de Java, pero esa es la parte fácil (relativamente). Cuando tenga la oportunidad de hacer que la interfaz JNI sea buena para mis propios usos, la presionaré.
El beneficio sobre el sistema de compilación de Olvaffe es que no requiere archivos Android.mk para compilar las bibliotecas, solo usa los archivos MAKE regulares y la cadena de herramientas. Esto hace que sea mucho menos probable que deje de funcionar cuando realiza un nuevo cambio de FFMPEG o X264.
https://github.com/halfninja/android-ffmpeg-x264
fuente
x264_param_parse': common.c:(.text+0x2864): undefined reference to
_DefaultRuneLocale 'collect2: ld devolvió 1 estado de salida make: *** [x264] Error 1Después de mucha investigación, en este momento esta es la biblioteca compilada más actualizada para Android que encontré:
https://github.com/bravobit/FFmpeg-Android
FFmpeg release n4.0-39-gda39990
fuente
Para hacer mi aplicación FFMPEG, utilicé este proyecto ( https://github.com/hiteshsondhi88/ffmpeg-android-java ), así que no tengo que compilar nada. Creo que es la manera fácil de usar FFMPEG en nuestras aplicaciones de Android.
Más información en http://hiteshsondhi88.github.io/ffmpeg-android-java/
fuente
Inspirado por muchas otras implementaciones de FFmpeg en Android (principalmente el proyecto guadian ), encontré una solución (con soporte Lame también).
(cojo y FFmpeg: https://github.com/intervigilium/liblame y http://bambuser.com/opensource )
para llamar a FFmpeg:
y para manejar la salida de la consola:
fuente
Es extraño que este proyecto no haya sido mencionado: AndroidFFmpeg de Appunite
Tiene instrucciones paso a paso bastante detalladas para copiar / pegar en la línea de comandos, para gente perezosa como yo))
fuente
Tuve el mismo problema, encontré la mayoría de las respuestas aquí anticuadas. Terminé escribiendo un contenedor en FFMPEG para acceder desde Android con una sola línea de código.
https://github.com/madhavanmalolan/ffmpegandroidlibrary
fuente
Primero, agregue la dependencia de la biblioteca FFmpeg
Luego carga en actividad
Utilice también otra función de FFmpeg
fuente