由于项目需求,前两天在在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工具。在中断执行如下命令:

        
  1. $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目录,在其中输入如下命令:

        
  1. $exportPATH=/User/yarin/android-toolchain/bin:$PATH
  2. $exportCC=arm-linux-androideabi-gcc
  3. $exportCXX=arm-linux-androideabi-g++
  4. $exportCXXFLAGS="-lstdc++"

这些命令主要用于设置环境变量,在后期的编译过程中,就不需要在设置sysroot路径和CC了,而且还能够使用STL,异常,RTTI。当然了,你也可以不在这里设置,而在后期的./configure中去制定需要的路径。

3:配置编译ffmpeg的选项参数

这一步比较简单,需要什么就模块就打开什么模块,我项目中的需求配置如下:

        
  1. ./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,毕竟这是一个很长强大的多媒体库。有事儿就@杨丰盛

更多相关文章

  1. 深入理解Android工程的编译过程
  2. Android(安卓)SDK 2.3与Eclipse最新版开发环境搭建(一)
  3. Android环境变量作用--命令行操作(ADB、AVD等)
  4. Mac下关于The "android" command is deprecated.问题解决
  5. Android(安卓)JNI开发工具篇(1)-开发环境搭建
  6. 如何编译Android内核源码
  7. 移植 libusb 到 Beagleboard 上的 Android
  8. Andorid adb 命令
  9. Android(安卓)4.0 中的Camera

随机推荐

  1. Android: couldn't save which view has
  2. 让Android(安卓)adb运行在ARM平台上
  3. Android安装卸载程序具体操作方法解析
  4. android 跳动频谱 播放器(类似千千静听)
  5. Android中改变Dialog背景透明度
  6. Android(安卓)系统服务 - Input 事件的分
  7. android ndk编译x264开源(用于android的f
  8. Android(安卓)7.0 SystemUI(1)--启动过程
  9. AbstractProcessor注解处理器
  10. Android启动画面实现