Android移植带有libx264实现的ffmpeg

一、环境准备
1、Ubuntu系统(我使用VirtualBox搭建的虚拟机)。
2、最新的ffmpeg源码
3、最新的libx264的源码

二、开始搞事情
1、下载最新的ffmpeg、x264源码
大家可以器ffmepg、x264的官网去下载然后解压到本地、也可以使用git直接clone
ffmpg: http://ffmpeg.org/download.html
x264: http://www.videolan.org/developers/x264.html
(这里大家注意下一下载到本地的存放路径,因为我们下面要编写脚本去执行编译工作,要进入源码的文件夹中执行configure,有目录切换,比较头疼)

2、编写脚本

  • 编写编译x264的脚本:
cd  ./libx264

export NDK=~/developer/Sdk/ndk-bundle
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export PLATFORM=$NDK/platforms/android-9/arch-arm
export PREFIX=../lib

./configure \
  --prefix=$PREFIX \   --enable-static \   --enable-shared \   --enable-pic \   --disable-asm \   --disable-cli \   --host=arm-linux \   --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \   --sysroot=$PLATFORM 
make -j8
make install

cd ..

其中声明的 PREFIX (export PREFIX=../lib) 就是将来编译成功之后存放库的位置,大家也可以自己定义。
大家可先执行以下,如果没有问题的话:会在 当前文件夹下生成一个 lib目录,里面会包含头文件和 库,目录结构如下
lib
├── include
│ ├── x264_config.h
│ └── x264.h
└── lib
├── libx264.a
├── libx264.so -> libx264.so.148
├── libx264.so.148
└── pkgconfig
└── x264.pc

  • 编写编译ffmpeg的脚本
#路径根据自己的实际情况进行修改
cd ../x264
#路径根据自己的实际情况进行修改
./android_build_x264.sh

echo '######################################################### 
       X264 compile finshed
######################################################## '
#路径根据自己的实际情况进行修改
export NDK=~/developer/Sdk/ndk-bundle
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export PLATFORM=$NDK/platforms/android-9/arch-arm
export SYSROOT=$TOOLCHAIN/sysroot/
export PREFIX=../libffwith264 #编译结果的目录 最终生成的编译结果
cd ../ffmpeg
cd ./ffmpeg_latest
#路径根据自己的实际情况进行修改
# 加入x264编译库
EXTRA_CFLAGS="-I../../x264/lib/include"
EXTRA_LDFLAGS="-L../../x264/lib/lib"


./configure \
    --target-os=linux \     --prefix=$PREFIX \     --enable-cross-compile \     --enable-runtime-cpudetect \     --disable-asm \     --disable-doc \     --arch=arm \     --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \     --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \     --disable-stripping \     --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \     --sysroot=$PLATFORM \     --enable-gpl \     --enable-static \     --disable-shared \     --enable-version3 \     --enable-small \     --disable-vda \     --disable-iconv \     --disable-encoders \     --enable-libx264 \     --enable-encoder=libx264 \     --enable-muxers \     --enable-zlib \     --disable-outdevs \     --disable-ffprobe \     --disable-ffplay \     --disable-ffmpeg \     --disable-ffserver \     --disable-debug \     --extra-cflags=$EXTRA_CFLAGS \     --extra-ldflags=$EXTRA_LDFLAGS 

make clean
make -j8
make install


$TOOLCHAIN/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so \
#路径根据自己的实际情况进行修改
 /home/blueberry/developer/osl/x264/lib/lib/libx264.a \
    libavcodec/libavcodec.a \
    libavfilter/libavfilter.a \
    libswresample/libswresample.a \
    libavformat/libavformat.a \
    libavutil/libavutil.a \
    libswscale/libswscale.a \
    libpostproc/libpostproc.a \
    libavdevice/libavdevice.a \
    -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker         #路径根据自己的实际情况进行修改
        $TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a

这段脚本的大体流程是这样的:
1.先执行编译x264的脚本得到x264的静态库
2.进入的ffmepg文件夹下,使用configure进行配置,生成ffmpeg的静态库
3.使用ndk工具 将ffmpeg生成的静态库和x264的静态库 连接成一个动态库

需要注意的是,这个脚本中所引用的ndk各个工具的路径,都需要我们根据自己的情况进行修改负责会在编译的时候出现 * * * * *找不到 异常 ,还有也需要注意引用x264执行脚本的路径
我为了引起大家的注意,我在脚本需要注意路径的位置都加了这么一句话“ #路径根据自己的实际情况进行修改” 大家用的时候删除这句即可

我向大家展示一下我的目录已做参考


├── ffmpeg
│   ├── android_ffmpeg_build_with_x264.sh   //编译ffmpeg的脚本
│   ├── ffmpeg_latest    // ffmpeg源码的存放路径
...
│   │   ├── configure
│   │   ├── Makefile
│   │   └── version.sh
│   ├── libffwith264    //最后成功之后的路径
│   │   ├── include     //成功之后生成的头文件
│   │   ├── lib
│   │   └── libffmpeg.so // 成功之后生成的动态库
├── x264
│   ├── android_build_x264.sh //编译x264的脚本
│   ├── lib    //  编译x264成功之后的头文件+库
│   │   ├── include
│   │   └── lib
│   └── libx264    //libx264 源码存放位置
│       ├── Makefile
│       ├── version.sh
...
│       └── x264res.rc
└── yasm
    ├── build.sh
    └── yasm-1.3.0
        └── ytasm

最后大家将 libffwith264 目录下的 libffmpeg.so 和 include文件拷出来就可以用了。
哦对了,如果在编译过程中出现提示要安装 yasm,记得安装。可以下载yasm源码编译安装,也可是直接使用命令 安装。

sudo apt install yasm

总之编译这东西总有些意想不到的差错,而且编译一次还挺费时。总之出错之后,大家要淡定根据自己的环境对脚本进行修改。

最后:如果想偷懒可以下载我编译好的 http://download.csdn.net/detail/a992036795/9725402

参考:http://blog.csdn.net/byhook/article/details/51971652
http://blog.csdn.net/leixiaohua1020/article/details/47008825

你可能感兴趣的:(android,ffmpeg)