ffmpeg-rockchip 安卓平台编译指南

张开发
2026/6/11 0:29:25 15 分钟阅读
ffmpeg-rockchip 安卓平台编译指南
一、编译工具说明Ubuntu18.04采用VMWare虚拟机分配8个CPU内存200GBcmake3.28下载链接mesonninjaNDK(r27d): 下载链接rkmpp下载链接rkrga下载链接libdrm下载链接alsa下载链接ffmpeg-rockchip下载链接ffmpeg-rockchip 依赖 rkmpp、rkrga、libdrm 三个库另外需要 alsa 库用于处理音频设备。所以需要先编译它们。然后使用 pkg-config 指定路径。二、CMake 安装将下载的 cmake-3.28.0-linux-x86_64.tar.gz 解压到指定目录然后配置环境变量。不用这个其他版本可能会有问题因为 rkmpp 需要 OBJECT 的链接库这个需要3.x的版本我试过3.10是不行的。exportPATH/home/test/cmake-3.28.0-linux-x86_64/bin:$PATH三、meson 安装Meson 是一个开源、高性能的构建系统它的核心目标是尽可能快并且对用户友好 。你可以把它理解为一个自动化构建工具旨在帮助开发者更高效地编译、测试和打包软件项目 。更准确地说Meson 是一个构建系统生成器 。它本身不直接调用编译器进行编译而是读取你用简洁语言写好的构建规则然后为另一个更底层的后端构建工具如 Ninja、Visual Studio生成所需的输入文件 。你可以将其类比为 CMake但 Meson 在设计哲学上有其独到之处。在 Ubuntu 上安装 meson 使用 python3。安装如下:安装必要工具sudoapt-getinstallpython3 python3-pip ninja-build安装 mesonpip3install--usermeson添加环境变量exportPATH/home/topeet/.local/bin:$PATH验证版本meson--version输出: 0.61.5四、rkmpp 编译在 Ubuntu 用户目录下克隆项目gitclone-bjellyfin-mpp--depth1https://gitee.com/nyanmisaka/mpp.git rkmpp进入的 build 目录下修改 ev_setup.sh NDK_SEARCH_PATH 变量值将其修改为 ndk 的目录。包含 ndk(r27d)的目录。NDK_SEARCH_PATH(/home/test/ndk/)进入 build/android/arm 目录修改 make-Android.sh指定 CMAKE_INSTALL_PREFIX 将库安装到指定目录。${CMAKE_PROGRAM}-DCMAKE_TOOLCHAIN_FILE${TOOLCHAIN_FILE}\-DCMAKE_INSTALL_PREFIX/home/test/install/mpp/armeabi-v7a\省略以此执行如下命令。./make-Android.bashmake-j8makeinstall这是32位编译编译64位只需要进入 aarch64 目录然后修改下 make-Android.sh执行上述的命令即可。五、rkrga 编译克隆项目gitclone-bjellyfin-rga--depth1https://gitee.com/nyanmisaka/rga.git rkrga进入 rkrga/toolchains 目录修改 toolchain_android_ndk.cmake。# Modify to the local android ndk path.SET(CMAKE_ANDROID_NDK/home/test/ndk/android-ndk-r27d)SET(CMAKE_SYSTEM_NAME Android)SET(CMAKE_SYSTEM_VERSION24)SET(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)SET(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang)SET(CMAKE_ANDROID_STL_TYPE c_static)执行 rkrga 目录下的 cmake-linux.sh。./cmake-android.sh编译64位秩序将脚本 CMAKE_ANDROID_ARCH_ABI 修改为 arm64-v8a。然后编译即可。六、libdrm 编译克隆 ligdrm 项目这里使用的最新版本 2.4.131.https://gitlab.freedesktop.org/mesa/libdrm.git创建构建目录和安装目录cdlibdrmmkdirbuildmkdirinstall创建 cross_file.txt[binaries]carmv7a-linux-androideabi23-clangcpparmv7a-linux-androideabi23-clangarllvm-arstripllvm-strip[host_machine]systemandroidcpu_familyarmcpuarmendianlittle[build_machine]systemlinuxcpu_familyx86_64进入 build 目录执行如下命令meson--prefix$(pwd)/../install --cross-file../cross_file.txt-Dinteldisabled-Dradeondisabled-Damdgpudisabled-Dnouveaudisabled-Dvmwgfxdisabled-Dvc4disabled-Detnavivdisabled-Dcairo-testsdisabled-Dman-pagesdisabled-Dvalgrinddisable执行 ninja 和 ninja installninjaninjainstall编译64位只需要将脚本修改如下然后重新编译。caarch64-linux-android23-clangcppaarch64-linux-android23-clangarllvm-arstripllvm-strip[host_machine]systemandroidcpu_familyaarch64cpuaarch64endianlittle[build_machine]systemlinuxcpu_familyx86_64经过上面编译后在 /home/test/install 目录下生成如下:每一个目录下又包含 armeabi-v7a 和 arm64-v8a 两个子目录分别表示32为和64位的编译产物。七、编译 alsa-lib 库解压项目cdalsa-lib-1.2.9创建脚本 android.sh#!/bin/sh# armeabi-v7a# arm64-v8aexportABIarmeabi-v7aPREFIX/home/test/install/${ABI}# armv7: armv7a-linux-androideabi# armv8a: aarch64-linux-androidexportTARGETarmv7a-linux-androideabiexportAPI27exportANDROID_NDK_ROOT/home/test/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64exportPATH${ANDROID_NDK_ROOT}/bin:$PATHexportCC${TARGET}${API}-clangexportCXX${TARGET}${API}-clangexportARllvm-arexportRANLIBllvm-ranlibexportLINKllvm-linkexportSTRIPllvm-strip# 配置搜索库的位置# 编译./configureCFLAGS-D_GNU_SOURCE -DANDROID\--prefix${PREFIX}\--host$TARGET\--disable-python\--with-softfloatyes\--with-versionedno# make distcleanmake-j8makeinstall八、ffmpeg-rockchip 编译克隆项目这里使用7.1版本。如果要编译6.0、6.1遇到错误可以参考链接https://gitee.com/nyanmisaka/ffmpeg-rockchip.git在 ffmpeg-rockchip 目录下增加 android64.sh 脚本。#!/bin/sh# 公共根目录根据实际环境修改NDK_ROOT/home/test/android-ndk-r27d/toolchains/llvm/prebuilt/linux-x86_64INSTALL_BASE/home/test/installX264_BASE/home/test/x264-master/buildFFMPEG_SRC$(pwd)# 当前目录应为 FFmpeg 源码根目录# 定义两个构建函数使用子 shell 隔离变量build_armeabi_v7a()(ABIarmeabi-v7aPREFIX/home/test/install/ffmpeg/${ABI}TARGETarmv7a-linux-androideabiAPI27ARCHarmCPUarmv7-aexportPATH${NDK_ROOT}/bin:$PATHexportCC${TARGET}${API}-clangexportCXX${TARGET}${API}-clangexportARllvm-arexportRANLIBllvm-ranlibexportLINKllvm-linkexportSTRIPllvm-stripexportLD# 依赖库路径exportX264_PATH${X264_BASE}/${ABI}/x264/exportPKG_CONFIG_PATH${INSTALL_BASE}/mpp/${ABI}/lib/pkgconfig:${INSTALL_BASE}/rga/${ABI}/lib/pkgconfig:${INSTALL_BASE}/libdrm/${ABI}/lib/pkgconfig:${X264_PATH}/lib/pkgconfig:${INSTALL_BASE}/alsa/${ABI}/lib/pkgconfig# 配置编译选项./configure\--prefix${PREFIX}\--enable-gpl\--enable-version3\--enable-libdrm\--enable-rkmpp\--enable-rkrga\--enable-libx264\--disable-doc\--host-oslinux-x86_64\--sysroot${NDK_ROOT}/sysroot\--enable-cross-compile\--target-osandroid\--cpu${CPU}\--arch${ARCH}\--enable-shared\--disable-static\--disable-ffplay\--disable-ffprobe\--extra-cflags--target${TARGET}${API}-I${X264_PATH}/include -I${INSTALL_BASE}/mpp/${ABI}/include -I${INSTALL_BASE}/rga/${ABI}/include -I${INSTALL_BASE}/libdrm/${ABI}/include -I${INSTALL_BASE}/alsa/${ABI}/include\--extra-ldflags--target${TARGET}${API}-L${X264_PATH}/lib -L${INSTALL_BASE}/mpp/${ABI}/lib -L${INSTALL_BASE}/rga/${ABI}/lib -L${INSTALL_BASE}/libdrm/${ABI}/lib -L${INSTALL_BASE}/alsa/${ABI}/libmakecleanmake-j8makeinstall)build_arm64_v8a()(ABIarm64-v8aPREFIX/home/test/install/ffmpeg/${ABI}TARGETaarch64-linux-androidAPI27ARCHaarch64CPUarmv8-aexportPATH${NDK_ROOT}/bin:$PATHexportCC${TARGET}${API}-clangexportCXX${TARGET}${API}-clangexportARllvm-arexportRANLIBllvm-ranlibexportLINKllvm-linkexportSTRIPllvm-stripexportLDexportX264_PATH${X264_BASE}/${ABI}/x264/exportPKG_CONFIG_PATH${INSTALL_BASE}/mpp/${ABI}/lib/pkgconfig:${INSTALL_BASE}/rga/${ABI}/lib/pkgconfig:${INSTALL_BASE}/libdrm/${ABI}/lib/pkgconfig:${X264_PATH}/lib/pkgconfig:${INSTALL_BASE}/alsa/${ABI}/lib/pkgconfig ./configure\--prefix${PREFIX}\--enable-gpl\--enable-version3\--enable-libdrm\--enable-rkmpp\--enable-rkrga\--enable-libx264\--disable-doc\--host-oslinux-x86_64\--sysroot${NDK_ROOT}/sysroot\--enable-cross-compile\--target-osandroid\--cpu${CPU}\--arch${ARCH}\--enable-shared\--disable-static\--disable-ffplay\--disable-ffprobe\--extra-cflags--target${TARGET}${API}-I${X264_PATH}/include -I${INSTALL_BASE}/mpp/${ABI}/include -I${INSTALL_BASE}/rga/${ABI}/include -I${INSTALL_BASE}/libdrm/${ABI}/include -I${INSTALL_BASE}/alsa/${ABI}/include\--extra-ldflags--target${TARGET}${API}-L${X264_PATH}/lib -L${INSTALL_BASE}/mpp/${ABI}/lib -L${INSTALL_BASE}/rga/${ABI}/lib -L${INSTALL_BASE}/libdrm/${ABI}/lib -L${INSTALL_BASE}/alsa/${ABI}/libmakecleanmake-j8makeinstall)# 根据需要调用函数可单独注释/取消注释echo开始构建 armeabi-v7a...build_armeabi_v7aecho开始构建 arm64-v8a...build_arm64_v8a执行脚本./android.sh九、集成测试获取版本和编解码信息可以看到 ffmpeg-rockchip 项目已经集成了 rockchip 硬编解码库。

更多文章