第19课 在Android环境中使用FFmpeg和openCV进行开发的一般步骤

在上节课,根据模板文件我们对在Android环境中使用FFmpeg和openCV进行开发有了一个初步的体验,这节课,我们来具体看一下其工作流程。

1.程序的入口

与VS2013程序开发类似,Android程序开发也有一个入口,在这个模板中,它的入口文件是MainActivity.java,具体路径是:E:\jPro\demo\src\com\example\demo\MainActivity.java。我们打开MainActivity.java,会看到项目的主类:public class MainActivity extends Activity {},这个就是程序的入口了,与VS2013开发类似,在这个类中我们可以定义各种变量,也可以定义各种方法。其中的onCreate()函数类似于MFC中的OnInitDialog()函数,会在界面初始化完成后执行。

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);formatBtn=(Button)findViewById(R.id.formatBtn);	codecBtn=(Button)findViewById(R.id.codecBtn);	filterBtn=(Button)findViewById(R.id.filterBtn);	configBtn=(Button)findViewById(R.id.configBtn);msgTxt=(TextView)findViewById(R.id.msgTxt);msgTxt.setMovementMethod(ScrollingMovementMethod.getInstance());		}

2.为了能使用FFmpeg和openCV的相关功能,我们需要先把.so动态链接库加载进来并定义四个与C++有关的native函数,这四个函数在demo.cpp中实现并被java调用。

static {		System.loadLibrary("opencv_java3");System.loadLibrary("x264.161");System.loadLibrary("avcodec");System.loadLibrary("avdevice");System.loadLibrary("avfilter");System.loadLibrary("avformat");System.loadLibrary("avutil");System.loadLibrary("postproc");System.loadLibrary("swresample");System.loadLibrary("swscale");System.loadLibrary("demo");}public native String avformatinfo();   public native String avcodecinfo();    public native String avfilterinfo();    public native String configurationinfo();

3.通过按钮调用相关函数

双击打开布局文件,路径为:/demo/res/layout/activity_main.xml。

双击其中的config按钮会看到configBtn单击时会触发名为Config的java方法

<Buttonandroid:id="@+id/configBtn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/filterBtn"android:layout_alignBottom="@+id/filterBtn"android:layout_alignRight="@+id/formatBtn"android:onClick="config"android:text="Config" />/>

而名为Config的java方法则位于MainActivity.java中,而且调用了一个名为configurationinfo()的C++ native函数。

public void config(View view){ msgTxt.setText(configurationinfo());
}

4.demo.cpp中的configurationinfo()函数则是通过下面这种方式被java调用执行的。

JNIEXPORT jstring JNICALL Java_com_example_demo_MainActivity_configurationinfo(JNIEnv *env, jobject obj) {char info[10000] = { 0 };//av_register_all();sprintf(info, "%s\n", avcodec_configuration());//printf("%s", info);return env->NewStringUTF(info);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/341617.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像识别与计算机视觉有什么区别?

图像识别和计算机视觉在很多方面存在差异&#xff0c;这些差异主要体现在以下几个方面&#xff1a; 1. 研究范围 图像识别是计算机视觉领域的一个子集。计算机视觉不仅包括图像识别&#xff0c;还涵盖了更广泛的内容&#xff0c;如场景理解、目标跟踪、分割、识别和解释等。简而…

SQL-分组查询

目录 DQL-分组查询 分组查询注意事项&#xff1a; DQL- 排序查询 &#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &…

Mysql——索引相关的数据结构

索引 引入 我们知道&#xff0c;数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快&#xff0c;因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找&#xff08;linear search&#xff09;&#xff0c;这种复杂度为…

探索 TCP 与 UDP:网络通信的两门学派(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

基于SSM的教室信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

【常用的简单功能及算法】拦截器 加盐算法 深克隆 时间日期格式化 加盐算法 sql分页算法 验证码

1.实现拦截器 Interceptor (以登录拦截器为例) 1.1 写一个登录拦截器普通类 实现HandlerInterceptor接口重写preHandle方法 //检验登录状态拦截器 //实现接口HandlerInterceptor 重写方法preHandle public class LoginInterceptor implements HandlerInterceptor {/** 该方…

搭建 MyBatis 环境

目录 1.添加依赖 2.数据库连接配置 3.配置XML路径 4.下载插件MyBatisX 5.如何使用 6.示例 1.添加依赖 创建新项目时添加两个依赖: MyBatis Framewrok 和 MySQL Driver 。 如果是在已经创建好的项目中配置mybatis环境。需要先下载一个插件&#xff1a;EditStarters 。 然…

AI换脸-faceswap

&#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. AI换脸原理 1.1 G…

初识Ubuntu

其实还是linux操作系统 命令都一样 但是在学习初级阶段&#xff0c;我还是将其分开有便于我的学习和稳固。 cat 查看文件 命令 Ubuntu工作中经常是用普通用户&#xff0c;在需要时才进行登录管理员用户 sudn -i 切换成管理用户 我们远程连接时 如果出现 hostname -I没有出现…

精品公式——“V型反转”,精准把握V型反转行情,主副图分享

► 日线表现 代码评估 技术指标代码评估&#xff1a; M5, M14, M25 - 指数移动平均线&#xff08;EMA&#xff09;: M5:EMA(C,5),COLORLIBLUE;&#xff1a;5日指数移动平均线&#xff0c;用浅蓝色表示。 M14:EMA(C,13),COLORF00FF0;&#xff1a;13日指数移动平均线&#xff…

Go模板后端渲染时vue单页面冲突处理

go后端模版语法是通过 {{}} &#xff0c;vue也是通过双花括号来渲染的&#xff0c;如果使用go渲染vue的html页面的时候就会报错&#xff0c;因为分别不出来哪个是vue的&#xff0c;哪个是go的&#xff0c;既可以修改go的模板语法 template.New("output").Delims(&qu…

数据结构与算法教程,数据结构C语言版教程!(第三部分、栈(Stack)和队列(Queue)详解)四

第三部分、栈(Stack)和队列(Queue)详解 栈和队列&#xff0c;严格意义上来说&#xff0c;也属于线性表&#xff0c;因为它们也都用于存储逻辑关系为 "一对一" 的数据&#xff0c;但由于它们比较特殊&#xff0c;因此将其单独作为一章&#xff0c;做重点讲解。 使用栈…