基于ndk-r21b编译ffmpeg-4.3.1
16lz
2021-01-26
1、ffmpeg下载地址:http://ffmpeg.org/download.html,打开下载地址选择需要的平台和版本号进行下载,下载可以先下载下来,然后在上传到linux上,也可以使用以下命令,在linux上直接下载:
wget http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.bz2
2、解压下载好的ffmpeg,解压命令如下:
tar xvf ffmpeg-4.3.1.tar.bz2
3、解压后会生成一个解压目录ffmpeg-4.3.1,在这个目录下创建android/armeabi-v7a文件夹用来存放编译生成的ffmpeg静态库或者动态库
4、下载并解压ndk(r21b),下载和解压命令:
wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zipunzip android-ndk-r21b-linux-x86_64.zip
5、修改so文件的命名规则:
#将ffmpeg-4.3.1目录中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)'#替换为:SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS='$(SLIBNAME)'
6、创建一个build_android_r21b.sh文件,在文件中添加一下脚本:
#!/bin/bashPREFIX=/usr/hui/ndk/ffmpeg-4.3.1/android/armeabi-v7aTOOLCHAIN=/usr/hui/ndk/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64build(){./configure \--prefix=$PREFIX \--disable-static \--enable-shared \--enable-small \--enable-gpl \--disable-doc \--disable-programs \--disable-avdevice \--enable-cross-compile \--target-os=android \--arch=armeabi-v7a \--cc=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-make cleanmake -j4make install}build
7、为build_android_r21b.sh文件设置可执行权限:
chmod +x build_android_r21b.sh
8、执行build_android_r21b.sh进行交叉编译:
./build_android_r21b.sh
9、执行完成后可以去文件生成目录(/usr/hui/ndk/ffmpeg-4.3.1/android/armeabi-v7a)查看编译生成的文件:
10、在第9步中查看到生成的文件是动态库so格式的,如果要想编译成静态库,只需要修改第6步中的两个配置参数:
--disable-static \--enable-shared \修改为--enable-static \--disable-shared \
修改后重新进行编译生成静态库结果如下:
更多相关文章
- 用java的jdk 生成android 的jni接口文档
- android 运行时生成dex文件,并装载调用
- 测试为Android模拟器创建和管理sdcard image文件
- Android通过LIstView显示文件列表的两种方法介绍
- eclipse查看android源码包(eclipse导入android源码包)
- [置顶] Android系统移植与调试之------->build.prop生成过程分析
- 熟悉Android---canvas第一笔
- ProGuard详解
- Android中Tab的使用