对于编译环境我们有两种方案可以选择,其一可以选择Linux系统,其二可以选择Windows下cygwin,其实原理一样,因为Cygwin 是一个用于 Windows 的类 UNIX shell 环境。 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性;以及 Bash shell 的改写版本和许多 UNIX 实用程序,它们提供大家熟悉的 UNIX 命令行界面。前一个组件是一个 Windows 动态链接库 (DLL)。后一个组件是一组基于 Cygwin DLL 的程序,其中许多是用未经修改的
UNIX 源代码编译的。它们合在一起提供大家熟悉的 UNIX 环境。网上都说在Linux系统下比较好编译通过,所以就听取了意见,装了vmware在里面装了个ubuntu16.04的64位系统,另外需要注意fmpeg不同版本编译方式也有所不同。
一、在ubuntu下配置android ndk环境变量
1.下载android-ndk64-r10b-linux-x86_64.tar.bz2,下载地址:http://dl.google.com/android/ndk/android-ndk64-r10b-linux-x86_64.tar.bz2
2. 把下载好的android-ndk64-r10b版本解压($ sudo tar -C /home/davebobo -xvf android-ndk64-r10b-linux-x86_64.tar.bz2)到/home/davebobo目录下(注:把你的ndk文件放到你的主页Home下,davebobo这个文件夹是我的,我的ubuntu计算机名为davebobo,即/home/davebobo这个目录也就是/主文件夹/公共的可视化桌面gui,这个目录可以随意换)。
3.配置环境变量命令:$sudo gedit ~/.bashrc
添加以下代码:
export NDK=/home/davebobo/android-ndk-r10b
export PATH=${PATH}:$NDK 保存关闭。
5.source ~/.bashrc使其修改的文件生效。
6.ndk-build看看咱们配置环境变量成功没,只要没出command not found就证明环境变量配置成功,如果成功显示如下,

二、下载ffmpeg源码
1.下载ffmpeg-3.0.2.tar.gz,下载地址:https://ffmpeg.org/download.html#releases
2.解压到/home/davebobo目录下。
三、修改FFmpeg的configure
下载FFmpeg源代码之后,首先需要对源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。在configure文件中找到下面几行代码:
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)'
四、创建shell脚本文件引入configure参数
创建shell脚本文件build_ffmpeg.sh,这个文件的格式是unix,如果文件是dos格式,可以用uedit转换格式。脚本内容如下:
#!/bin/bash
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
NDK=/home/davebobo/android-ndk-r10b
SYSROOT=$NDK/platforms/android-L/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
./configure \
--prefix=$PREFIX \
--target-os=linux \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--enable-nonfree \
--enable-shared \
--enable-version3 \
--enable-gpl \
--disable-programs \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--enable-avresample \
--disable-everything \
--enable-decoder=pcm_alaw \
--enable-decoder=pcm_mulaw \
--enable-decoder=mpeg4 \
--enable-decoder=h264 \
--enable-encoder=aac \
--enable-parser=aac \
--enable-parser=h264 \
--enable-parser=mpeg4video \
--enable-parser=mpegvideo \
--enable-parser=mpegaudio \
--enable-encoder=libx264 \
--enable-muxer=mpegts \
--enable-muxer=flv \
--enable-muxer=h264 \
--enable-muxer=flv \
--enable-muxer=mp4 \
--enable-muxer=data \
--enable-muxer=avi \
--enable-muxer=mpeg2video \
--enable-muxer=pcm_alaw \
--enable-muxer=pcm_mulaw \
--enable-demuxer=flv \
--enable-demuxer=mpegts \
--enable-demuxer=rtsp \
--enable-protocol=httpproxy \
--enable-protocol=crypto \
--enable-protocol=ftp\
--enable-protocol=unix\
--enable-protocol=pipe \
--enable-protocol=data \
--enable-protocol=file \
--enable-protocol=tcp \
--enable-protocol=http \
--enable-protocol=udp \
--enable-protocol=udplite \
--enable-protocol=rtp \
--enable-protocol=async \
--enable-protocol=md5 \
--enable-protocol=cache \
--enable-protocol=mmst \
--enable-protocol=mmsh \
--sysroot=$SYSROOT \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-hwaccels \
--enable-zlib \
--disable-devices \
--disable-avdevice \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \ 注意该shell脚本中不能有多余的空格,该脚本中前面几个变量“NDK”、“SYSROOT”、“TOOCHAIN”根据NDK路径的不同需要做相应的修改,configure 选项可以根据需要自行删减。注意这个文件应该保存到ffmpeg-3.0.2/configure同一文件夹下。
五、编译生成FFmepg的头文件和类库文件
使用root用户进入build_ffmpeg.sh目录
给build_ffmpeg.sh的执行权限:sudo chmod a+x build_ffmpeg.sh
执行脚本./build_ffmpeg.sh。
出现下图这样就证明执行成功。

make
make install
至此,会在/home/davebobo/ffmpeg-3.0.2目录下生成一个android目录,这样就可以得到FFmpeg的头文件和类库文件了。
参考资料:
http://www.cnblogs.com/wanggang123/p/5690142.html
http://my.oschina.net/u/994934/blog/185684#OSC_h4_1
http://blog.csdn.net/gobitan/article/details/22750719
http://blog.csdn.net/leixiaohua1020/article/details/47008825
http://wang-peng1.iteye.com/blog/2004897
|