- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android自定义so文件调用ffmpeg.so详解
在使用一下介绍内容时候,我认为所有读者都已具备一下水平:
会建立android项目工程
了解NDK编程入门知识
已成功编译或在网上已下载到ffmpeg.so动态库文件
我自己成功编译ffmpeg.so文件:使用vitamio提供的.sh脚本文件在linux环境下编译的,编译过程此处略去一万字…
1、在NDK的samples下建立android工程,此处我建立的是HelloFFmpeg,如下图:
2、编写本地函数声明,NDK的samples目录下有一个hello-jni的例子:
使用UltraEdit打开HelloJni.java文件:
将该文件的的一下内容拷贝到HelloFFmpeg工程的MainActivity.java的相应位置:
(1)、拷贝onCreate中的内容:
(2)、拷贝本地函数声明:
(3)、拷贝库文件加载:
打开拷贝完成的HelloFFmpeg工程下的MainActivity.java文件,如下:
生成本地.h头文件:
新建立jni目录:
在jni目录下建立再建立jni目录
这里通过cmd进入第二个jni目录:
输入以下内容生成.h头文件:
此时会报错,因为咱们的本地函数和本地库的引用均在主类MainActivity中声明引用的,一般重新创建一个类进行声明引用的时候是不会出错的。但此时我给大家提供一个解决该错误的方法:
进入src目录中,使用下面的语句:
其中:
-d:代表.h所在的目录,如果目录不存在,则自动创建一个
../jni/jni:代表上级目录中的jni目录,.h文件将存放在此处
在工程上刷新,就出现.h头文件了:
创建.c文件
在c文件中包含刚才生成的头文件,并将头文件的函数声明部分拷贝到c文件中:
包含头文件
先给大家看看我使用vitamio生成库文件后的文件目录:
所有的so库都在build文件夹中
该文件夹中包含了支持不同cpu特性的so库
我使用armv7的so库
在工程jni目录下建立include目录
将armv7/include下的文件夹全部拷贝到工程下的include文件夹下
在c文件中包含头文件
包含ffmpeg.so动态库
(1)建立pretuilt目录,并将ffmpeg.so拷贝进去
在prebuilt下建立Android.mk文件
内容如下
(2)在jni目录下建立Android.mk文件
内容如下
在jni/jni目录下建立Android.mk文件
内容如下
参数说明:
LOCAL_C_INCLUDES:为包含头文件目录,前面留空白区域不是空格,是按Tab键生成的,这个一定要注意,不然交叉编译时候会出错
LOCAL_SHARED_LIBRARIES:为共享库,此处为全称libffmpeg
LOCAL_MODULE:MainActivity中声明引用的hello-jni
LOCAL_SRC_FILES:c源文件名
编写c文件,内容如下,此函数返回ffmpeg版本号
修改include头文件
当直接交叉编译以上内容时会报错,提示找不到某某.h文件,原因是include文件夹中的.h头文件调用逻辑问题,导致交叉编译时找不到头文件
例如libavcodec/avcodec.h头文件中:
将所有没有包含在libavcodec目录下的头文件引用路径全部修改,修改后如下:
依照以上步骤,检查所有的头文件引用,以防编译出错
10、交叉编译
(1) 打开Cywin,进入到工程目录下
(2)编译
输入../../ndk-build进行编译
Oh my god!出现了以上错误,现在你是否要崩溃了,别急,现在使用以下方法:
在工程路径下:
输入:cd obj/local/armeabi
输入:chmod 777 ./*
(注:上面的错误的结果是没有生成libs文件,但生成了obj文件,因此改这个错误的时候obj不要删)
刷新工程,出现so文件
此时运行程序,会报错,究其原因,是因为MainActivity中未包含ffmpeg动态库文件,修改MainActivity如下
重新编译成功,如下图:
刷新工程,此时libs下便出现了两个so动态库:
此时重新运行工程,将打印ffmpeg版本号,如下图:
此处再次省略一万字…
您可能关注的文档
- 2013年西宁迈国际语言学校剑桥国际少儿英语3下.doc
- 2014-205高中英语 Module 4 第1课时 Introduction Reading同步练习 外研版必修4.doc
- 2014-205外研版英语七年级下册Module 9~10 过关测试卷.doc
- 2014北京电学院招生简章.doc
- 2014北京海高考一模物理(含答案).doc
- 2014北京海区高考一模英语(Word解析版).doc
- 2014高考英必备词组汇总.doc
- 2014高一下期第一次月考试卷.doc
- 2014年05 CATTI三级笔译真题.doc
- 2014年5月京海淀初三物理中考一模试题和答案.doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)