android ffmpeg 动态库编译

  • 环境搭建
  • 代码下载
  • 配置编译
  • 动态库输出

环境搭建

  1. 配置一个乌班图的Linux虚拟机或者服务器
  2. 安装好yasm
    下载压缩包,配置,编译,安装
  3. 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

发布了101 篇原创文章 · 获赞 19 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/kehyuanyu/article/details/75568947