记录编译ffmpeg生成so库的流程方法
====================================================================================
====================================================================================
1、资源配置
ubuntu中新建ffmpeg目录
mkdir ffmpeg
2、下载对应ndk和ffmpeg版本到Ubuntu上,并解压到ffmpeg当前目录
如:android-ndk-r15c-linux-x86_64.zip 和 ffmpeg-3.2.1.tar.gz
cd ffmpeg //进入到文件夹wget +linux版本的下载链接地址 //下载ndk: wget https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip?hl=zh_cnunzip + 压缩文件 //解压 : android-ndk-r15c-linux-x86_64.zipwget http://ffmpeg.org/releases/ffmpeg-3.2.1.tar.gz //下载ffmpegtar -xzf ffmpeg-3.2.1.tar.gz //解压或者:tar -zxvf ffmpeg-3.2.1.tar.gz //解压ffmpeg
最终显示如下:
![](https://i-blog.csdnimg.cn/blog_migrate/2ae355ceadcf54891b3981158176c5ad.png)
*3.配置ndk
ubuntu@ubuntu-virtual-machine:~/ffmpeg/android-ndk-r15c$ pwd
/home/ubuntu/ffmpeg/android-ndk-r15c //pwd 查看当前全路径名
gedit ~/.bashrc //进入环境变量配置 geditexport NDK=/home/ubuntu/ffmpeg/android-ndk-r15c //配置你的安装路径export PATH=${PATH}:$NDK //配置路径:wq!//保存退出source ~/.bashrc //执行环境变量ndk-build //查看是否安装成功,只要不是显示ndk-build not found,则表示安装成功
4.修改配置文件
修改ffmpeg-3.2.1文件夹中的configue文件,
如果你不修改的话,编译出来过后的.so文件后面会有一串数字,无法使用,所以得修改他的命名规则。
将大约line 3247行的如下相关配置
修改之前
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)'
5.修改configure文件并在configure 同级目录下 新建android_build.sh文件,编辑android_build.sh
gedit android_build.sh
#!/bin/bash# 清空上次的编译make clean#你自己的NDK路径。export NDK=/home/ubuntu/ffmpeg/android-ndk-r15c# 设置你的android平台编译器的版本 这里采用Android4.0export SYSROOT=$NDK/platforms/android-14/arch-arm/#编译使用的toolchainexport TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64export CPU=arm# 这个是输出的路径export PREFIX=$(pwd)/android/$CPUexport ADDI_CFLAGS="-marm"./configure --target-os=linux \--prefix=$PREFIX --arch=arm \--disable-doc \--enable-shared \--disable-static \--disable-yasm \--disable-symver \--enable-gpl \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-doc \--disable-symver \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $ADDI_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGmake cleanmakemake install
其中NDK是你自己刚刚配置的ndk路径,SYSROOT为platforms中的路径,TOOLCHAIN为toolchains里面中的路径,依次配置好过后保存并退出。
执行ffmpeg文件夹下的android_build.sh文件,进行编译。
6.编译.sh文件
./android_build.sh
如果提示bash: ./android_build.sh: 权限不够,修改权限即可:
chmod -R 755 android_build.sh
至于755,这个数字怎么来的参考下图:
![](https://i-blog.csdnimg.cn/blog_migrate/1b36bfeeddc34031b80343494150fd06.png)
make命令找不到:apt-get安装make
命令:sudo apt-get install make
当编译成功过后会在文件夹中出现android文件夹,
在lib文件夹中就有你需要的.so文件了
编译成功后在~/ffmpeg/ffmpeg-3.2.1/android/arm/lib文件夹下有编译输出的.so文件。
![](https://i-blog.csdnimg.cn/blog_migrate/c63f4159f84c59034965bdb3cad66b4e.png)
注:从虚拟机拷贝文件到windows报错误: 您已尝试将一个或多个符号链接复制到不支持符号链接的主机操作系统。
复制的是文件夹。将文件夹压缩到当前目录,然后复制压缩文件即可
![](https://i-blog.csdnimg.cn/blog_migrate/8909b2e62f240bbed5b9c1108dd1f33d.png)
需要使用到相关so库进行开发研究,可点击下载 ffmpeg-3.2(arm).zip