如何用Android NDK编译FFmpeg

2025-05-13 17:40:01
推荐回答(1个)
回答1:

如何使用ndk为ffmpeg编译rtmp+polarssl静态库?这个问题花了我整整一天时间。其中遇到很多小问题,这里记录一下,方便自己也方便其他人。1、编译polarssl,查看其Readme文件即可,不需要configure,只需要make时带上必要的参数即可,不过要记得在每一次执行make命令时都带上CC的参数(指向你的armgcc),因为我试过在makeinstall时没有带上CC的参数,虽然能编译出polarssl但是未能正确被rtmp引用到。2、因为前面我用的polarssl是当前最新(1.3.7)版本,而librtmp使用的好像是polarssl1.0.0以下版本的api,所以需要修改rtmp部分源码,让其调用新版polarssl的api,这里的修改可以参照《MigratingfromPolarSSL-1.2tothePolarSSL1.3branch》和《[rtmpdump]branchmasterupdated.a312ac7FixcompatwithPolarSSL>=1.1.0》。3、出现undefinedreferenceto`havege_random’错误,这里是因为polarssl默认关闭了havege模块,需要你手动开启,主要就是修改include/polarssl/config.h,去掉POLARSSL_HAVEGE_C前的注释,也就是要定义POLARSSL_HAVEGE_C,如下:#definePOLARSSL_HAVEGE_C4、在编译出上面两个库之后,可以开始编译ffmpeg(2.1.1版本)了,如果遇到下面的问题check_pkg_configlibrtmplibrtmp/rtmp.hRTMP_SocketERROR:librtmpnotfound这里有三种解决方法:第一种,因为是网络上传播最多的,算是比较简便的方法,就是修改ffmpeg的configure,将以下一行:enabledlibrtmp&&require_pkg_configlibrtmplibrtmp/rtmp.hRTMP_Socket改为:enabledlibrtmp&&requirelibrtmplibrtmp/rtmp.hRTMP_Socket-lrtmp-lpolarssl-lz或者直接注释掉&&***部分,然后再自己加上librtmp的库路径也行第二种,(比较推荐,因为解决了这个会顺带解决大部分找不到库的错误!)因为这里使用了pkg-config工具查找库,而这个工具ndk并没有附带提供,而出现check_pkg_config相关错误的话,只要稍加注意,会发现在使用configure配置ffmpeg的交叉编译时,已经有相应的pkg-config不存在的警告了。我对这个工具不熟悉,所以我只是简单地加上了一个软链接到系统的pkg-config,如下:ln-s/usr/bin/pkg-config/home/cidy0106/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-pkg-config这个时候重新configure的话可能会出现找不到polarssl库的错误提示,需要修改一下librtmp安装目录里的librtmp.pc,把以下内容:Libs:-L${libdir}-lrtmp-lz改为:Libs:-L${libdir}-lrtmp-lz-lpolarssl至此,就可以正确编译出ffmpeg了转载