This page explains how to configure and build FFmpeg for Android. Compilation for Android is a cross-compilation and presumes using Linux as a host system. The required steps are:
You can get the FFmpeg source code in these ways:
~/ffmpeg
.
git clone --branch n7.1.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
It is recommended to use the same FFmpeg version as documented in the Qt Multimedia main page .
The following paragraphs assumes that you store the FFmpeg source code under
~/ffmpeg
.
To build FFmpeg, these tools and packages are required:
You'll also need the Android NDK, SDK, and JDK installed and configured. You can find more information on setting these up here Qt for Android 快速入门 .
To install the required packages (including Yasm for FFmpeg), run:
apt-get install yasm
Additionally, if you're enabling a security backend, you need the corresponding developer package, for example:
apt-get install libssl-dev
For other backends, install the relevant packages:
libssl-dev
.
libgnutls-dev
.
libtls-dev
.
libmbedtls-dev
.
This part is not strictly necessary but it'll help with keeping configure command a bit cleaner and shorter.
The following command assumes that Andorid SDK is installed to
~/Android/sdk
and Android NDK version is 26.1.10909125.
export ANDROID_NDK_ROOT=~/Android/sdk/ndk/26.1.10909125
It is recommended to use the same NDK version as documented in the Qt for Android 快速入门 .
The architecture you should build for depends on the target devices:
Setup architecture-specific variables
export ARCH=aarch64 export TOOLCHAIN_ARCH=aarch64-linux-android export CPU=armv8-a
export ARCH=armv7 export TOOLCHAIN_ARCH=armv7a-linux-androideabi export CPU=armv7-a
export ARCH=x86 export TOOLCHAIN_ARCH=i686-linux-android export CPU=i686
export ARCH=x86_64 export TOOLCHAIN_ARCH=x86_64-linux-android export CPU=x86-64
创建
build-android
directory inside the
~/ffmpeg
directory and navigate into it:
mkdir ~/ffmpeg/build-android cd ~/ffmpeg/build-android
To configure FFmpeg, run:
../configure --prefix=../install-android --disable-doc --enable-network --enable-shared \
--host-os=linux-x86_64 --target-os=android \
--enable-cross-compile --arch=${ARCH} --cpu=${CPU} \
--enable-jni --enable-mediacodec \
--sysroot=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
--sysinclude=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ \
--cc=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/${TOOLCHAIN_ARCH}24-clang \
--cxx=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/${TOOLCHAIN_ARCH}24-clang++ \
--strip=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip
The
--prefix
argument specifies a path where the FFmpeg development libraries are installed after building. The documentation is not needed, but network features should be enabled. To build FFmpeg as static libraries, omit the
--enable-shared
选项。
If you're building FFmpeg with a security backend, you have 4 options to choose from (the same as when building for Linux) but only OpenSSL is tested by QtMultimedia maintainers for now. Choose the appropriate option and add it during FFmpeg configuration:
--enable-openssl # For OpenSSL --enable-gnutls # For GnuTLS --enable-libtls # For LibreSSL (libtls) --enable-mbedtls # For MbedTLS
If you're using OpenSSL you also need to add following options during FFmpeg configuration. Don't forget to replace
<ANDROID_OPENSSL_INCLUDE_DIR>
and
<ANDROID_OPENSSL_LIBS_DIR>
with actual paths.
--extra-cflags=-I<ANDROID_OPENSSL_INCLUDE_DIR> --extra-ldflags=-L<ANDROID_OPENSSL_LIBS_DIR>
If security backend is included, you should take care about its delivery yourself, ensuring correct libraries are installed on target platform or using stubs. The OpenSSL libraries that are linked must be called
libssl.so
and
libcrypto.so
, without any versioning suffixes. The user has to guarantee that libraries are of the same ABI version as OpenSSL headers FFmpeg was compiled with. For more information, see
为 Android 添加 OpenSSL 支持
.
Once the
configure
command finishes, build and install FFmpeg using the
make
命令。
make -j install
If the build completes without errors, FFmpeg development libraries are installed in the
../install-android
directory. If you build Qt Multimedia, this path is stored in the
FFMPEG_DIR
variable used when configuring Qt Multimedia.