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 \

修改后重新进行编译生成静态库结果如下:

更多相关文章

  1. 用java的jdk 生成android 的jni接口文档
  2. android 运行时生成dex文件,并装载调用
  3. 测试为Android模拟器创建和管理sdcard image文件
  4. Android通过LIstView显示文件列表的两种方法介绍
  5. eclipse查看android源码包(eclipse导入android源码包)
  6. [置顶] Android系统移植与调试之------->build.prop生成过程分析
  7. 熟悉Android---canvas第一笔
  8. ProGuard详解
  9. Android中Tab的使用

随机推荐

  1. MySQL EXPLAIN语句的使用示例
  2. mysql 行列转换的示例代码
  3. 详解MySQL 数据库隔离级别与MVCC
  4. 解决mysql删除用户 bug的问题
  5. 详解分析MySQL8.0的内存消耗
  6. MySQL数据备份方法的选择与思考
  7. MySQL 分表分库怎么进行数据切分
  8. MySQL使用B+Tree当索引的优势有哪些
  9. Mysql主从复制与读写分离图文详解
  10. mysql中的7种日志小结