ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

这段时间在做视频播放器,需要用到ffmpeg,所以搭建NDK的环境来编译ffmpeg。在网上搜了两天的资料感觉有帮助,也觉得有一些不懂得。这次的文章也仅仅是自己记录一下搭建的步骤。

1.下载ffmpeg在官网下,也可以到我上传的资料里面去下。

2.下载NDK android-ndk-r10e-linux-x86_64.bin 网上下载地址一堆,我就不贴出来了。

3.下载完之后直接运行.bin文件 ./android-ndk-r10e-linux-x86_64.bin 之后就会解压在你当前的目录下。

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

4.配置你的NDk环境,这一步可以在~/.bashrc   也可以直接导出。这次就直接修改bashrc文件,在最后一行添加上自己ndk的解压路径。

export NDK_HOME=/home/AndroidNDK/NDK/android-ndk-r10d
export PATH=$PATH:$NDK_HOME

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

5.source ~/.bashrc 使他生效


6.查看一下是否生效 ndk-build -v   

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

这样就证明是ok了。

7.解压你的ffmpeg在ndk目录下的source目录下 tar -zxvf ffmpeg-3.0.8.tar.gz

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

8.编辑的你的build_ffmpeg.sh 其实就像在linux下安装ffmpeg差不多,这里只是把工具链告诉配置对就好了,然后根据自己的需求去定制你自己的ffmpeg configure。

9.先配置一下configure 让后缀变成安卓平台可用的。

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

10.下面是我的build_ffmpeg.sh

#! /bin/bash

NDK=/home/AndroidNDK/NDK/android-ndk-r10d
NDKPREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
NDKPLATFORM=$NDK/platforms/android-8/arch-arm
export  PREFIX=$(pwd)/android/#####这个东西不配置就在安装/usr/local目录下

后面那个--extra-cflags 那个感觉配置不配置都行,试过了都能编译出so。看ffmpeg的help上说 应该是一个编译所用的库路径
build_one()
{
  ./configure --target-os=linux --prefix=$PREFIX \
--arch=arm \
--cc=$NDKPREBUILT/bin/arm-linux-androideabi-gcc \#####这个是工具链
--cross-prefix=$NDKPREBUILT/bin/arm-linux-androideabi- \
--sysroot=$NDKPLATFORM \ ####平台
--nm=$NDKPREBUILT/bin/arm-linux-androideabi-nm \
--enable-gpl --enable-asm --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=aac --enable-muxer=mp4  --enable-cross-compile --enable-runtime-cpudetect --enable-shared --disable-static --enable-nonfree --enable-version3 --enable-small --enable-pthreads \
--enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug --disable-doc  \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
}

CPU=arm

PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

11.该权限chomd +x build_ffmpeg.sh; ./build_ffmpeg.sh

如果有错误,记得查看当前目录下的config.log 里面会有详细的出错信息。成功会打印一长串的信息,

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

12.配置好之后 就可make -j4 如果没有支持多线程的话 就慢一点了,最后make intsall,就在当前目录下的android/ 生成库和都文件。

ubuntu 14.04 + NDK10d+ffmpeg 3.0编译成so

符号链接的这些库可以删除,直接拿具体的库使用。