关于使用Android NDK编译ffmpeg

由于项目需求,前两天在在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. $ export PATH=/User/yarin/android-toolchain/bin:$PATH 
  2. $ export CC=arm-linux-androideabi-gcc 
  3. $ export CXX=arm-linux-androideabi-g++ 
  4. $ export CXXFLAGS="-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,毕竟这是一个很长强大的多媒体库。有事儿就@杨丰盛







本文转自 yarin 51CTO博客,原文链接:http://blog.51cto.com/yarin/870908,如需转载请自行联系原作者


优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/402077

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。