- 环境搭建
- 代码下载
- 配置编译
- 动态库输出
环境搭建
- 配置一个乌班图的Linux虚拟机或者服务器
- 安装好yasm
下载压缩包,配置,编译,安装 - NDK准备和安装
下载链接:
http://developer.android.com/tools/sdk/ndk/index.html
也可参考:http://blog.csdn.net/elesos/article/details/52913259
也可以从网盘中下载:http://pan.baidu.com/s/1i5EEb3Z
下载完成后:
tar -xzvf android-ndk-r14b-linux-x86_64.zip
cd android-ndk-r14b
pwd
/home/xxxxxx/ndk/android-ndk-r14b
代码下载
这里我们从github上引用yixia的项目作为我们编译使用的code,链接如下:
https://github.com/yixia/FFmpeg-Android.git
配置编译
下载完成后,进入工程目录
#cd FFmpeg-Android
# ls
drwxr-xr-x 3 huanyu.ke szsoftware 19 Jul 20 13:13 build
-rw-r–r– 1 huanyu.ke szsoftware 7651 Jul 14 20:15 COPYING.LGPLv3
drwxr-xr-x 18 huanyu.ke szsoftware 4096 Jul 20 11:43 ffmpeg
-rwxr-xr-x 1 huanyu.ke szsoftware 3481 Jul 20 2017 FFmpeg-Android.sh
-rw-r–r– 1 huanyu.ke szsoftware 40 Jul 20 13:13 ffmpeg-version
-rw-r–r– 1 huanyu.ke szsoftware 22840 Jul 14 20:15 FFmpeg-VPlayer.patch
drwxr-xr-x 8 huanyu.ke szsoftware 4096 Jul 20 16:42 .git
-rw-r–r– 1 huanyu.ke szsoftware 0 Jul 14 20:15 .gitignore
-rw-r–r– 1 huanyu.ke szsoftware 2267 Jul 14 20:15 LICENSE
-rw-r–r– 1 huanyu.ke szsoftware 20624 Jul 14 20:15 MAINTAINERS
-rw-r–r– 1 huanyu.ke szsoftware 282 Jul 14 20:16 README.md
给编译脚本FFmpeg-Android.sh 打上patch
#patch -p1 < android-ffmpeg-complise.patch
主要是设置NDK路径,工具链路径。注意SYSROOT,NDK 指定的路径platform要一致,还要添加ccache路径,以及一些警告当错误的flag去掉。
android-ffmpeg-complise.patch的内容如下:
diff --git a/FFmpeg-Android.sh b/FFmpeg-Android.sh
index 8aa15c3..a436431 100755
--- a/FFmpeg-Android.sh
+++ b/FFmpeg-Android.sh
@@ -18,26 +18,33 @@ patch -p1 <../FFmpeg-VPlayer.patch
git log --pretty=format:%H -1 > ../ffmpeg-version
+CCACHE=/home/xxxx.xx/usr/local/bin
+ANDROID_NDK=/home/xxxx.xx/ndk/android-ndk-r14b
+
+#notice: The Access permissions for directories
TOOLCHAIN=/tmp/vplayer
-SYSROOT=$TOOLCHAIN/sysroot/
-$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=$TOOLCHAIN
+SYSROOT=$ANDROID_NDK/platforms/android-23/arch-arm
+$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --platform=android-23 --install-dir=$TOOLCHAIN
-export PATH=$TOOLCHAIN/bin:$PATH
+export PATH=$TOOLCHAIN/bin:$PATH:$CCACHE
export CC="ccache arm-linux-androideabi-gcc"
export LD=arm-linux-androideabi-ld
export AR=arm-linux-androideabi-ar
CFLAGS="-O3 -Wall -mthumb -pipe -fpic -fasm \
-finline-limit=300 -ffast-math \
- -fstrict-aliasing -Werror=strict-aliasing \
+ -fstrict-aliasing \
-fmodulo-sched -fmodulo-sched-allow-regmoves \
-Wno-psabi -Wa,--noexecstack \
-D__ARM_ARCH_5__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ \
-DANDROID -DNDEBUG"
+
+# config the flags of the ffmpeg
FFMPEG_FLAGS="--target-os=linux \
--arch=arm \
--enable-cross-compile \
+ --sysroot=$SYSROOT \
--cross-prefix=arm-linux-androideabi- \
--enable-shared \
--disable-symver \
@@ -102,14 +109,21 @@ for version in neon armv7 vfp armv6; do
cp config.* $PREFIX
[ $PIPESTATUS == 0 ] || exit 1
+ ## clean the old file
make clean
- make -j4 || exit 1
+ ## start to compile
+ make -j16 || exit 1
+ ## start to install the ffmpeg library and the header file
make install || exit 1
rm libavcodec/inverse.o
+
+ ## start to package the dynamic library libffmpeg.so
$CC -lm -lz -shared --sysroot=$SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $EXTRA_LDFLAGS libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libavfo
+ ## output the dynamic library libffmpeg.so
cp $PREFIX/libffmpeg.so $PREFIX/libffmpeg-debug.so
+ ## compress the libffmpeg.so
arm-linux-androideabi-strip --strip-unneeded $PREFIX/libffmpeg.so
done
配置完成后就开始编译。
# ./FFmpeg-Android.sh
动态库输出
编译完成之后,build目录下会生成四个平台的动态库libffmpeg.so
#find . -iname “libffmpeg.so”
./build/ffmpeg/neon/libffmpeg.so
./build/ffmpeg/armv7/libffmpeg.so
./build/ffmpeg/vfp/libffmpeg.so
./build/ffmpeg/armv6/libffmpeg.so
生成的动态库就可以提供给JNI 封装,最后提供给APP使用。
更多使用方法可以参考:http://blog.csdn.net/leixiaohua1020/article/details/47008825