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 之后就会解压在你当前的目录下。
4.配置你的NDk环境,这一步可以在~/.bashrc 也可以直接导出。这次就直接修改bashrc文件,在最后一行添加上自己ndk的解压路径。
export NDK_HOME=/home/AndroidNDK/NDK/android-ndk-r10d
export PATH=$PATH:$NDK_HOME
5.source ~/.bashrc 使他生效
6.查看一下是否生效 ndk-build -v
这样就证明是ok了。
7.解压你的ffmpeg在ndk目录下的source目录下 tar -zxvf ffmpeg-3.0.8.tar.gz
8.编辑的你的build_ffmpeg.sh 其实就像在linux下安装ffmpeg差不多,这里只是把工具链告诉配置对就好了,然后根据自己的需求去定制你自己的ffmpeg configure。
9.先配置一下configure 让后缀变成安卓平台可用的。
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 里面会有详细的出错信息。成功会打印一长串的信息,
12.配置好之后 就可make -j4 如果没有支持多线程的话 就慢一点了,最后make intsall,就在当前目录下的android/ 生成库和都文件。
符号链接的这些库可以删除,直接拿具体的库使用。