网站大量收购独家精品文档,联系QQ:2885784924

Android定义so文件调用ffmpeg.so详解.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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版本号,如下图: 此处再次省略一万字…

您可能关注的文档

文档评论(0)

pao0969363mou8 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档