当前位置: 首页 > news >正文

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

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

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

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

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

<Buttonandroid: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 libinclude$(CLEAR_VARS)LOCAL_MODULE := avcodecLOCAL_SRC_FILES := lib/libavcodec.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avdeviceLOCAL_SRC_FILES := lib/libavdevice.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avfilterLOCAL_SRC_FILES := lib/libavfilter.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avformatLOCAL_SRC_FILES := lib/libavformat.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avutilLOCAL_SRC_FILES := lib/libavutil.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := postprocLOCAL_SRC_FILES := lib/libpostproc.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := swresampleLOCAL_SRC_FILES := lib/libswresample.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := swscaleLOCAL_SRC_FILES := lib/libswscale.soinclude$(PREBUILT_SHARED_LIBRARY)#x264 libinclude$(CLEAR_VARS)LOCAL_MODULE := libx264LOCAL_SRC_FILES := lib/libx264.161.soinclude$(PREBUILT_SHARED_LIBRARY)#opencv libinclude$(CLEAR_VARS)LOCAL_MODULE := opencvLOCAL_SRC_FILES :=lib/libopencv_java3.soinclude$(PREBUILT_SHARED_LIBRARY)#demoinclude$(CLEAR_VARS)LOCAL_MODULE    := demoLOCAL_SRC_FILES := fmlp.cpp demo.cppLOCAL_C_INCLUDES += $(LOCAL_PATH)/include##-landroid参数 for native windowsLOCAL_LDLIBS := -llog -landroid#LOCAL_LDLIBS := -llog -lzLOCAL_SHARED_LIBRARIES :=opencv libx264 avcodec avdevice avfilter avformat avutil postproc swresample swscaleinclude$(BUILD_SHARED_LIBRARY)

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

相关文章:

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

​这节课我们开始利用ffmpeg和opencv在Android环境下来实现一个rtmp播放器&#xff0c;与第2课在PC端实现播放器的思路类似&#xff0c;只不过在处理音视频显示和播放的细节略有不同。 1.压缩备份上节课工程文件夹并修改工程文件夹为demo20&#xff0c;将demo20导入到Eclipse或…...

python学习笔记11(程序跳转语句、空语句)

&#xff08;一&#xff09;程序跳转语句 1、break 用法&#xff1a;循环语句中使用&#xff0c;结束本层循环&#xff0c;一般搭配if来使用。注意while/else语法 示例&#xff1a; i0; while i<3:user_nameinput(请输入用户名&#xff1a;)pwdinput("请输入密码&a…...

C. Doremy‘s City Construction(二分图问题)

思路&#xff1a;把集合划分成两部分,一部分中每个数都比另一部分小,这两部分连成一个完全二分图,这种情况是最优的,还需要特判所有数都相等的情况. 代码&#xff1a; void solve(){int n;cin >> n;vector<int>a(n 1);for(int i 1;i < n;i )cin >> a[…...

PHP“引用”漏洞

今日例题&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); include("flag.php"); class just4fun { var $enter; var $secret; } if (isset($_GET[pass])) { $pass $_GET[pass]; $passstr_replace(*,\*,$pass); } $o unser…...

计算机网络-AAA原理概述

对于任何网络&#xff0c;用户管理都是最基本的安全管理要求之一&#xff0c;在华为设备管理中通过AAA框架进行认证、授权、计费实现安全验证。 一、AAA概述 AAA&#xff08;Authentication(认证), Authorization(授权), and Accounting(计费)&#xff09;是一种管理框架&#…...

Oracle BIEE 示例(一)数据透视表2

1 背景 版本:BIEE 12C 视图:数据透视表 实现内容(顺序与具体内容不一致): 2 空列显示(方法一) 2.1 问题 列为空时,标题栏不显示信息。 2.2 期望 即使数据为空,也要显示列名。 2.3 官方资料 2.3.1 操作步骤 2.3.1.1 要在分析级别关闭空值隐藏,请执行以下操作…...

算法训练营Day50(动态规划11)

说明 较难&#xff0c;二刷再仔细打代码 123.买卖股票的最佳时机III 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 提醒 这道题一下子就难度上来了&#xff0c;关键在于至多买卖两次&#xff0c;这意味着可以买卖一次&#xff0c;可以买卖两次&a…...

DS:顺序表的实现(超详细!!)

创作不易&#xff0c;友友们给个三连呗&#xff01; 本文为博主在DS学习阶段的第一篇博客&#xff0c;所以会介绍一下数据结构&#xff0c;并在最后学习对顺序表的实现&#xff0c;在友友们学习数据结构之前&#xff0c;一定要对三个部分的知识——指针、结构体、动态内存管理的…...

用flinkcdc debezium来捕获数据库的删除内容

我在用flinkcdc把数据从sqlserver写到doris 正常情况下sqlserver有删除数据&#xff0c;doris是能捕获到并很快同步删除的。 但是我现在情况是doris做为数仓&#xff0c;数据写到ods&#xff0c;ods的数据还会通过flink计算后写入dwd层&#xff0c;所以此时ods的数据是删除了…...

mariadb数据库从入门到精通

mariadb数据库的安装以及安全初始化 mariadb数据库的安装以及安全初始化 mariadb数据库的安装以及安全初始化一、实验前提二、mariadb数据库的安装三、mariadb数据库安全初始化3.1 设定数据库基本的安全初始化3.2关闭对外开放端口 系列文章目录一、查看数据库二、进入库并且查看…...

LabVIEW探测器CAN总线系统

介绍了一个基于FPGA和LabVIEW的CAN总线通信系统&#xff0c;该系统专为与各单机进行系统联调测试而设计。通过设计FPGA的CAN总线功能模块和USB功能模块&#xff0c;以及利用LabVIEW开发的上位机程序&#xff0c;系统成功实现了CAN总线信息的收发、存储、解析及显示功能。测试结…...

侧输出流(Side Output)

侧输出流&#xff08;Side Output&#xff09;是处理函数中的一个重要功能&#xff0c;允许我们将自定义的数据发送到侧输出流中进行处理或输出。通过将数据发送到侧输出流&#xff0c;我们可以将不同的数据流进行分离&#xff0c;以便进行不同的处理和操作。 在处理函数中&…...

Vue 动态组件与异步组件:深入理解与全面应用

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 动态组件实现原理&#xff1a;用法示例&#xff1a; 2. 异步组件实现原理&#xff1a;用法示例&#xff1a; 3. 异步组件的高级应用a. 异步组件的命名&#xff1a;b. 异步组件的加载状态管理&#xff1a; ⭐ 写在最后 ⭐ 专栏简…...

Zephyr 源码调试

背景 调试环境对于学习源码非常重要&#xff0c;但嵌入式系统的调试环境搭建稍微有点复杂&#xff0c;需要的条件略多。本文章介绍如何在 Zephyr 提供的 qemu 上调试 Zephyr 源码&#xff0c;为后续分析 Zephyr OS 相关原理做铺垫。 环境 我的开发环境为 wsl ubuntu&#xf…...

数学建模绘图

注意&#xff1a;本文章旨在记录观看B站UP数模加油站之后的笔记文章&#xff0c;无任何商业用途~~ 必备网站 以下网站我都试过&#xff0c;可以正常访问 配色&#xff08;取色&#xff09;网站&#xff1a; Color Palettes Generator and Color Gradient Tool Python&#x…...

代码随想录算法训练营第十天 | 239.滑动窗口最大值、347.前K个高频元素

代码随想录算法训练营第十天 | 239.滑动窗口最大值、347.前K个高频元素 文章目录 代码随想录算法训练营第十天 | 239.滑动窗口最大值、347.前K个高频元素1 LeetCode 239.滑动窗口最大值2 LeetCode 347.前K个高频元素 1 LeetCode 239.滑动窗口最大值 题目链接&#xff1a;https…...

【Godot4自学手册】第五节用GDScript语言让主人公动起来

GDScript 是Godot自带的编程语言&#xff0c;用于编写游戏逻辑&#xff0c;它是一种高级面向对象的指令式编程语言&#xff0c;使用渐进类型&#xff0c;专为 Godot 构建。在这一小节里&#xff0c;我将自学用GDScript语言控制主人公的行走和攻击。 一、给Player节点添加GDScr…...

被问到Tomcat是什么该怎么回答?他还有一个好帮手JDK你知道吗?

目录 Tomcat简介&#xff1a; 使用建议: Tomcat好帮手---JDK Tomcat和JDK的关系 安装JDK 1.打开浏览器输入网址 Oracle | Cloud Applications and Cloud Platform 进入Oracle官网 2、在官网首页菜单栏&#xff0c;点击产品&#xff0c;在硬件和软件中找到Java&#xff0…...

【Web前端实操11】定位实操_照片墙(无序摆放)

设置一个板块&#xff0c;将照片随意无序摆放在墙上&#xff0c;从而形成照片墙。本来效果应该是很唯美好看的&#xff0c;就像这种&#xff0c;但是奈何本人手太笨&#xff0c;只好设置能达到照片墙的效果就可。 代码如下&#xff1a; <!DOCTYPE html> <html lang&…...

图像处理------调整色调

什么是色调&#xff1f; 色调&#xff0c;在画面上表现思想、感情所使用的色彩和色彩的浓淡。分为暖色调和冷色调。 from cv2 import destroyAllWindows, imread, imshow, waitKey#创建棕褐色色调 def make_sepia(img, factor: int):pixel_h, pixel_v img.shape[0], img.shap…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...

python读取SQLite表个并生成pdf文件

代码用于创建含50列的SQLite数据库并插入500行随机浮点数据&#xff0c;随后读取数据&#xff0c;通过ReportLab生成横向PDF表格&#xff0c;包含格式化&#xff08;两位小数&#xff09;及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...