Generalidades

[Android Development] Cómo construir una extensión de Ffmpeg para la integración en Exoplayer | por Thế Dũng | Agosto de 2021

Hola a todos, espero que os vaya bien!

TL; DR: Lea el primer texto grande en negrita a continuación.

Acabo de encontrar un problema al usar Exoplayer para reproducir una transmisión UDP.El video esta llegandoGRAMO Pero el audio no lo es. Entonces comencé a buscar el motivo. En primer lugar, puede encontrar este https://github.com/google/ExoPlayer/issues/6843. Pero le pregunté al equipo de codificadores de video y me respondieron que usan AAC en lugar de Ffmpeg. Entonces, estuve confundido por un día y decidí usar VLC para encontrar el códec de audio en uso (Herramientas> Información del códec). Descubrí que es audio MPEG. Entonces, tengo que agregar la extensión Ffmpeg a mi reproductor.

Hay otra cosa muy impresionante esperándome. Documentación ampliada de Ffmpeg. Tengo los documentos oficiales y luché con ellos durante 2 días. Genere una pequeña extensión para mi reproductor. La documentación está aquí. Así que decidí escribir este artículo de alguna manera para ahorrar tiempo.

Yo uso Windows y Mac OS. Y no puedo usar Windows para crear extensiones (se recomienda Powershell). Entonces mac os es mi esperanza.

Abra la extensión ExoPlayer FFmpeg.

Listo para comenzar: debe permitir que el terminal haga lo que quiere hacer de las siguientes maneras:

Vaya a Preferencias del sistema> Seguridad y privacidad> Herramientas para desarrolladores> Permitir terminal. Y recuerda salir de todas las terminales. Necesitamos hacer esto para aplicar los cambios.

Si no realiza la configuración anterior, puede encontrar algunos errores, como

No se pudo abrir «Clang» porque no se pudo verificar el desarrollador.

Esto es molesto.

¡Bien, ahora podemos empezar!

Primero, git clone exoplayer. tan fácil.

En segundo lugar, abra la terminal y cd a la ubicación del proyecto Exoplayer.

EXOPLAYER_ROOT="$(pwd)"
FFMPEG_EXT_PATH="$EXOPLAYER_ROOT/extensions/ffmpeg/src/main"
NDK_PATH="<path to Android NDK>"

Nota: Si cree que está utilizando el NDK de Android utilizado en Android Studio para completar este campo … no lo haga

No sé por qué, pero hace que el comando construya un error (como no puedo encontrar config.mak, no hay un directorio xyz … no recuerdo)

Entonces, ¿qué NDK deberíamos usar?yo suelo NDK r22b.El último NDK estable. Probé NDK r15 y r21e, pero no me funcionaron. Puede descargar el NDK desde aquí. Creo que deberías encontrar la versión STABLE para que funcione.

Cuando tengas NDK En su disco, descomprima y pase la ruta a su terminal. Debe tener un aspecto como este:

Luego, defina PLATAFORMA HOST (para Linux es linux-x86_64 )

HOST_PLATFORM="darwin-x86_64"

Luego

cd "<preferred location for ffmpeg>" && 
git clone git://source.ffmpeg.org/ffmpeg &&
cd ffmpeg &&
git checkout release/4.2 &&
FFMPEG_PATH="$(pwd)"

sitio <preferred location for ffmpeg> Con su ubicación (puede crear una nueva carpeta y colocarla en el nombre de la carpeta)

ENABLED_DECODERS=(mp3)

En esta línea, solo quiero compilar para admitir mp3 (MPEG / L1, L2) y presionar Enter. Si desea compilar para otros formatos, consulte esta página de soporte.

cd "$FFMPEG_EXT_PATH/jni" && 
./build_ffmpeg.sh
"$FFMPEG_EXT_PATH" "$NDK_PATH" "$HOST_PLATFORM" "$ENABLED_DECODERS[@]"

Después de ingresar el comando anterior, debería ver el terminal ejecutándose e imprimiendo una gran cantidad de texto en la pantalla.

Ha terminado de crear una biblioteca nativa para renderizar audio MPEG. El otro paso es crear el archivo aar.

Abra el proyecto de exoplayer que clonó desde el primer paso.Si un error dice Revisión no válida: 3.18.1 … Puede solucionarlo degradando el CMake utilizado en el proyecto. Mira esto.

Luego, cuando el proyecto se cargue correctamente, ingrese el comando en la terminal de Android Studio (por supuesto, puede escribirlo en una terminal separada en la misma ubicación del CD)

./gradlew extension-ffmpeg:assembleRelease

La terminal se ejecutará.

En este paso, si encuentra un error relacionado con Java:

Tarea: library-common: compileReleaseJavaWithJavac falló

No se puede encontrar tools.jar.Compruebe si / Library / Internet Plug-Ins / JavaAppletPlugin.plugin / Contents / Home contiene una instalación JDK válida

Esto significa que tu construcción es incorrecta. Para solucionarlo, consulte esto. Puede probar la respuesta de verificación verde, pero en mi caso, la segunda respuesta funciona. Así que lo cité en este artículo.

Y ejecute el ./gradlew anterior nuevamente.

Una vez que la compilación sea exitosa, puede obtener aar en la carpeta de compilación ffmpeg e importarlo a su proyecto.

/ ExoPlayer / extensions / ffmpeg / buildout / outputs / aar

Usa gradle para importar la biblioteca aar a tu proyecto. Esto debería ser fácil, así que no lo pondré aquí. (Acabo de buscar, este es el resultado)

Log.d("Check", "$FfmpegLibrary.isAvailable()")mRenderFactory.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)

Use FfmpegLibrary.isAvailable () para verificar la disponibilidad de la extensión

Y configure la fábrica de renderizado para usar extensiones cuando sea necesario.

Se hace aquí. La aplicación ahora puede reproducir audio MPEG.

¡gracias por leer!

¡Diviértete codificando!

LEER  El almacenamiento de iCloud está lleno: cómo crear más espacio de almacenamiento

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba