编译环境
- Ubuntu14.04
- Ffmpeg2.5.2
- Anroid-ndk-r9d-Linux-x86_64
编译前的准备
查看ubuntu的版本是32位还是64位 uname -a
android-ndk需要和ubuntu版本位数保持一致
编译步骤
-
下载ndk
https://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2
-
下载ffmpeg
http://ffmpeg.org/releases/ 下载2.5.2版本
-
创建目录
- 在ubuntu中/home下创建NDK文件夹,将下载好的android-ndk-r9d解压到NDK文件夹
- 解压android_ndk_r9d
--- tar -jxvf android-ndk-r9d-linux-x86_64.tar.bz2 - 解压ffmpeg2.5.2
--- tar -jxvf ffmpeg-2.5.2.tar.bz2 - 将解压后的ffmpeg2.5.2复制到android-ndk-r9d/sources/文件夹下
---cp -a ffmpeg-2.5.2 android-ndk-r9d/sources/
-
编写build_android.sh
在ffmpeg-2.5.2文件夹中创建build_android.sh文件
---vim build_android.sh
#!/bin/sh NDK=$HOME/NDK/android-ndk-r9d SYSROOT=$NDK/platforms/android-9/arch-arm TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64 function build_one { ./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-avdevice \ --disable-doc \ --disable-symver \ --disable-everything \ --enable-decoder=h264 \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=linux \ --arch=arm \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make clean make make install } CPU=arm PREFIX=$(pwd)/android/$CPU ADDI_CFLAGS="-marm" build_one
-
修改configure文件
针对android需要将configure中的如下四行(2746-2749,不同的ffmpeg的版本行数可能会有差异)
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)'
注意:如果不修改这四行的内容直接编译,编译出来的so文件类似libavcodec.so.55.39.101,Android上无法加载
-
编译脚本./build_android.sh
-
如果build_android.sh没有可执行权限,请使用如下命令
chmod +x build_android.sh
如果使用./build_android.sh报如下错误
-bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory
这是由于在window编辑build_android.sh的编码格式引起的。
可通过如下操作解决:
- .查看该文件:vim build_android.sh
- 查看该错误文件的格式(一般报错的文件格式是DOS):
:set ff
- 修改该文件格式为UNIX:
:set ff=unix
- 再保存
:wq!
-
-
生成头文件和库文件
成功编译完成后会在NDK/android-ndk-r9d/sources/ffmpeg-2.5.2/android/文件夹中生成一个arm文件夹,这个文件夹就是我们所需要的头文件和动态库,到此就大功告成啦。
编译所需要的所有文件及编译出来的动态库下载