​第20课 在Android Native开发中加入新的C++类

news2024/12/22 15:11:02

​这节课我们开始利用ffmpeg和opencv在Android环境下来实现一个rtmp播放器,与第2课在PC端实现播放器的思路类似,只不过在处理音视频显示和播放的细节略有不同。

1.压缩备份上节课工程文件夹并修改工程文件夹为demo20,将demo20导入到Eclipse或者在原工程上继续下列的开发步骤。

2.右单击工程目录下的jni节点并添加一个新的C++类fmlp,如下图所示:

3.删除工程中的其它按钮,并添加id为startBtn的按钮:

<Button

        android:id="@+id/startBtn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentBottom="true"

        android:layout_centerHorizontal="true"

        android:onClick="start"

        android:text="Start"

     />

在MainActivity.java中添加以下代码:

Button startBtn;

startBtn=(Button)findViewById(R.id.startBtn);                

public native String startFF(String rtmpURL);

public native String stopFF();

4.绑定单击事件start用于启动C++中的FFmpeg线程:

public void start(View view){ 

backWidth = Integer.toString(320);

          backHeight=Integer.toString(240);

rtmpURL = "rtmp://192.168.0.100/vod/2.mp4";

msgTxt.setText(startFF(rtmpURL));                

} 

5.在jni目录下添加fmlp类:

fmlp.h内容如下:

class fmlp {

public:

fmlp();

virtual ~fmlp();

string init();

};

fmlp.cpp内容如下:

std::stringfmlp::init() {

    return"Hello fmlp...";

}

6.在demo.cpp中添加启动FFmpeg的代码:

JNIEXPORT jstring JNICALL Java_com_example_demo_MainActivity_startFF(JNIEnv *env, jobject obj) {

if(myFmlp==NULL){

          myFmlp =new fmlp();

}

std::string str=myFmlp->init();

return env->NewStringUTF(str.c_str());

}

7.在Android.mk中添加fmlp编译选项以使fmlp.cpp被编译,完整的Android.mk内容如下

LOCAL_PATH := $(call my-dir)

#ffmpeg lib

include$(CLEAR_VARS)

LOCAL_MODULE := avcodec

LOCAL_SRC_FILES := lib/libavcodec.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avdevice

LOCAL_SRC_FILES := lib/libavdevice.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avfilter

LOCAL_SRC_FILES := lib/libavfilter.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avformat

LOCAL_SRC_FILES := lib/libavformat.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avutil

LOCAL_SRC_FILES := lib/libavutil.so

include$(PREBUILT_SHARED_LIBRARY)





include$(CLEAR_VARS)

LOCAL_MODULE := postproc

LOCAL_SRC_FILES := lib/libpostproc.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := swresample

LOCAL_SRC_FILES := lib/libswresample.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := swscale

LOCAL_SRC_FILES := lib/libswscale.so

include$(PREBUILT_SHARED_LIBRARY)



#x264 lib

include$(CLEAR_VARS)

LOCAL_MODULE := libx264

LOCAL_SRC_FILES := lib/libx264.161.so

include$(PREBUILT_SHARED_LIBRARY)



#opencv lib

include$(CLEAR_VARS)

LOCAL_MODULE := opencv

LOCAL_SRC_FILES :=lib/libopencv_java3.so

include$(PREBUILT_SHARED_LIBRARY)



#demo

include$(CLEAR_VARS)

LOCAL_MODULE    := demo

LOCAL_SRC_FILES := fmlp.cpp demo.cpp



LOCAL_C_INCLUDES += $(LOCAL_PATH)/include

##-landroid参数 for native windows

LOCAL_LDLIBS := -llog -landroid

#LOCAL_LDLIBS := -llog -lz

LOCAL_SHARED_LIBRARIES :=opencv libx264 avcodec avdevice avfilter avformat avutil postproc swresample swscale



include$(BUILD_SHARED_LIBRARY)

调试运行,能正确返回信息"Hello fmlp..."则表示程序运行正常。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营29期|day30 任务以及具体安排

332.重新安排行程 class Solution {private LinkedList<String> res;private LinkedList<String> path new LinkedList<>();public List<String> findItinerary(List<List<String>> tickets) {Collections.sort(tickets, (a, b) -> a.…

Spring基于dynamic-datasource实现MySQL多数据源

目录 多数据源实现 引入依赖 yml配置文件 业务代码 案例演示 多数据源实现 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamicdatasourcespringbootstarter</artifactId><version>3.5.0</version> &…

Java玩转《啊哈算法》排序之桶排序

过去心不可得&#xff0c;现在心不可得&#xff0c;未来心不可得 目录在这里 楔子代码地址桶排序代码核心部分优缺点 完整代码演示 升级版核心代码完整代码演示 楔子 大家好&#xff01;本人最近看了下《啊哈算法》&#xff0c;写的确实不错&#xff0c;生动形象又有趣&#x…

AR 自回归模型

文章目录 总的代码ADF 检验(是否平稳)差分操作拟合AR 模型预测可视化总的代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.ar_model import AutoReg from statsmodels.tsa.stattools import adfuller# 生成一个示例时间序…

【开源】基于JAVA语言的假日旅社管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统介绍2.2 QA 问答 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿评论4.3 查询民宿新闻4.4 新建民宿预订单4.5 查询我的民宿预订单 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的假日旅社…

Java-HashMap如何找落点

顾名思义&#xff0c;HashMap采用的是哈希方式来找落点&#xff0c;通过数据的某些特征&#xff0c;计算出一个哈希值&#xff0c;然后用哈希值与节点建立映射关系&#xff0c;从而确定这个数据应该在哪个节点上&#xff0c;下图是一个具有16个节点的分布式集群&#xff0c;本文…

JVM篇--垃圾回收器高频面试题

1 你知道哪几种垃圾收集器&#xff0c;各自的优缺点是啥&#xff0c;重点讲下cms和G1&#xff0c;包括原理&#xff0c;流程&#xff0c;优缺点&#xff1f; 1&#xff09;首先简单介绍下 有以下这些垃圾回收器 Serial收集器&#xff1a; 单线程的收集器&#xff0c;收集垃圾时…

【K8S 云原生】K8S的图形化工具——Rancher

目录 一、rancher概述 1、rancher概念 2、rancher和K8S的区别&#xff1a; 二、实验 1、安装部署 2、给集群添加监控&#xff1a; 3、创建命名空间&#xff1a; 4、创建deployment&#xff1a; 5、创建service&#xff1a; 6、创建ingress&#xff1a; 7、创建hpa 8…

redis—Set集合

目录 前言 1.常见命令 2.使用场景 前言 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中1)元素之间是无序的2)元素不允许重复&#xff0c;如图2-24所示。一个集合中最多可以存储22 - 1个元素。Redis 除了支持集合内的增删查改操…

Android SeekBar 进度条圆角

先看下效果图&#xff1a; 之前&#xff1a; 优化后&#xff1a; 之前的不是圆角是clip切割导致的 全代码&#xff1a; <SeekBarandroid:layout_width"188dp"android:layout_height"wrap_content"android:background"null"android:focusa…

微认证 openEuler社区开源贡献实践

文章目录 1. 开源与开源社区2. openEuler 社区概述3.参与openEuler社区贡献4.openEuler软件包开发Linux软件管理——源码编译 1. 开源与开源社区 Richard Matthew Stallman&#xff0c;1983年9月推出GNU项目&#xff0c;并发起自由软件运动(free software movement或free/open…

【并发】什么是 Future?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 关键特性和操作包括&#xff1a; 提交任务&#xff1a; 查询完成状态&#xff1a; 等待结果&#xff1a; 取消任务&#xff1a…

Vue实现图片预览,侧边栏懒加载,不用任何插件,简单好用

实现样式 需求 实现PDF上传预览&#xff0c;并且不能下载 第一次实现&#xff1a;用vue-pdf&#xff0c;将上传的文件用base64传给前端展示 问题&#xff1a; 水印第一次加载有后面又没有了。当上传大的pdf文件后&#xff0c;前端获取和渲染又长又慢&#xff0c;甚至不能用 修…

Windows下网络编程(win32API+VS2022)

一、开发环境 我这里介绍下我用的环境安装过程。 所有版本的VS都可以的。 我当前环境是在Windows下&#xff0c;IDE用的是地表最强IDE VS2022。 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/downloads/ 因为我这里只需要用到C和C语言编程&#xff0c;那…

SRC实战 | 小白SRC找到的第一个SQL注入

本文由掌控安全学院 - zbs投稿 一、漏洞说明 xxxxx公司后台存在SQL注入&#xff0c;后端数据库为Mysql 【显错位2&#xff0c;4&#xff0c;6】 漏洞已提交平台&#xff0c;后台的开发商提供给了很多公司&#xff0c;搜一下资产就有很多公司都没有修复该漏洞。 二、漏洞挖掘…

Java Web(四)--JavaScript

介绍 JavaScript 教程 JavaScript 能改变 HTML 内容&#xff0c;能改变 HTML 属性&#xff0c;能改变 HTML 样式 (CSS)&#xff0c;能完成页面的数据验证&#xff1b; JS 需要运行浏览器来解析执行JavaScript 代码&#xff1b; JS 是 Netscape 网景公司的产品&#xf…

Git搭建

文件格式 <VirtuaHost * 80> nginx </virtualHost> pache xml server {} nginx conf格式 [xx] 配置内容 代码开发中版本控制,项目代码编译构建,项目版本迭代全流程 命令300条 Hospital Information System 开发语言分类: 编译型: C nginx ma…

SSL证书 DV、OV、EV等级的证书适用群体

DV&#xff08;Domain Validation&#xff0c;域名验证&#xff09;证书 特点&#xff1a;DV证书是最基础的SSL/TLS证书类型&#xff0c;仅验证申请证书的实体是否对该域名有控制权。验证过程相对简单快速&#xff0c;通常只需要验证域名的所有权即可。 适用人群&#xff1a;…

蓝桥杯备战——2.矩阵键盘

1.分析原理图 由上图可以看到若J5跳线帽接地&#xff0c;就S4~S7就可以当做四路独立按键&#xff0c;若接到P44&#xff0c;则就是4*4的矩阵键盘。 2.独立按键处理 相对传统的按键延时消抖方案&#xff0c;这里我采用更高效&#xff0c;更经典&#xff0c;更偏向产品级应用的…

2016年认证杯SPSSPRO杯数学建模B题(第一阶段)低分辨率下看世界全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 低分辨率下看世界 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#xff0c…