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

NFC 碰一碰发视频源码搭建全流程详解,支持OEM

在移动互联网时代,便捷的数据传输方式备受关注。NFC(近场通信)技术以其操作简单、连接迅速的特点,为数据交互提供了新的可能。通过搭建 NFC 碰一碰发视频功能,用户只需将设备轻轻靠近,就能快速完成视频传输。本文将详细介绍该功能的源码搭建流程,涵盖技术原理、开发环境准备、核心代码实现以及测试优化等内容,助力开发者掌握这一实用技术。

一、NFC 技术原理与开发环境

1.1 NFC 技术基础

NFC 是一种短距离高频无线通信技术,工作频率为 13.56MHz,通信距离通常在 10 厘米以内 。它支持三种工作模式:

  • 卡模拟模式:设备模拟成一张 NFC 卡,可用于支付、门禁等场景。
  • 读写模式:设备作为读写器,读取 NFC 标签中的数据。
  • 点对点模式:实现两个 NFC 设备之间的数据交换,这也是实现碰一碰发视频的核心模式。在点对点模式下,NFC 设备通过调制和解调射频信号,将数据编码后在设备间传输。

1.2 开发环境准备

  • 硬件设备:开发 NFC 碰一碰发视频功能,需要配备支持 NFC 功能的移动设备,如大多数中高端 Android 手机、部分新款 iPhone。同时,可准备 NFC 测试标签用于调试。
  • 开发工具
    • Android 开发:使用 Android Studio 作为集成开发环境,需安装 Android SDK(软件开发工具包),其中包含 NFC 开发所需的 API 和工具。
    • iOS 开发:通过 Xcode 进行开发,iOS 系统对 NFC 功能的开放程度有限,主要用于读取 NFC 标签数据,若要实现设备间数据传输,需借助外部配件或特定技术。
  • 开发语言与框架:Android 开发主要使用 Java 或 Kotlin 语言;iOS 开发使用 Swift 或 Objective-C 语言。此外,了解 XML(用于 Android 布局)、Storyboard(用于 iOS 界面设计)等知识有助于构建用户交互界面。

二、核心功能模块代码实现

2.1 Android 端 NFC 功能实现

  1. 权限配置:在AndroidManifest.xml文件中添加 NFC 权限:
 

<uses-permission android:name="android.permission.NFC" />

<uses-feature android:name="android.hardware.nfc" android:required="true" />

  1. 初始化 NFC 适配器:在 Activity 中获取 NFC 适配器实例,并检查设备是否支持 NFC:
 

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);

if (nfcAdapter == null) {

// 设备不支持NFC,提示用户

Toast.makeText(this, "设备不支持NFC", Toast.LENGTH_SHORT).show();

return;

}

  1. 处理 NDEF 消息:创建 PendingIntent 和 IntentFilter,监听ACTION_NDEF_DISCOVERED事件,当两个 NFC 设备靠近时,获取并处理 NDEF(NFC Data Exchange Format)消息。NDEF 消息用于在 NFC 设备间传输数据,我们可以将视频文件路径或视频数据封装在 NDEF 消息中。
 

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

IntentFilter[] intentFilters = new IntentFilter[]{

new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED)

};

String[][] techLists = new String[][]{

new String[]{Ndef.class.getName()}

};

nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilters, techLists);

@Override

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {

NdefMessage ndefMessage = intent.getParcelableExtra(NfcAdapter.EXTRA_NDEF_MESSAGE);

for (NdefRecord record : ndefMessage.getRecords()) {

if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(record.getType(), NdefRecord.RTD_TEXT)) {

try {

String text = new String(record.getPayload(), "UTF-8");

// 处理接收到的文本数据,如解析视频路径

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

}

}

}

  1. 发送视频数据:将视频文件读取为字节数组,并封装成 NDEF 消息进行发送。以下是将视频文件路径封装为 NDEF 文本记录的示例代码:
 

private NdefMessage createTextRecord(String content) {

byte[] textBytes = content.getBytes();

NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "text/plain".getBytes(), new byte[] {}, textBytes);

return new NdefMessage(new NdefRecord[]{record});

}

// 发送NDEF消息

private void sendVideoPath(String videoPath) {

NdefMessage ndefMessage = createTextRecord(videoPath);

if (nfcAdapter.isEnabled()) {

try {

nfcAdapter.transceive(ndefMessage);

} catch (IOException e) {

e.printStackTrace();

}

}

}

2.2 视频数据处理与传输

  1. 视频读取与分割:在发送端,使用FileInputStream读取视频文件,并将其分割成合适大小的数据包。为了确保数据传输的准确性,每个数据包可添加序号和校验信息。
 

File videoFile = new File("path/to/video.mp4");

FileInputStream fis = new FileInputStream(videoFile);

byte[] buffer = new byte[1024];

int length;

int packetNumber = 0;

while ((length = fis.read(buffer)) > 0) {

// 为数据包添加序号和校验信息

byte[] packet = addPacketInfo(buffer, length, packetNumber);

// 发送数据包

sendPacket(packet);

packetNumber++;

}

fis.close();

  1. 数据接收与重组:在接收端,按顺序接收数据包,根据序号和校验信息判断数据的完整性和正确性。若发现数据包丢失或错误,请求发送端重传。将正确接收的数据包写入新的视频文件,完成视频的接收。
 

FileOutputStream fos = new FileOutputStream("path/to/received_video.mp4");

int bytesRead;

while ((bytesRead = receivePacket(buffer)) > 0) {

// 校验数据包

if (isPacketValid(buffer, bytesRead)) {

// 提取有效数据

byte[] validData = extractValidData(buffer, bytesRead);

fos.write(validData);

} else {

// 请求重传

requestRetransmission();

}

}

fos.close();

2.3 用户界面设计

使用 XML 布局文件设计 Android 应用界面,添加触发 NFC 传输的按钮、显示传输进度的进度条以及提示信息的文本框。通过 Java 或 Kotlin 代码为按钮绑定点击事件,在事件处理函数中调用 NFC 发送视频的相关方法。

 

<Button

android:id="@+id/send_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="碰一碰发送视频" />

<ProgressBar

android:id="@+id/progress_bar"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

<TextView

android:id="@+id/info_text"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

 

Button sendButton = findViewById(R.id.send_button);

sendButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String videoPath = "path/to/video.mp4";

sendVideoPath(videoPath);

}

});

三、测试与优化

3.1 功能测试

  • NFC 连接测试:在不同的 Android 设备间进行测试,检查 NFC 是否能够正常连接,确保ACTION_NDEF_DISCOVERED事件能够正确触发。
  • 视频传输测试:传输不同大小、格式的视频文件,验证视频数据的完整性,检查接收后的视频是否能够正常播放。
  • 界面交互测试:测试按钮点击、进度条更新、提示信息显示等界面交互功能是否正常。

3.2 性能优化

  1. 数据压缩:在发送视频前,使用 FFmpeg 等工具对视频进行压缩处理,降低视频文件大小,减少传输时间和数据量。
  1. 错误处理优化:完善数据包的校验和重传机制,提高数据传输的可靠性,减少因数据错误导致的传输失败。
  1. 资源管理优化:合理管理文件流、缓冲区等资源,及时关闭不再使用的资源,避免内存泄漏和资源浪费。

3.3 兼容性测试

在不同品牌、型号、系统版本的 Android 设备上进行兼容性测试,检查 NFC 功能是否正常工作,界面显示是否正常。针对发现的兼容性问题,调整代码或配置参数进行适配。

四、总结

通过上述步骤,我们完成了 NFC 碰一碰发视频功能的源码搭建。从 NFC 技术原理到核心功能实现,再到测试优化,每个环节都需要细致处理。随着 NFC 技术的不断发展和普及,未来该功能还可与更多场景结合,如社交分享、商业推广等。希望本文能为开发者在 NFC 应用开发领域提供有益的参考,激发更多创新应用的诞生。

上述文章完整呈现了 NFC 碰一碰发视频源码搭建的技术细节。若你在开发中遇到连接失败、数据传输异常等问题,或有功能拓展需求,欢迎随时与我交流探讨。

相关文章:

NFC 碰一碰发视频源码搭建全流程详解,支持OEM

在移动互联网时代&#xff0c;便捷的数据传输方式备受关注。NFC&#xff08;近场通信&#xff09;技术以其操作简单、连接迅速的特点&#xff0c;为数据交互提供了新的可能。通过搭建 NFC 碰一碰发视频功能&#xff0c;用户只需将设备轻轻靠近&#xff0c;就能快速完成视频传输…...

vue入门:路由 router

文章目录 介绍安装配置路由模式嵌套路由路由传参编程式导航路由懒加载 底层原理 介绍 vue2 vue router API vue3 vue router API Vue Router 是 Vue.js 的官方路由管理器&#xff0c;它允许你通过不同的 URL 显示不同的组件&#xff0c;从而实现单页面应用&#xff08;SPA&a…...

运营商二要素认证 API 接口具有哪些的好处?

目录 一、提高认证准确性 1.数据真实性可靠 2.实时验证效率高 3.双重验证更精准 4.多场景适用性强 5.动态更新数据准 二、增强安全性 1.防止身份冒用 2.抵御欺诈行为 3.保障数据安全 4.强化业务安全 5.支持安全审计与追溯 三、提升用户体验 1.操作简便快捷 2.认…...

从GPT到Gemini 大模型进化史

从GPT到Gemini&#xff1a;大模型进化史 在过去的几年里&#xff0c;人工智能领域经历了翻天覆地的变化&#xff0c;其中最引人注目的莫过于大规模语言模型的发展。从最初的GPT系列到最近的Gemini&#xff0c;这些模型不仅在技术上取得了重大突破&#xff0c;还在实际应用中展…...

大模型时代下全场景数据消费平台的智能BI—Quick BI深度解析

一、前言 在数字化转型浪潮中&#xff0c;BI工具已成为企业数据驱动决策的核心引擎。Quick BI作为阿里云旗下的全场景数据消费平台&#xff0c;以其"让业务决策触手可及"的理念在市场中占据一席之地。通过Quick BI可以让企业的数据资产快速的流动起来&#xff0c;通…...

高防ip的原理

高防IP&#xff08;高防御IP地址&#xff09;是一种专门用于抵御大规模网络攻击的防护服务&#xff0c;其核心原理是通过​​流量清洗、协议分析与智能调度​​等技术&#xff0c;将恶意流量与正常业务流量分离&#xff0c;保障目标服务器或应用的可用性。以下是其核心技术原理…...

微服务4--服务网关

网关 在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务&#xff0c;那么作为客户端要如何去调用 这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。 这样的架构&#xff0c;会存在着诸…...

容器docker入门学习

这里写目录标题 容器容器的软件厂商 dockerdocker引擎 虚拟化虚拟化技术 docker安装详解1、安装检查2、安装yum相关的工具3、安装docker-ce软件4、查看docker版本5、启动docker服务6、设置docker开机启动7、查看有哪些docker容器运行进程8、查看容器里有哪些镜像9、下载nginx软…...

Flink调优面试题及参考答案20道

1. 如何优化Flink的Checkpoint机制? 答案: 增大Checkpoint间隔:减少对作业吞吐量的影响(如从1分钟调整为5分钟)。 使用增量Checkpoint(RocksDB状态后端):仅上传变化的文件,降低IO压力。 调整超时时间:checkpointTimeout避免因短暂反压导致失败。 对齐优化:使用非对…...

【音视频】MP4解封装

一、概述 实现了读取mp4文件&#xff0c;提取出h264和aac文件&#xff0c;可以直接播放 二、实现过程 准备文件 在build路径下添加mp4文件 同时&#xff0c;添加main函数参数&#xff0c;表示输入文件和输出文件 打开文件 打开输入文件&#xff0c;初始化格式上下文 char…...

全球6G大会 | 紫光展锐用“芯”推动空天地一体创新纪元

近日&#xff0c;全球6G技术与产业生态大会&#xff08;简称“全球6G技术大会”&#xff09;在南京召开。紫光展锐应邀出席“空天地一体化与数字低空”平行论坛&#xff0c;并从6G通信、感知、定位等多方面分享了紫光展锐在6G前沿科技领域的创新理念及在空天地一体化技术方面的…...

C++学习:六个月从基础到就业——面向对象编程:虚函数与抽象类

C学习&#xff1a;六个月从基础到就业——面向对象编程&#xff1a;虚函数与抽象类 本文是我C学习之旅系列的第十四篇技术文章&#xff0c;主要探讨C中的虚函数与抽象类&#xff0c;这是实现多态性的核心机制。查看完整系列目录了解更多内容。 引言 多态性是面向对象编程的三大…...

git分支操作

一、git branch&#xff1a;分支管理 1. 查看分支 git branch # 查看本地分支&#xff08;* 表示当前分支&#xff09; git branch -a # 查看所有分支&#xff08;本地远程&#xff09; git branch -vv # 查看分支跟踪关系 2. 创建/删除分支…...

IDEA 中 Scala 项目远程连接虚拟机 Spark 环境

IDEA 中 Scala 项目远程连接虚拟机 Spark 环境 1. 环境准备 确保虚拟机 Spark 环境正常运行 虚拟机中已安装并启动 Spark记录虚拟机的 IP 地址和 Spark 端口&#xff08;默认 7077&#xff09;确保虚拟机防火墙允许相关端口访问 本地 IDEA 环境配置 安装 Scala 插件安装 Spar…...

2. 判断列表元素的单一性

【问题描述】编写程序&#xff0c;判断一个列表中的各个元素如果相同(例如[2,2,2,2,2]),则输出True&#xff0c;不相同(例如[1,2,3,2,3])则输出False。 【输入形式】ainput() 【输出形式】用print()函数 【样例输入】 [2,2,2,2,2] 【样例输出】 True 【样例输入】 [1,2,…...

King3399(ubuntu文件系统)GDB/GDBServer调试配置

0 引言 最近在用king3399进行驱动开发&#xff0c;即使是一些简单的外设也不免反复修改与烧录&#xff0c;若仅仅通过printk这种方法对程序进行打印调试&#xff0c;其过程也是相当复杂&#xff0c;因此想通过GDB/GDBServer的方式进行调试&#xff0c;本文主要是记录配置过程的…...

机器学习简介

目录 机器学习简介机器学习的大致分类监督学习 (Supervised learning)RegressionClassification / Predict categories 无监督学习 (Unsupervised learning)Clustering algorithmAnomaly DetectionDimensionality Reduction对比总结 强化学习 (Reinforcement learning)强化学习…...

k8s调度器:如何控制Pod的分布

引言&#xff1a;从“随机分配”到“智能调度” 想象你的Kubernetes集群是一个繁忙的物流中心&#xff0c;节点&#xff08;Node&#xff09;是仓库&#xff0c;Pod是货物。 默认调度器 就像一名普通分拣员&#xff0c;简单地将货物塞进最近的仓库&#xff0c;可能导致某些仓…...

机器学习在催化剂设计中的应用理论加实操

背景介绍​​ 数据智能驱动&#xff0c;催化理性设计新纪元​​ 催化材料设计是能源转化、化工合成及环境治理等领域的核心挑战。传统催化研究主要依赖密度泛函理论(DFT)计算与实验试错法&#xff0c;通过量子力学模拟揭示活性位点电子结构&#xff0c;结合高通量实验筛选候选…...

Spring Cloud Alibaba微服务-微服务介绍和搭建

1. 课程介绍 单体服务中有订单&#xff0c;用户&#xff0c;库存&#xff0c; 两个缺陷&#xff1a; a. 是以应用的维度进行负载均衡&#xff0c;资源占用大 b. 当其中一个模块宕机&#xff0c;整个应用就不能用了&#xff1b; nacos&#xff1b;ribbon&#xff0c;loadBa…...

量子通信应用:量子安全物联网(三)协议融合

第一部分:引言与概述 1.1 量子安全物联网的背景与必要性 随着物联网(IoT)设备的爆炸式增长(预计2030年全球连接设备超750亿台),传统安全机制(如RSA、ECC加密)正面临量子计算的颠覆性威胁。量子计算机的Shor算法可在多项式时间内破解非对称加密体系,而Grover算法则对…...

JUC学习(1) 线程和进程

2.线程和进程 线程&#xff0c;进程进程&#xff1a;一个程序。 一个进程往往可以包含多个线程&#xff0c;至少包含一个&#xff01; Java默认有2个线程 mainGC 对于Java而言&#xff0c;三种开启线程的方式 ThreadRunnableCallable Java真的可以开启线程吗 不可以&am…...

Java基础系列-LinkedList源码解析

文章目录 简介LinkedList 插入和删除元素的时间复杂度&#xff1f;LinkedList 为什么不能实现 RandomAccess 接口&#xff1f; LinkedList 源码分析Node 定义初始化获取元素插入元素删除元素遍历链表 简介 LinkedList 是一个基于双向链表实现的集合类&#xff0c;经常被拿来和…...

pycharm无法识别到本地python的conda环境解决方法

问题一 现象描述&#xff1a; 本地已经安装了conda&#xff0c;但在pycharm中选择conda环境却识别不到&#xff0c; 解决方法&#xff1a;手动输入conda path&#xff0c;点击R eload environments基本就能修复&#xff0c;比如我的路径如下 /Users/test/conda/miniconda3/b…...

【机器人创新创业应需明确产品定位与方向指南】

机器人领域的创新创业, 需要对公司和产品的定位和生态进行深入思考, 明确其定位与发展目标, 明确产品在是为G、为B还是为C进行服务。 本文引用地址&#xff1a;https://www.eepw.com.cn/article/202504/469401.htm 超前的、探索性的创新技术一般是面向G端, 而不是面向B端或者C…...

《似锦》:画饼之—你画给我我画给你

甄珩&#xff0c;看似刚正不阿&#xff0c;正得发邪&#xff0c;一板一眼的严肃角色 可是每次余七和甄珩在一起&#xff0c;就是一部行走的喜剧&#xff0c;众网友称他们为“甄儿八锦” 《似锦》剧集精彩片段&#xff1a;甄珩余七爆笑修罗场&#xff08;四&#xff09; 谁懂这…...

鸿蒙系统开发中路由使用详解

鸿蒙系统提供了两种主要的路由机制&#xff1a;传统的Router模块和组件化的Navigation容器。下面我将详细介绍这两种路由方式的使用方法、区别以及实际应用示例。 一、Router模块基础使用 Router是鸿蒙早期提供的页面路由模块&#xff0c;通过URL实现页面跳转和数据传递。 1…...

拖拉拽效果加点击事件

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>自由拖拽点击元素</title><style>body {margin: 0;height: 100vh;display: flex;justify-content: center;align-items: center;backgr…...

Ubuntu利用docker搭建Java相关环境记录(二)

Ubuntu利用docker搭建Java相关环境记录&#xff08;二&#xff09; 接上篇&#xff1a;Ubuntu利用docker搭建Java相关环境记录&#xff08;一&#xff09; 启动Docker 1. 查看Docker容器 已启动的容器 docker ps所有容器 docker ps -a本人很懒并不想一直敲命令操作&#…...

2025华中杯B题——AI实现

以下内容全文由以下网站AI实现&#xff0c;内容和代码仅供参考 如需实现自己的需求和目标&#xff0c;请使用网站自行调试。 参考写作 1. 共享单车数量与分布估算 问题分析 本题要求根据校园共享单车在各停车点的不同时段统计数据&#xff0c;估算校园内共享单车总量&#…...

【软考-系统架构设计师】OSI体系解析

一、OSI体系的核心定义 OSI&#xff08;Open System Interconnection&#xff09;模型是国际标准化组织&#xff08;ISO&#xff09;于1984年提出的网络通信分层框架&#xff0c;旨在解决异构网络系统间的兼容性问题。它将复杂的网络通信过程划分为七层&#xff0c;每层独立完…...

用手机也能打《无畏契约》?登录ToDesk即可开玩

《无畏契约》火到出圈&#xff01;但手机玩家只能干瞪眼&#xff1f; 作为拳头游戏继《英雄联盟》后的又一爆款&#xff0c;《无畏契约》凭借快节奏的战术对抗和全球化的地图设计&#xff08;比如东京“霓虹町”、百慕大“微风岛屿”&#xff09;&#xff0c;迅速成为电竞圈的顶…...

jmeter提取返回值到文件

前言 如何将请求的返回值&#xff0c;保存到本地文件&#xff0c;有具体以下3种方式。 保存到响应文件BeanShell 取样器BeanShell 后置处理程序 一、监听器–保存响应到文件 1、提取全部返回值&#xff0c;&#xff08;.json&#xff09;格式 2、保存到响应文件 添加----…...

iPaaS集成平台在电商行业的五大核心应用场景

在电商行业“多平台运营、多系统并行”的竞争格局下&#xff0c;订单激增、数据割裂、跨系统协作低效等问题成为企业增长的隐形阻碍。谷云科技作为国内领先的iPaaS&#xff08;集成平台即服务&#xff09;技术厂商&#xff0c;通过低代码、高扩展的集成能力&#xff0c;帮助电商…...

猪行为视频数据集

猪行为数据集包含 23 天(超过 6 周)的日间猪行为视频,这些视频由近乎架空的摄像机拍摄。视频已配准颜色和深度信息。数据以每秒 6 帧的速度捕获,并以 1800 帧(5 分钟)为一批次进行存储。大多数帧显示 8 头猪。 这里可以看到颜色和深度图像的示例: 喂食器位于图片底部中…...

在conda环境下使用pip安装库无法import

安装seleniumwire包&#xff0c;conda环境没有&#xff0c;pip之后安装不到当前conda环境 网上的方法都试过了&#xff0c;包括强制安装等 python -m pip install --upgrade --force-reinstall selenium-wire 最后定位应该是没有安装到当前conda的环境下&#xff0c;使用list…...

[net 6] udp_chat_server基于udp的简单聊天室(多线程的服务器与业务相分离)

目录 1. 网络聊天室的意义 2. 网络聊天室了解 2.1. 网络聊天室模块分析 2.2. 目标 3. 基本框架 3.1. 文件基本框架 3.2. 设计回调函数解耦 4. Route.hpp 模块(消息转发) 4.1. 头文件包含 4.2. 基本类框架 4.3. Route::Forward() 转发 4.3.1. 函数头设计 4.3.2. 维护…...

驱动-自旋锁

前面原子操作进行了讲解&#xff0c; 并使用原子整形操作对并发与竞争实验进行了改进&#xff0c;但是原子操作只能对整形变量或者位进行保护&#xff0c; 而对于结构体或者其他类型的共享资源&#xff0c; 原子操作就力不从心了&#xff0c; 这时候就轮到自旋锁的出场了。 两个…...

TDengine 存储引擎剖析:数据文件与索引设计(二)

TDengine 索引设计 索引设计关键特性 TDengine 的索引设计采用了多种技术和策略&#xff0c;以满足时序数据高效存储和快速查询的需求&#xff0c;具有以下关键特性&#xff1a; 多级时间戳压缩索引&#xff1a;TDengine 使用了时间戳压缩索引技术&#xff0c;能够有效减少索…...

基于Python的医疗质量管理指标智能提取系统【2025代码版】

系统概述 本系统旨在帮助医疗质量管理部从医院信息系统(HIS)中智能提取《2025年国家医疗质量安全改进目标》中的关键指标数据。系统采用Python编程语言,结合现代数据处理库,实现高效、准确的数据提取与分析功能。 import json import logging import logging.handlers impo…...

中介者模式(Mediator Pattern)

中介者模式(Mediator Pattern)是一种行为型设计模式。它通过引入一个中介者对象,来封装一系列对象之间的交互,使这些对象之间不再直接相互引用和通信,而是通过中介者进行间接通信,从而降低对象之间的耦合度,提高系统的可维护性和可扩展性。 一、基础 1. 意图 核心目的…...

Hbuilder 上的水印相机实现方案 (vue3 + vite + hbuilder)

效果 思路 通过 live-pusher 这个视频推流的组件来获取摄像头拿到视频的一帧图片之后&#xff0c;跳转到正常的 vue 页面&#xff0c;通过 canvas 来处理图片水印 源码 live-pusher 这个组件必须是 nvue 的 至于什么是 nvue&#xff0c;看这个官方文档吧 https://uniapp.dcl…...

聊聊Spring AI Alibaba的PdfTablesParser

序 本文主要研究一下Spring AI Alibaba的PdfTablesParser PdfTablesParser community/document-parsers/spring-ai-alibaba-starter-document-parser-pdf-tables/src/main/java/com/alibaba/cloud/ai/parser/pdf/tables/PdfTablesParser.java public class PdfTablesParser…...

二分查找-LeetCode

题目 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target&#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: …...

StarRocks Community Monthly Newsletter (Mar)

版本动态 3.4.1 版本更新 核心功能升级 数据安全与权限管控 支持「安全视图」功能&#xff0c;严格管控视图查询权限 MySQL协议连接支持SSL认证&#xff0c;保障数据传输安全 存算分离架构增强 支持自动创建Snapshot&#xff08;集群恢复更便捷&#xff09; Storage Volu…...

STM32+dht11+rc522+jq8400的简单使用

1.dht11的使用 硬件&#xff1a;3v3&#xff0c;gnd&#xff0c;data数据线接一个gpio&#xff0c;三根线即可 软件&#xff1a; ①dht11.c #include "dht11.h" #include "delay.h" #include "stdbool.h"static STRUCT_DHT11_TYPEDEF dht11;…...

mpstat指令介绍

文章目录 1. 功能介绍2. 语法介绍3. 应用场景4. 实际举例 1. 功能介绍 mpstat 英文全称( Multi-Processor Statistics)&#xff0c;多处理器统计信息的含义。 下面大致说一下功能作用&#xff1a; 多核性能监控 可实时监控每个 CPU 核心的利用率、中断频率、上下文切换等指标&…...

网络层IP协议知识大梳理

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的IP协议笔记吧~ 自己写自己的八股&#xff01;让未来的自己看懂&#xff01; &#xff08;全文手敲&#xff0c;受益良多&#xff09; 网路基础3 网路层 TCP并没有把数据发到网路…...

Linux-codec

codec原理图 codec接口 ①音频输入接口&#xff0c;连接mic ②音频输出接口&#xff0c;连接speaker ③sai/i2s接口&#xff0c;连接soc&#xff0c;soc和codec互发音频数据 ④i2c接口&#xff0c;连接soc&#xff0c;soc配置codecsai音频接口 MCLK&#xff1a;主时钟&#x…...

HTTP协议与web服务器

HTTP协议与web服务器 目录 一、浏览器与服务器通信过程 1.1 域名解析与连接建立 1.2 数据交互 1.3 连接管理 二、HTTP请求报头 2.1 请求行 2.2 请求报头 2.3 空行 2.4 请求体 三、HTTP应答报头 3.1 http应答报文头部信息 1. 状态行 2. 服务器名称 3. 数据长度 4…...