概述
由于项目需求,前两天在在ios项目中使用ffmpeg,写下了“关于ios中编译ffmpeg0.9.2库”,然后有朋友在咨询,如何编译最新版的ffmpeg,其实最新版的编译也差不多,只是看看最新版的改变如何,修改一些参数即可,同时又因为我需要将项目跨平台到android,所以这次又需要在android中使用ndk来编译ffmpeg。索性在android上就编译一个最新版的ffmpeg出来看看。
还是先说一下我的环境:
mac os x 10.7.4
Eclispe3.7
android-sdk-macosx
android-ndk-r7b
1:打开ffmpeg官网(http://ffmpeg.org/download.html),看到最新版是ffmpeg-0.10.3,直接就选择了一个最新版本的zip包下载,然后解压,得到ffmpeg-0.10.3文件夹。
因为在网上也看到很多文章用android ndk来编译ffmpeg,但是整个编译和配置过程都很麻烦,并且大部分朋友反应,编译过程总是会出现很多错误,各种编译不成功的原因,这次我们就来个简单点儿的,但是需要确保android ndk的版本在r5以上。原因请看android ndk目录中的doc/STANDALONE-TOOLCHAIN.html文档,因为Android ndk中的交叉工具链可以将一套完整的工具链从NDK里复制出来,不在和ndk放在一起,以后用复制出来的工具链提供的库和头文件来编译会更加方便。
2:从ndk中赋值一个交叉工具链,使用ndk中的make-standalone-toolchain工具。在中断执行如下命令:
$NDK/build/tools/make-standalone-toolchain.sh--platform=android-9--install-dir=/Users/yarin/android-toolchain
如果环境变量中有ndk的tools目录,就不需要前面的$NDK/build/tools/目录了。
这样就会在制定的目录“/User/yarin”目录中产生一个android-toolchain文件夹,就是我们从ndk中分离出来的独立交叉工具链,其中的sysroot目录就包含了一些基本库和头文件。一会儿我们就会用它来编译ffmpeg。
其中有个参数--platform,做过android的都知道吧,用于制定api版本。
3:配置编译器
打开终端,进入第一步解压得到的ffmpeg-0.10.3目录,在其中输入如下命令:
$ exportPATH=/User/yarin/android-toolchain/bin:$PATH
$ export CC=arm-linux-androideabi-gcc
$ export CXX=arm-linux-androideabi-g++
$ export CXXFLAGS="-lstdc++"
这些命令主要用于设置环境变量,在后期的编译过程中,就不需要在设置sysroot路径和CC了,而且还能够使用STL,异常,RTTI。当然了,你也可以不在这里设置,而在后期的./configure中去制定需要的路径。
3:配置编译ffmpeg的选项参数
这一步比较简单,需要什么就模块就打开什么模块,我项目中的需求配置如下:
./configure--prefix=/Users/yarin/android-toolchains --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-avfilter --disable-devices --disable-debug --disable-encoders --enable-cross-compile --enable-decoders--enable-demuxer=mov--enable-demuxer=h264--enable-protocol=file--enable-avformat --enable-avcodec--enable-decoder=rawvideo--enable-decoder=h264--enable-decoder=mjpeg--enable-decoder=h263--enable-decoder=mpeg4--enable-parser=h264--enable-zlib --enable-shared --enable-static --enable-pic--nm=arm-linux-androideabi-nm--sysroot=/Users/yarin/android-toolchains/sysroot--cc=arm-linux-androideabi-gcc--arch=arm--target-os=linux--cross-prefix=arm-linux-androideabi- --disable-asm
上面我们说过,如果上一步执行了配置操作,这一步的命令中也可以不制定--sysroot, --cc等一些参数,这里我在命令中还是加上了,方便大家查看。
4:编译
编译操作是最简单的了,唯一就是编译的时间会比较长一些,好吧,那就等他自己编译吧,执行“make”命令即可,执行之后,去冲咖啡吧。
编译完成之后就可以到libavcodec、libavfilter、libavformat、libavutil、libpostproc和libswscale文件夹下面去找对应的静态链接库文件,.a的文件,然后在所需要的项目中引入这些问价和ffmpeg的头文件即可。
当然了,如果你还是想使用android.mk文件的方式来编译,那么可以根据ffmpeg文件夹及其子文件夹中的mainfest文件来编写对应的android.mk文件并编译,这似乎在网络上已经有很多可以参考的方案了,这里就不在介绍了,大家可以参考这里(https://gist.github.com/1126971)的编译脚本,不过这种方式我暂时没有测试过,要大家自己去完成了,之后在给大家分享一下吧^_^。
另外,关于在android中编译ffmpeg也有很多已知的方案可以参考,如下:
1. Rockplayer:
http://rockplayer.freecoder.org/index_cn.html
http://blog.csdn.net/harry_helei/article/details/6322767
2. havlenapetr:
http://github.com/havlenapetr/FFMpeg
http://blog.csdn.net/scut1135/article/details/6536157
http://hi.baidu.com/eefolks/blog/item/e0329e4682859129cefca351.html
http://ajavn.com/anzhuotuandui/4351.html
3. halfninja:
https://github.com/halfninja/android-ffmpeg-x264
4. olvaffe's:
http://gitorious.org/~olvaffe/ffmpeg/ffmpeg-android
http://www.nujk.com/ffmpeg-on-android
5. 流媒体开发论坛 - 罗索工作室:
http://www.rosoo.net/a/201108/14834.html
http://bbs.rosoo.net/thread-6252-1-1.html
如果大家编译遇到问题欢迎在后面补充,同时,也希望各位朋友可以一起交流学习ffmpeg,毕竟这是一个很长强大的多媒体库。有事儿就@杨丰盛
最后
以上就是超帅项链为你收集整理的ffmpeg android ndk编译,关于使用Android NDK编译ffmpeg的全部内容,希望文章能够帮你解决ffmpeg android ndk编译,关于使用Android NDK编译ffmpeg所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复