- 2
- 0
- 约1.79千字
- 约 18页
- 2017-06-15 发布于北京
- 举报
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版本号,如下图:
此处再次省略一万字…
您可能关注的文档
最近下载
- 《HG-T21633-1991_玻璃钢管和管件》.pdf
- 2025中国南方电网有限责任公司校园招聘笔试备考试题附答案解析.docx VIP
- 五项管理行动日志表格.xls
- 2026春人教版英语八年级下册UNIT 2 Stay Healthy综合评估卷(含答案).doc VIP
- 基于大数据技术的水利工程信息化建设管理 .docx VIP
- 2026年日历(台历) 含节假日 A4 纵向排版可编辑.docx VIP
- 《黑格尔法哲学批判导言》.docx VIP
- 2025中国南方电网有限责任公司春季校园招聘笔试备考题库附答案解析.docx VIP
- 写作与沟通 课件全套 刘玉 模块1--8 应用写作概述、 公务文书写作、 职场文书写作 ---职场沟通.pptx
- 固体化学:第三章 结晶学和衍射技术2.pdf VIP
原创力文档

文档评论(0)