我是靠谱客的博主 超帅项链,最近开发中收集的这篇文章主要介绍ffmpeg android ndk编译,关于使用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工具。在中断执行如下命令:

$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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部