linux下编译安卓ffmpeg
本次编译属于2013年6月项目的一部分,重新修改使用。
为统一工程版本
ffmpeg版本为1.2.1
本次的目录结构为
工程目录/jni/Android.mk
工程目录/jni/Application.mk
工程目录/jni/ffmpeg/(ffmpeg source
code)
工程目录/jni/ffmpeg/Android.mk
工程目录/jni/ffmpeg/av.mk
工程目录/jni/ffmpeg/config.sh
工程目录/jni/ffmpeg/config.mak
工程目录/jni/jni/Android.mk
工程目录/jni/jni/FFAudioJni.cpp
工程目录/jni/jni/FFAudioCodec.h
工程目录/jni/jni/FFAudioCodec.cpp
......
1.下载ffmpeg 1.2.1 原码 ffmpeg-1.2.1.tar.bz2
2.解压到文件夹ffmpeg。跟目录下添加文件
config.sh
3.项目中需要的几个ffmpeg库为libavformat libavcodec libavutil libpostproc
libswresample libswscale
所以,在ffmpeg文件夹libavformat libavcodec libavutil
libpostproc libswresample
libswscale这几个文件夹下各地添加一个文件Android.mk
并且各自文件夹下的Makefile的第一句include
$(SUBDIR)../config.mak 使用#注释掉
即是由include $(SUBDIR)../config.mak
变成#include
$(SUBDIR)../config.mak
4.ffmpeg 文件夹下,命令行运行
$ ./config.sh
$ make
$ make install
5.工程目录下运行
$ ndk-build
6. ndk-build
会报如下错误
找不到intmath.h
解决方法:将ffmpeg源码中/home/gong/android/workspace/HelloJni/jni/ffmpeg/libavutil/intmath.h
拷贝添加intmath.h到编译结果include路径下
7. ndk-build 会报如下错误
libavutil/parseutils.c:441:7: error: conflicting types
for ‘av_small_strptime’
libavutil/parseutils.h:158:7: note: previous
declaration of ‘av_small_strptime’ was here
原因是:
ndk-build 默认带 -I
参数。这样导致.c文件搜索路径顺序,当前路径比android sysroot路径优先。而ffmpeg 1.0
以后版本调用系统一些方法如time.h,被ffmpeg目录的time.h替代。导致错误。
参考:https://trac.ffmpeg.org/ticket/1783
http://weimingtom.iteye.com/blog/1483566
解决方法:
修改所有lib***文件夹下的Android.mk中local路径
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)
\
$(LOCAL_PATH)/..
改为
LOCAL_C_INCLUDES :=
LOCAL_C_INCLUDES
+= $(SYSROOT_INC)/usr/include
#LOCAL_C_INCLUDES +=
$(LOCAL_PATH)
LOCAL_C_INCLUDES +=
$(LOCAL_PATH)/..
注释掉$(LOCAL_PATH)目录并提前sysroot的优先顺序
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。