登录建设银行网站打不开,敬请期待前一句,wordpress 点击加微信,重庆建筑模板生产厂家NDK交叉编译FFmpeg安卓编译ffmpeg 文章目录 NDK交叉编译FFmpeg安卓编译ffmpeg编译环境编译工具下载 编译过程编译环境系统环境NDK版本的选择 源码下载只编译简单的ffmpeg编译编译脚本问题 使用技术支持 编译环境
编译工具下载
参考这个#xff1a;https://blog.csdn.net/gao…NDK交叉编译FFmpeg安卓编译ffmpeg 文章目录 NDK交叉编译FFmpeg安卓编译ffmpeg编译环境编译工具下载 编译过程编译环境系统环境NDK版本的选择 源码下载只编译简单的ffmpeg编译编译脚本问题 使用技术支持 编译环境
编译工具下载
参考这个https://blog.csdn.net/gaoliang0/article/details/81913291
或者官网 NDK编译工具下载 https://developer.android.google.cn/ndk/downloads?hlzh-cn
官网老版本 https://github.com/android/ndk/wiki/Unsupported-Downloads
或者从我的百度网盘:
链接https://pan.baidu.com/s/1FEtM6mVNgER_DvC2myHB5Q?pwd28l9 提取码28l9 –来自百度网盘超级会员V6的分享
准备下载 android-ndk-r19c-linux-x86_64.zip 因为这个版本比较适中
编译过程
编译环境
系统环境
系统环境
iyfangfengiyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ uname -a
Linux iyfangfeng 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/LinuxNDK版本
/home/iyfangfeng/libsrc/tools/android-ndk-r19c以下只编译armeabi-v7a版本如果需要编译其他版本 可以参考 build_fdkaac_all.sh 方式
NDK版本的选择
当前Google给的NDK工具支持GCC最高版本android-ndk-r17c-linux-x86_64.zip之后的版本不再支持gcc,只支持clang来编译而使用gcc或者clang编译在编译脚本上存在差别所以需要注意着点。
选择哪个版本取决于使用的编译脚本。
下面的ffmpeg因为涉及到很多第三方库所以会存在同时使用r17c以上的版本或者r17c下的版本 使用gcc编译。
注意
如果遇到一些奇怪的问题可以换一换NDK版本时候有时候就解决了或者更多的使用自己经常使用的版本比如我用的多是android-ndk-r10e环境来适应gcc编译环境问题少很多。 本地NDK编译器目录参考 iyfangfengiyfangfeng:~/libsrc/tools$ ls
android-ndk-r10e android-ndk-r10e-linux-x86_64.zip android-ndk-r16b android-ndk-r16b-linux-x86_64.zip android-ndk-r19c android-ndk-r19c-linux-x86_64.zip
iyfangfengiyfangfeng:~/libsrc/tools$
源码下载
ffmpeg-3.3.8.tar.gz ffmpeg 下载 https://gitee.com/mirrors/ffmpeg/tags?page4 http://ffmpeg.org/download.html#releases
只编译简单的ffmpeg
编译
iyfangfengiyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ ./build_ffmpeg.sh armeabi-v7a
iyfangfengiyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ ls libs/lib-ffmpeg/armeabi-v7a/lib/
libavcodec.so libavdevice.so libavfilter.so libavformat.so libavutil.so libpostproc.so libswresample.so libswscale.so pkgconfig
./build_ffmpeg.sh 使用的是gcc 编译脚本
编译脚本 最简单的目录结构 iyfangfengiyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ ls
build_ffmpeg.sh config.sh libs ffmpeg-3.3.8build_ffmpeg.sh
iyfangfengiyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ cat build_ffmpeg.sh
#!/bin/bashARCH$1source config.sh $ARCH
LIBS_DIR$(cd dirname $0; pwd)/libs/lib-ffmpeg
echo LIBS_DIR$LIBS_DIRcd ffmpeg-3.3.8PLATFORM$ANDROID_NDK_ROOT/platforms/$AOSP_API/$AOSP_ARCH
TOOLCHAIN$ANDROID_NDK_ROOT/toolchains/$TOOLCHAIN_BASE-$AOSP_TOOLCHAIN_SUFFIX/prebuilt/linux-x86_64PREFIX$LIBS_DIR/$AOSP_ABIecho
echo $PREFIX./configure \
--prefix$PREFIX \
--enable-cross-compile \
--disable-runtime-cpudetect \
--disable-asm \
--archarm \
--target-osandroid \
--cc$TOOLCHAIN/bin/$TOOLNAME_BASE-gcc \
--cross-prefix$TOOLCHAIN/bin/$TOOLNAME_BASE- \
--disable-stripping \
--nm$TOOLCHAIN/bin/$TOOLNAME_BASE-nm \
--sysroot$PLATFORM \
--enable-gpl \
--enable-shared \
--disable-static \
--enable-small \
--enable-postproc \
--enable-avdevice \
--disable-outdevs \
--disable-ffprobe \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffserver \
--disable-debug \
--disable-ffprobe \
--disable-ffplay \
--disable-ffmpeg \
--disable-symver \
--disable-stripping \
--extra-cflags$FF_EXTRA_CFLAGS $FF_CFLAGS \
--extra-ldflags make clean
make -j8
make installcd .. config.sh iyfangfengiyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ cat config.sh#NDK路径
#clang ffmpeg
#export ANDROID_NDK_ROOT/home/yanglong/iyangfeng/tools/android-ndk-r19c
#上面是之前电脑编译路径
#export ANDROID_NDK_ROOT/home/iyfangfeng/libsrc/tools/android-ndk-r19c
#clang#CXX gcc r17c 及其以下
#fdkaac x264
export ANDROID_NDK_ROOT/home/iyfangfeng/libsrc/tools/android-ndk-r10eexport AOSP_TOOLCHAIN_SUFFIX4.9export AOSP_APIandroid-21#架构
if [ $# -lt 1 ]; thenTHE_ARCHarmv7
elseTHE_ARCH$(tr [A-Z] [a-z] $1)
fi#根据不同架构配置环境变量
case $THE_ARCH inarm|armv5|armv6|armv7|armeabi)TOOLCHAIN_BASEarm-linux-androideabiTOOLNAME_BASEarm-linux-androideabiAOSP_ABIarmeabiAOSP_ARCHarch-armHOSTarm-linux-androideabiAOSP_FLAGS-marcharmv5te -mtunexscale -mthumb -msoft-float -funwind-tables -fexceptions -frttiFF_EXTRA_CFLAGS-O3 -fpic -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit300 -mfloat-abisoftfp -mfpuvfp -marm -marcharmv6 FF_CFLAGS-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werrorstrict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID ;;armv7a|armeabi-v7a)TOOLCHAIN_BASEarm-linux-androideabiTOOLNAME_BASEarm-linux-androideabiAOSP_ABIarmeabi-v7aAOSP_ARCHarch-armHOSTarm-linux-androideabiAOSP_FLAGS-marcharmv7-a -mthumb -mfpuvfpv3-d16 -mfloat-abisoftfp -Wl,--fix-cortex-a8 -funwind-tables -fexceptions -frtti FF_EXTRA_CFLAGS-DANDROID -fPIE -pipe -fPIC -ffunction-sections -funwind-tables -fstack-protector -marcharmv7-a -mfloat-abisoftfp -mfpuvfpv3-d16 -fomit-frame-pointer -fstrict-aliasingFF_CFLAGS-O3 -Wall -fPIE -pipe -ffast-math -fstrict-aliasing -Werrorstrict-aliasing -Wa,--noexecstack -DANDROID ;;hard|armv7a-hard|armeabi-v7a-hard)TOOLCHAIN_BASEarm-linux-androideabiTOOLNAME_BASEarm-linux-androideabiAOSP_ABIarmeabi-v7aAOSP_ARCHarch-armHOSTarm-linux-androideabiAOSP_FLAGS-mhard-float -D_NDK_MATH_NO_SOFTFP1 -marcharmv7-a -mfpuvfpv3-d16 -mfloat-abisoftfp -Wl,--fix-cortex-a8 -funwind-tables -fexceptions -frtti -Wl,--no-warn-mismatch -Wl,-lm_hardFF_EXTRA_CFLAGS-DANDROID -fPIC -ffunction-sections -funwind-tables -fstack-protector -marcharmv7-a -mfloat-abisoftfp -mfpuvfpv3-d16 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit300 FF_CFLAGS-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werrorstrict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID ;;neon|armv7a-neon)TOOLCHAIN_BASEarm-linux-androideabiTOOLNAME_BASEarm-linux-androideabiAOSP_ABIarmeabi-v7aAOSP_ARCHarch-armHOSTarm-linux-androideabiAOSP_FLAGS-marcharmv7-a -mfpuvfpv3-d16 -mfloat-abisoftfp -Wl,--fix-cortex-a8 -funwind-tables -fexceptions -frttiFF_EXTRA_CFLAGS-DANDROID -fPIC -ffunction-sections -funwind-tables -fstack-protector -marcharmv7-a -mfloat-abisoftfp -mfpuvfpv3-d16 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit300 FF_CFLAGS-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werrorstrict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID ;;armv8|armv8a|aarch64|arm64|arm64-v8a)TOOLCHAIN_BASEaarch64-linux-androidTOOLNAME_BASEaarch64-linux-androidAOSP_ABIarm64-v8aAOSP_ARCHarch-arm64HOSTaarch64-linuxAOSP_FLAGS-funwind-tables -fexceptions -frttiFF_EXTRA_CFLAGSFF_CFLAGS-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werrorstrict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID ;;mips|mipsel)TOOLCHAIN_BASEmipsel-linux-androidTOOLNAME_BASEmipsel-linux-androidAOSP_ABImipsAOSP_ARCHarch-mipsHOSTmipsel-linuxAOSP_FLAGS-funwind-tables -fexceptions -frtti;;mips64|mipsel64|mips64el)TOOLCHAIN_BASEmips64el-linux-androidTOOLNAME_BASEmips64el-linux-androidAOSP_ABImips64AOSP_ARCHarch-mips64HOSTmipsel64-linuxAOSP_FLAGS-funwind-tables -fexceptions -frtti;;x86)TOOLCHAIN_BASEx86TOOLNAME_BASEi686-linux-androidAOSP_ABIx86AOSP_ARCHarch-x86HOSTi686-linuxAOSP_FLAGS-marchi686 -mtuneintel -mssse3 -mfpmathsse -funwind-tables -fexceptions -frttiFF_EXTRA_CFLAGS-O3 -DANDROID -Dipv6mr_interfaceipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -fomit-frame-pointer -marchk8 FF_CFLAGS-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werrorstrict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID ;;x86_64|x64)TOOLCHAIN_BASEx86_64TOOLNAME_BASEx86_64-linux-androidAOSP_ABIx86_64AOSP_ARCHarch-x86_64HOSTx86_64-linuxAOSP_FLAGS-marchx86-64 -msse4.2 -mpopcnt -mtuneintel -funwind-tables -fexceptions -frttiFF_EXTRA_CFLAGS-O3 -DANDROID -Dipv6mr_interfaceipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -fomit-frame-pointer -marchk8 FF_CFLAGS-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werrorstrict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID ;;*)echo ERROR: Unknown architecture $1[ $0 $BASH_SOURCE ] exit 1 || return 1;;
esacecho TOOLCHAIN_BASE$TOOLCHAIN_BASE
echo TOOLNAME_BASE$TOOLNAME_BASE
echo AOSP_ABI$AOSP_ABI
echo AOSP_ARCH$AOSP_ARCH
echo AOSP_FLAGS$AOSP_FLAGS
echo HOST$HOST
问题
C compiler cannot create executables
checking whether the C compiler works... no
configure: error: in /home/iyfangfeng/libsrc/ffmpeg/basic/clangffmpeg0511/fdk-aac-0.1.6:
configure: error: C compiler cannot create executables
See config.log for more details解决
之前使用的是clang ndk-r19c的编译环境建议换成r10e或者r14 不能使用r16b 有问题 fatal error: stdio.h: No such file or directory libSYS/src/cmdl_parser.cpp:96:19: fatal error: stdio.h: No such file or directory#include stdio.h^
compilation terminated.
Makefile:1270: recipe for target libSYS/src/cmdl_parser.lo failed
make: *** [libSYS/src/cmdl_parser.lo] Error 1
make: *** 正在等待未完成的任务....
libSYS/src/genericStds.cpp:95:18: fatal error: math.h: No such file or directory 百度后说改用ndk-r14b因为r16b目录结构改了。 这有可能我换的是 r10e 这个之前用的最多 https://www.jianshu.com/p/38894c45daf0 确实编译过了 遇到类似问题可以换版本试试 android-ndk-r10e 编译器路径一直都还是之前项目的 重新创建一个目录再下载一个版本 oK Unknown option “–enalbe-demuxerflv”.
Unknown option --enalbe-demuxerflv.
See ./configure --help for available options.除了报错这个外海包含其他的错误可能是这个版本不支持flv 解复用可以编译选项中删除掉
使用
可以在Android Studio 上面演示暂时没有完全独立的demo用得人多再补吧先编译
技术支持
按照如上提供的步骤如果还存在问题可以找我获取可以使用的so库、源码、脚本、带环境及源码的虚拟机。应该有地方可以获取名片。promptpe