1.编译要求
Ubuntu 14.04 lts 64位
ffmpeg-3.1.3
fdk-aac-0.1.4
x264-snapshot-20170407-2245
android-ndk-r12b
2.编译步凑
1.先单独编译x264和fdk-aac 的Android 平台的库。
x264单独编译的方法:
http://blog.youkuaiyun.com/xiaibiancheng/article/details/69668485
fdk-aac单独编译的方法:
http://blog.youkuaiyun.com/xiaibiancheng/article/details/69676965
2.下载ffmpeg 源码解压,下载地址:
https://github.com/FFmpeg/FFmpeg/releases/tag/n3.1.3
将上面编译产生的x264和fdk-aac 的库拷贝到解压的ffmpeg 源码目录下面
文件目录如下图所示:
其中fdk-aac的文件里面结构如下:
x264库的结构如下:
3.下载ndk 并解压,下载地址:
https://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip
下载完成后,随便解压到指定的目录。
4.在ffmpeg 的源码目录下面创建config.sh 编译脚本,脚本内容如下:
#!/bin/bash
NDK="/home/wh/android-ndk-r12b"
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
function build_one
{
./configure --prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-debug \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--disable-encoders \
--disable-muxers \
--disable-demuxers \
--disable-parsers \
--disable-bsfs \
--disable-protocols \
--disable-indevs \
--disable-outdevs \
--disable-filters \
--disable-decoders \
--enable-small \
--enable-asm \
--enable-nonfree \
--enable-neon \
--enable-gpl \
--enable-muxer=rawvideo \
--enable-encoder=rawvideo \
--enable-libx264 \
--enable-encoder=libx264 \
--enable-encoder=libfdk_aac \
--enable-decoder=libfdk_aac \
--enable-libfdk-aac \
--enable-demuxer=aac \
--disable-encoder=libfaac \
--enable-protocol=file \
--enable-muxer=mp4 \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--disable-libfaac \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS -mfpu=neon" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm -I/home/wh/FFmpeg-n3.1.3/x264/include/ -I/home/wh/FFmpeg-n3.1.3/fdkacc/include/ -DANDROID"
ADDI_LDFLAGS="-L/home/wh/FFmpeg-n3.1.3/x264/lib/ -L/home/wh/FFmpeg-n3.1.3/fdkacc/lib/"
CPU=armv5te
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG="--disable-armv6 --disable-armv6t2 --disable-vfp --disable-neon"
build_one
#arm v7n
CPU=armv7-a
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=--enable-neon
build_one
注意:其中 --enable-libx264为打开x264 库编译,--enable-encoder=libx264 设在h264 编码库为x264 编码,--enable-encoder=libfdk_aac为打开libfdk-aac 库,--enable-decoder=libfdk_aac和--enable-libfdk-aac设置aac 的编码和解码库为libfdk-aac 编码库,这样就会替换内部的默认aac编码库。
NDK 的路径要设置为你自己解压路径。
其中 ADDI_CFLAGS="-marm -I/home/wh/FFmpeg-n3.1.3/x264/include/ -I/home/wh/FFmpeg-n3.1.3/fdkacc/include/ -DANDROID"
ADDI_LDFLAGS="-L/home/wh/FFmpeg-n3.1.3/x264/lib/ -L/home/wh/FFmpeg-n3.1.3/fdkacc/lib/" 里面的头文件路径和库连接路径也要修改为你的路径。
上面的编译脚本是精简过的去除了其它无用的编解码库,最终编译完后只有,1M左右,
5.编译
进入ffmpeg 的源码目录下面,执行如下命令:
root@ubuntu:/home/wh/FFmpeg-n3.1.3# ./config.sh
执行完这个命令后就会在源码目录下面生成一个android 文件夹,里面就是生成的库。
6.使用方法:
以上面的方式编译的库是静态库,x264和fdk aac 也是静态库,在使用的时候要把x264,和fdkaac 的库考到项目里面进行连接。
下一篇讲解如何使用该库。