Android(安卓)NDK在Ubuntu 18.10上编译FFmpeg 4.1
16lz
2021-01-24
参考这两篇博文来编译x86和armeabi-v7a的so文件,重新了解ffmpeg的编译过程。
先修改configure文件
#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'# For androidSLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS='$(SLIBNAME)
初始脚本编写参考
https://blog.csdn.net/bobcat_kay/article/details/80889398
其他CPU平台的编译脚本编写
https://blog.csdn.net/yuxiatongzhi/article/details/80096802
我在学习Android视频编码和直播推流的课程,下载了博主提供的demo,但是提示我r17不支持armeabi的平台,已经删了对这个平台的支持。于是想自己编译,结果一直到凌晨两点也没解决。
最后,只能使用博文指出的方法,用和博文相对应的版本来编译,所以我的版本就是:
FFmpeg 4.0.3和Android NDK r14b,不过我想NDK再高几个版本也是可以的。
脚本:
#!/bin/bashNDK=/home/luxuan/android-ndk-r14bfunction build_android{echo "Compiling FFmpeg for $CPU"./configure \ --prefix=$PREFIX \ --enable-neon \ --enable-hwaccels \ --enable-gpl \ --enable-postproc \ --enable-shared \ --enable-jni \ --enable-mediacodec \ --enable-decoder=h264_mediacodec \ --disable-static \ --disable-doc \ --enable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --enable-avdevice \ --disable-doc \ --disable-symver \ --cross-prefix=$CROSS_PREFIX \ --target-os=android \ --arch=$ARCH \ --cpu=$CPU \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAGmake cleanmakemake installecho "The Compilation of FFmpeg for $CPU is completed"}#armv8-aARCH=arm64CPU=armv8-aTOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64SYSROOT=$NDK/platforms/android-21/arch-$ARCH/CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-PREFIX=$(pwd)/android/$CPUOPTIMIZE_CFLAGS="-march=$CPU"build_android#armv7-aARCH=armCPU=armv7-aTOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64SYSROOT=$NDK/platforms/android-21/arch-$ARCH/CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-PREFIX=$(pwd)/android/$CPUOPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "build_android#x86ARCH=x86CPU=x86TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64SYSROOT=$NDK/platforms/android-21/arch-$ARCH/CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android-PREFIX=$(pwd)/android/$CPUOPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"build_android#x86_64ARCH=x86_64CPU=x86-64TOOLCHAIN=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64SYSROOT=$NDK/platforms/android-21/arch-$ARCH/CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-PREFIX=$(pwd)/android/$CPUOPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"build_android
更新一下:
现在将FFmpeg 4.1编译成功了。Android NDK改用r15c,编译时udp.c会报错,百度了很久都没找到解决方案,对比了以前的ffmpeg的代码,只好将这些出错的代码块直接删除。顺利通过编译。
更多相关文章
- minSdkVersion,targetSdkVersion, android:maxSdkVersion
- android4.4 安装微信7.0.6版本底部显示黑色的问题
- Ubuntu16.04编译ffmpeg
- 包管理系统分析
- ubuntu 9.04下ndk安装问题
- Android(安卓)8.0 Volte开关流程 HD图标显示
- repo 切换分支一种简单的方法
- React Native开发error calling appregistry.runapplication的解
- Android(安卓)利用viewpager 来实现Frament 有导航条