版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ffmpeg移植Android方法以及常见问题汇总:在ffmpeg官网下载源码包,比如ffmpeg-2.3。在ffmpeg目录下增加Android.mk和av.mkconfig.sh三个文件。config.sh用于配置ffmpeg环境脚本,可键入#!/bin/shPREBUILT=.android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86PLATFORM=.android-ndk-r7b/platforms/android-14/arch-armexportTMPDIR=./tmp./configure-
2、target-os=linux-arch=arm-enable-cross-compile-cc=$PREBUILT/bin/arm-linux-androideabi-gcc-4.4.3-cross-prefix=$PREBUILT/bin/arm-linux-androideabi-nm=$PREBUILT/bin/arm-linux-androideabi-nm-extra-cflags=-fPIC-DANDROID-enable-static-disable-shared-disable-asm-disable-yasm-extra-ldflags=-Wl,-T,$PREBUILT/a
3、rm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x-Wl,-rpath-link=$PLATFORM/usr/lib-L$PLATFORM/usr/lib-nostdlib$PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/crtbegin.o$PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/crtend.o-lc-lm-ldlPREBUILT、PLATFORM、TMPDIR是需要修改的,配置自己的ndk路径,通常这一步出错概率极高。TMPDIR路径一定要
4、存在且可以访问。常见错误:armlinuxandroideabigccisunabletocreateanexecutablefile,000tmp文件没有设置。UnknownCcompiler/toolchains/armlinuxandroideabi4.4.3/prebuilt/windows/bin/armlinuxandroideabigcc,000NDK配置错误。./config.sh:line8:arch:commandnotfound,./configure每一个参数后的转行符号,注意后面不要有空格符,另外也有可能是字符格式错误,要转为unix,在vim里:setff二unix
5、保存退出。否则脚本执行失败。cc、一crossprefix、一nm、一extraldflags注意配置路径要正确,否则脚本执行失败。./configure是配置ffmpeg选项的,可以按个人需求添加删减,不赘述。执行该脚本,如果正确,大约数分钟后执行结束,会自动生成config.h和config.mak。如果执行出错,一般是配置问题。av.mk文件键入include$(LOCAL_PATH)/./config.makOBJS:=OBJS-yes:=MMX-OBJS-yes:=include$(LOCAL_PATH)/Makefile#collectobjectsOBJS-$(HAVE_MMX)
6、+=$(MMX-OBJS-yes)OBJS+=$(OBJS-yes)FFNAME:=lib$(NAME)FFLIBS:=$(foreach,NAME,$(FFLIBS),lib$(NAME)FFCFLAGS=-DHAVE_AV_CONFIG_H-Wno-sign-compare-Wno-switch-Wno-pointer-signFFCFLAGS+=-DTARGET_CONFIG=config-$(TARGET_ARCH).hALL_S_FILES:=$(wildcard$(LOCAL_PATH)/$(TARGET_ARCH)/*.S)ALL_S_FILES:=$(addprefix$(TA
7、RGET_ARCH)/,$(notdir$(ALL_S_FILES)ifneq($(ALL_S_FILES),)ALL_S_OBJS:=$(patsubst%.S,%.o,$(ALL_S_FILES)C_OBJS:=$(filter-out$(ALL_S_OBJS),$(OBJS)S_OBJS:=$(filter$(ALL_S_OBJS),$(OBJS)elseC_OBJS:=$(OBJS)S_OBJS:=endifC_FILES:=$(patsubst%.o,%.c,$(C_OBJS)S_FILES:=$(patsubst%.o,%.S,$(S_OBJS)FFFILES:=$(sort$(S
8、_FILES)$(sort$(C_FILES)即可。在需要编译的目录(不同版本ffmpeg有区别),比如在libavcodec、ibavdevice、libavfilter、libavformat、libavutil、libpostproc、libswscale、libswresample目录下分别放入一个Android.mk别放入一个Android.mk文件,键入LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)include$(LOCAL_PATH)/./av.mkLOCAL_SRC_FILES:=$(FFFILES)LOCAL_C_INCLUDES
9、:=$(LOCAL_PATH)$(LOCAL_PATH)/.LOCAL_CFLAGS+=$(FFCFLAGS)LOCAL_STATIC_LIBRARIES:=$(FFLIBS)LOCAL_MODULE:=$(FFNAME)include$(BUILD_STATIC_LIBRARY)即可,这几个目录下的Android.mk是一样的。也可以自己配置L0CAL_M0DULE和L0CAL_STATIC_LIBRARIES,不过上述脚本配置简单。然后删除libavcodec、ibavdevice、libavfilter、libavformat、libavutil、libpostproc、libswsca
10、le、libswresample目录下的Makefile中的include$(SUBDIR)./config.mak和include$(SUBDIR)./subdir.mak,后者在2.3版本中并不存在,确保自己的Makefile000D2句就可以了。5.编写Android.mk,放置ffmpeg根目录,即av.mk、config.sh同级目录这里有2个,一个是用于编译libffmpeg.so的脚本,如下:L0CAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)L0CAL_STATIC_LIBRARIES:=libavformatlibavcodeclibav
11、utillibpostproclibswscalelibavfilterlibavdeviceL0CAL_M0DULE_TAGS:=optionalL0CAL_M0DULE:=libffmpeginclude$(BUILD_SHARED_LIBRARY)include$(callall-makefiles-under,$(L0CAL_PATH)也可以写一个生产ffmpeg的执行文件的mk脚本:L0CAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE_TAGS:=optionalLOCAL_PRELINK_MODULE:=falseLOC
12、AL_SRC_FILES:=cmdutils.cffmpeg.cffmpeg_opt.cffmpeg_filter.cLOCAL_SHARED_LIBRARIES:=libffmpegLOCAL_MODULE:=ffmpeg#include$(BUILD_SHARED_LIBRARY)include$(BUILD_EXECUTABLE)include$(callall-makefiles-under,$(LOCAL_PATH)cmdutils.c和ffmpeg.c,编译后其中,LOCAL_SRC_FILEScmdutils.c和ffmpeg.c,编译后6.常用的移植修改和编译报错因为是移植,所
13、以有些文件必须修改才能编译通过,对config.h修改:老的ffmpeg是将#definerestrictrestrict改为#definerestrict新版本是#defineav_restrictav_restrict改为#defineav_restrict将ffmpeg/libavutil/libm.h中所有static的函数删除。然后编译,如果报错/works/workspace/android-console/jni/ffmpeg.c:3636:19:error:storagesizeofrusageisntknown/works/workspace/android-console/
14、jni/ffmpeg.c:3638:15:error:RUSAGE_SELFundeclared(firstuseinthisfunction)将config.h中#defineHAVE_GETRUSAGE1修改为#defineHAVE_GETRUSAGE0报错/works/workspace/android-console/jni/cmdutils.c:270:19:error:storagesizeofrlisntknown/works/workspace/android-console/jni/cmdutils.c:271:19:error:RLIMIT_CPUundeclared(fi
15、rstuseinthisfunction)将config.h中#defineHAVE_SETRLIMIT1修改为#defineHAVE_SETRLIMIT0报错/works/workspace/android-console/jni/cmdutils.c:41:21:fatalerror:version.h:Nosuchfileordirectory在在ffmpeg根目录下运行./version.sh.version.h报错android-ndk-r8d/build/core/build-binary.mk:41:*targetfilecleanhasboth:and:entries.Stop.把libavfilter目录中的Makefile末尾的clean命令注释掉报错./platforms/android-18/arch-arm/usr/include/stdlib.h:54:14:error:expectedidentifieror(beforevoid./platforms/android-18/arch-arm/usr/inc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 皮革厂设备维护保养细则
- 病原微生物基因检测技师考试试卷及答案
- 《小肠梗阻(2026 版)诊断与治疗要点解读》
- T∕CATAGS 60-2022 架空输电线路大中型固定翼无人机防山火巡视技术规范
- 2026届贵州省都匀第一中学高三化学试题下学期第三次月考试题含解析
- 山东省青岛第十六中学2026届高三高考保温金卷化学试题试卷含解析
- 2026届河南省濮阳市高三下期末考试(化学试题文)试卷含解析
- 护理科研在多学科证据构建中的贡献
- 车库出租合同
- 财税服务合同
- 机器人技术机械臂
- 医院培训课件:《临床输血安全管理》
- 医疗垃圾分类培训考核试题(附答案)
- (国网)社会单位一般作业人-网络信息安全准入考试复习题及答案
- 常识题目及答案大全初中
- 2025年陕西高中学业水平合格考试地理试卷试题(含答案)
- 国际高中入学考-数学试题(英语试题)
- 2022省级政府和重点城市一体化政务服务能力评估报告
- 《小学语文新课程标准》
- 护理法律法规与纠纷防范培训
- DB32T 4954-2024现代灌区管理规范
评论
0/150
提交评论