###前言linux
咱们进行Android FFmpeg开发的时候,须要一些FFmpeg预编译的库,这些预编译的so库须要在Linux环境下编译。android
###Linux下FFmpeg编译shell
因为笔者公司的电脑是Ubuntu14.04系统,所以咱们直接使用Ubuntu系统进行编译。读者也能够本身搭建Linux虚拟机或者购买云服务器。vim
####关于云服务器的购买bash
####1、准备NDK服务器
编译FFmpeg的时候须要用到NDK。微信
在Linux环境中,咱们须要有一个NDK的压缩包,例如:架构
android-ndk-r10e-linux-x86_64.bin
复制代码
而后执行下面的命令进行解压缩便可(注意权限问题):ide
./android-ndk-r10e-linux-x86_64.bin
复制代码
####2、配置NDK环境变量ui
环境变量配置
vim ~/.bashrc(~表明当前用户)
复制代码
编辑:
export NDKROOT=你的NDK根目录
export PATH=$NDKROOT:$PATH
复制代码
更新(否则的话就须要重启命令行)
source ~/.bashrc
复制代码
####3、准备FFmpeg
咱们须要去FFmpeg官网下载FFmpeg的Linux源码,版本不须要太新:
ffmpeg-2.6.9.zip
复制代码
而后执行解压缩命令:
uzip ffmpeg-2.6.9.zip
复制代码
####4、编写shell脚本
咱们须要编写shell脚本传参调用ffmpeg-2.6.9下的configure脚本,进行编译,咱们写的shell脚本以下,build_android.sh:
#!/bin/bash
make clean
export NDK=/home/wuhuannan/Android/Sdk/ndk-bundle
export SYSROOT=$NDK/platforms/android-14/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export 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-ffserver \
--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_FLAG
make clean
make
make install
复制代码
指定NDK的一些路径,配置CPU架构类型,PREFIX是指定动态库输出的路径,而后disable一些不须要的库(可减少输出的动态库的大小)等等。enable-shared是生成共享库的意思。
注意:
####5、修改configure文件
ffmpeg-2.6.9根目录下有个configure文件,这个文件比较重要。咱们本身写的脚本文件就是依据这个文件来写的。
经过这个文件咱们能够看到FFmpeg库之间的依赖关系,例如:
avcodec_example_deps="avcodec avutil"
复制代码
一些编译指令。
这里咱们须要修改一下输出的动态库的命名规则:
#注释的部分
#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.sh放到ffmpeg-2.6.9根目录下,而后授予权限,执行:
./build_android.sh开始编译
复制代码
编译过程当中会临时先自动生成c.mak文件,头文件等。编译大概几分钟时间。
####7、最终编译输出的动态库文件以下:
这些库咱们就能够直接放到Android Studio工程中使用了。
若是以为个人文字对你有所帮助的话,欢迎关注个人公众号:
个人群欢迎你们进来探讨各类技术与非技术的话题,有兴趣的朋友们加我私人微信huannan88,我拉你进群交(♂)流(♀)。