NFC 碰一碰发视频源码搭建,支持OEM
一、引言
NFC(Near Field Communication)近场通信技术,以其便捷、快速的数据交互特性,正广泛应用于各个领域。其中,NFC 碰一碰发视频这一应用场景,为用户带来了新颖且高效的视频分享体验。想象一下,只需轻轻一碰,就能将精彩视频传输到对方设备,无需繁琐的蓝牙配对或网络共享设置。本文将深入探讨如何搭建实现 NFC 碰一碰发视频功能的源码。
二、NFC 技术基础
(一)NFC 工作原理
NFC 基于射频识别(RFID)技术,通过磁场感应进行通信。当两个支持 NFC 的设备靠近时,其中一个设备作为发起方,产生射频场,另一个设备作为目标方,通过感应该射频场获取能量并进行数据交互。其工作频率通常为 13.56MHz,通信距离较短,一般在几厘米以内,这确保了数据传输的安全性和隐私性。
(二)NFC 的三种工作模式
- 卡模拟模式:设备模拟成一张智能卡,可用于支付、门禁等场景。例如,手机模拟公交卡进行刷卡乘车。
- 读写器模式:设备作为读写器,读取 NFC 标签或其他设备中的数据。在我们的 NFC 碰一碰发视频应用中,发送方设备可读取存储视频信息的 NFC 标签。
- 点对点模式:两个 NFC 设备直接进行数据交换,本文的 NFC 碰一碰发视频正是基于此模式实现。
三、开发环境搭建
(一)硬件准备
- 支持 NFC 的设备:如 Android 手机(大部分中高端 Android 手机都支持 NFC 功能)。
- NFC 标签(可选):如果需要预先存储视频相关信息,可准备 NFC 标签。常见的 NFC 标签有 NTAG213、NTAG215 等型号。
(二)软件环境
- Android Studio:作为 Android 开发的主要集成开发环境(IDE),用于编写、调试和构建 Android 应用程序。
- Android SDK:软件开发工具包,包含了开发 Android 应用所需的各种库、工具和 API。确保安装了与目标 Android 版本对应的 SDK。
四、源码实现步骤
(一)创建 Android 项目
打开 Android Studio,创建一个新的 Android 项目。在项目创建向导中,选择合适的项目模板(如 Empty Activity),并配置项目名称、包名等基本信息。
(二)添加 NFC 权限
在项目的 AndroidManifest.xml 文件中,添加 NFC 权限声明,以确保应用能够访问设备的 NFC 功能:
<uses-permission android:name="android.permission.NFC" />
同时,为了确保应用在设备支持 NFC 功能时才显示相关界面或功能,可添加如下代码以声明对 NFC 的硬件支持:
<uses-feature android:name="android.hardware.nfc" android:required="true" />
(三)初始化 NFC 功能
在 Android 应用的主 Activity 类中,初始化 NFC 功能。首先,获取 NFC 管理器实例:
NfcManager nfcManager = (NfcManager) getSystemService(Context.NFC_SERVICE);
NfcAdapter nfcAdapter = nfcManager.getDefaultAdapter();
然后,检查设备是否支持 NFC 功能:
if (nfcAdapter == null) {
// 设备不支持NFC,提示用户并做相应处理
Toast.makeText(this, "设备不支持NFC", Toast.LENGTH_SHORT).show();
finish();
}
(四)处理 NFC 意图
当两个 NFC 设备靠近并触发数据交换时,系统会发送一个 NFC 意图(Intent)。在 Activity 的 onCreate 方法中,注册一个 PendingIntent,用于处理 NFC 意图:
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);
接下来,在 onNewIntent 方法中处理接收到的 NFC 意图:
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
NdefMessage[] msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
// 处理接收到的NDEF消息,提取视频相关信息
processNdefMessages(msgs);
}
}
}
(五)构建和发送视频数据
要发送视频,首先需要将视频文件转换为适合 NFC 传输的数据格式。由于 NFC 传输的数据量有限,对于较大的视频文件,可先将视频的相关信息(如视频链接、视频文件的哈希值等)进行封装成 NDEF 消息。
NDEF(NFC Data Exchange Format)是 NFC 设备之间交换数据的标准格式。创建一个包含视频信息的 NDEF 消息示例代码如下:
try {
byte[] videoUri = "http://example.com/video.mp4".getBytes("UTF-8");
NdefRecord uriRecord = NdefRecord.createUri(new String(videoUri));
NdefMessage ndefMessage = new NdefMessage(new NdefRecord[] { uriRecord });
// 将NDEF消息写入NFC标签或通过NFC发送给其他设备
writeNdefMessageToTag(ndefMessage);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
在 writeNdefMessageToTag 方法中,实现将 NDEF 消息写入 NFC 标签或发送给其他 NFC 设备的逻辑。如果是发送给其他设备,可通过 NfcAdapter 的 transceive 方法实现:
private void writeNdefMessageToTag(NdefMessage ndefMessage) {
Tag tag = getTagFromIntent(intent); // 从意图中获取目标NFC标签或设备的Tag对象
try {
Ndef ndef = Ndef.get(tag);
if (ndef != null) {
ndef.connect();
ndef.writeNdefMessage(ndefMessage);
ndef.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
(六)接收和处理视频数据
在接收方设备的 processNdefMessages 方法中,对接收到的 NDEF 消息进行解析,提取出视频相关信息。如果接收到的是视频链接,可通过 Android 的网络请求库(如 OkHttp)下载视频;如果是视频文件的哈希值等信息,可根据具体业务逻辑进行相应处理。
private void processNdefMessages(NdefMessage[] msgs) {
for (NdefMessage msg : msgs) {
NdefRecord[] records = msg.getRecords();
for (NdefRecord record : records) {
if (record.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(record.getType(), NdefRecord.RTD_URI)) {
String videoUri = new String(record.getPayload(), Charset.forName("UTF-8"));
// 处理视频链接,例如启动视频下载或播放
downloadOrPlayVideo(videoUri);
}
}
}
}
五、优化与扩展
(一)性能优化
- 数据压缩:对于较大的视频相关数据,在发送前进行适当压缩,以减少 NFC 传输的数据量,提高传输速度。
- 异步处理:在处理 NFC 数据读写、视频下载等耗时操作时,使用异步任务(如 Android 的 AsyncTask 或线程池),避免阻塞主线程,保证应用的流畅性。
(二)功能扩展
- 支持多种视频格式:在解析和处理视频数据时,增加对多种视频格式的支持,确保不同格式的视频都能正确传输和播放。
- 加密与安全:为了保护视频数据的安全性,可在传输过程中对数据进行加密,接收方设备再进行解密。同时,对视频文件的来源和访问权限进行管理,防止非法访问和传播。
六、总结
通过以上步骤,我们成功搭建了 NFC 碰一碰发视频的源码。从 NFC 技术原理的理解,到开发环境的搭建,再到源码的具体实现和优化扩展,每一步都为实现这一便捷的视频分享功能奠定了基础。NFC 碰一碰发视频不仅为用户提供了独特的交互体验,也为开发者探索 NFC 技术在更多领域的应用提供了思路。随着 NFC 技术的不断发展和普及,相信会有更多创新的应用场景基于此诞生。
相关文章:
NFC 碰一碰发视频源码搭建,支持OEM
一、引言 NFC(Near Field Communication)近场通信技术,以其便捷、快速的数据交互特性,正广泛应用于各个领域。其中,NFC 碰一碰发视频这一应用场景,为用户带来了新颖且高效的视频分享体验。想象一下&#x…...
浅谈鸿蒙跨平台开发框架ArkUI-X
之前写过使用uniapp的跨平台开发鸿蒙项目,今天分享一下开发体验更友好的跨平台开发框架ArkUI-X。 ArkUI-X看起来像是鸿蒙官方的框架,在DevEco中就可以安装和使用,而且会ArkUI就可以开发安卓和、iOS和鸿蒙三个平台的app,下面简单介…...
LLVM学习-- 构建和安装
一 LLVM版本 二 适用预构建的二进制文件安装LLVM 三 适用包管理器安装LLVM 四 从源码构建用于Linux的LLVM 五 从源码构建用于Windows和Visual Studio的LLVM 六 从源码构建用于MacOS 和XCode的LLVM 1.1 LLVM项目从10年前第一次发布到版本3.4,其SVN存储库包含了超过20…...
总结Solidity 的数据类型
数据类型 在 Solidity 中,类型系统非常丰富,主要分为 值类型(Value Types)和 引用类型(Reference Types)。此外,还有一些特殊类型和全局变量。 一.值类型 布尔型(bool)…...
C# 中泛型(Generics)的核心概念
在 C# 中,泛型(Generics) 是一种强大的编程特性,允许你编写可重用、类型安全的代码,而无需为不同类型重复编写相似的逻辑。泛型的核心思想是参数化类型,即通过占位符(如 T)表…...
ubuntu 根据src 包从新打包
下边以onnxruntime示例: 1. 安装必要的依赖 确保你的系统已安装 devscripts、dpkg-dev 和 build-essential: sudo apt update sudo apt install devscripts dpkg-dev build-essential equivs2. 解压源码 进入存放源码包的目录,并解压: #c…...
如何启用 HTTPS 并配置免费的 SSL 证书
引言 HTTPS 已成为现代网站安全性的基础要求。通过 SSL/TLS 证书对数据进行加密,不仅可以保护用户隐私,还能提升搜索引擎排名并增强用户信任。本指南将详细介绍如何通过 Lets Encrypt(免费、自动化的证书颁发机构)为您的网站启用…...
Python数据与变量、进制转换、输入输出函数、基本运算,基础语法编程练习
第一节 数据与变量 程序 数据 指令 1.1 内置基本数据类型 (1)数值型 整数(int):用于表示整数,注意一点Python中int数据可以存储任意大小整数,不会像其他语言(C\C Java࿰…...
联邦学习(Federated Learning)
1. 概念 联邦学习(Federated Learning, FL)是一种分布式机器学习技术,它允许多个参与方(如设备、机构或企业)在不共享原始数据的情况下协同训练机器学习模型。联邦学习通过本地计算模型参数聚合的方式,保护…...
AI大模型核心原理(二)
一、人工智能的兴起。 1、前序。 艾伦麦席森图灵; 是计算机科学之父。 著名英国数学家、计算机科学家、逻辑学家和密码分析学家,被誉为计算机科学与人工智能之父。 阿兰・图灵(Alan Turing) 是译名(简称)…...
数据结构篇——线索二叉树
一、引入 遍历二叉树是按一定规则将二叉树结点排成线性序列,得到先序、中序或后序序列,本质是对非线性结构线性化,使结点(除首尾)在线性序列中有唯一前驱和后继;但以二叉链表作存储结构时,只能获…...
【蓝桥杯】742合唱队形(DP LIS)
思路 借这题复习一下LIS,实际上是LIS的升级版,求一个\/形或者/\行,用两次最长上升子串即可。 先从前往后求递增,再从后往前求递减。 先把满足要求的最长队形求出来,总人数减去队形人数就是要出列的数目。 code impo…...
MySQL二进制日志格式有哪几种
目录 一、二进制日志格式类型1. **STATEMENT 格式(SBR: Statement-Based Replication)**2. **ROW 格式(RBR: Row-Based Replication)**3. **MIXED 格式(混合模式)**二、二进制日志事件详解三、如何选择二进制日志格式?四、配置与查看二进制日志格式五、注意事项在 MySQL…...
VUE管理后台开发-vue-element-admin
# 克隆项目 git clone https://github.com/PanJiaChen/vue-element-admin.git # 进入项目目录 cd vue-element-admin # 安装依赖 npm install # 速度过慢可以使用下面方法进行指定下载镜像原 # 也可以使用nrm选择下载镜像原 # 建议不要用 cnpm 安装 会有各种诡异的bug 可以通…...
计算机网络原理
网络发展史 起初,计算机之间是相互独立的,分别完成不同的工作,效率较为低下.随着时代的发展,计算机开始协同完成任务,就有了网络互连.网络互连是指将多台计算机连接在一起,完成数据共享.根据网络互联的规模不同,可以划分为局域网和广域网.局域网,简称LAN.局域网内的主机可以互相…...
速盾:如何利用CDN静态加速匹配尾缀提升网站性能?
在当前数字化时代,网站性能对于用户体验至关重要。尤其是对于包含大量静态资源(如图片、CSS、JavaScript文件等)的网站来说,如何高效地管理和加速这些资源成为了一个重要课题。本文将介绍如何利用CDN静态加速匹配尾缀的方法来提升…...
【H2O2 | 软件开发】前端深拷贝的实现
目录 前言 开篇语 准备工作 正文 概述 JSON方法 递归 其他 结束语 前言 开篇语 本系列为短篇,每次讲述少量知识点,无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的,希望对诸位有所帮助。…...
C#语法基础总结
输入和输出 输入 Console.Read(); 从屏幕读取一个字符,并返回该字符所对应的整型数字 Console.ReadLine(); 从屏幕读取一串字符,并返回该字符串 输出 Console.WriteLine(); 输出内容,并换行 Console.Write(); 输出内容,不换行…...
《深度学习》—— 模型部署
文章目录 模型部署模型准备选择部署平台部署配置与服务化测试与验证优化与维护常用工具与框架Flask本地部署模型 模型部署 模型部署是将训练好的机器学习或深度学习模型投入实际生产环境,使其能够处理实时数据并提供预测或推理服务的过程。 模型准备 模型格式转换…...
E902基于bash与VCS的仿真环境建立
网上看见很多E902仿真的文章,但用到的编译器是类似于这种Xuantie-900-gcc-elf-newlib-x86_64-V3.0.1-20241120,而我按照相应的步骤与对应的编译器,仿真总会报错。后面将编译器换成riscv64-elf-x86_64-20210512,反而成功了。现在开…...
挖矿------获取以太坊测试币
文章目录 挖矿------获取以太坊测试币通过水龙头获取以太坊测试币了解Sepolia是什么?水龙头(Faucet)是什么?Gitcoin Passport是什么? 操作1.MetaMask钱包2.将MetaMask切换到Sepolia测试网络3.用MetaMask连接Gitcoin Pa…...
MySQL事务详解:从理论到实践,保障数据一致性
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么需要事务?二、事务的四大特性(ACID)三、MySQL事务的使用方法1. 基本语法2. 自动提交的设置3. 保存点(…...
在家用台式机上部署 DeepSeek-R1:低成本高性能的 CPU 推理方案---不到 4 万元
近年来,随着大模型技术的飞速发展,开源模型如 DeepSeek-R1 的出现为技术爱好者提供了更多探索人工智能的机会。然而,这类模型动辄数百亿参数,传统意义上需要昂贵的 GPU 集群才能运行,让许多个人开发者望而却步。最近,腾讯玄武实验室基于 CPU 的硬件方案优化,成功将 Deep…...
神经网络量化3-全连接层实现量化
本节,我们模拟下全连接层实现量化,原理上为了方便计算,全连接矩阵采用动态量化的方法,而输入由于不断在变化,我们采用静态量化的方法,直接给出代码: import torch import numpy as np import m…...
12 File文件对象:创建、获取基本信息、遍历文件夹、查找文件;字符集的编解码 (黑马Java视频笔记)
文章目录 File >> 存储数据的方案1. 认识File2. File操作2.1 创建File对象2.2 File操作1)对文件对象的信息的操作2)文件/文件夹的创建/删除3)⭐⭐对文件夹的遍历 3. 方法递归3.1 认识递归3.2 递归算法及其执行流程1) 案例:2…...
【软件工程】03_软件需求分析
3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行性分析(Feasibility …...
词向量+位置编码=语义+语序?Transformer如何让相加操作不丢失原意?
在Transformer模型中,词向量(Token Embedding)和位置编码(Position Encoding)通过相加的方式结合,而模型能够同时保留词本身的语义信息和位置信息,这主要得益于以下机制: 为什么相加…...
Spring(7)——MyBatis入门(1)
一、MyBatis入门 1.1 什么是MyBatis MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。 1.2 如何操作MyBatis 在application.properties进行配置 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasou…...
C语言文件操作入门
本节重点 理解文件的形式与基本概念二进制文件与文本文件文件的打开与关闭文件读写函数、文件缓冲区 正文开始--------------------------------------------------------------------------------------------------------------------- 一、为什么使用文件 程序运行时数据存…...
Java返回多个参数的方法
背景 在写代码的过程中,因有一些复杂的业务逻辑,需要返回多个结果。比如:需要增加一个true或者false,另外在加一个真正的结果值这样的类型。可能会有人用到数组以及Map等作为结果返回,当然这样确实是可以完成这样的功…...
微软开源神器OmniParser V2.0 介绍
微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具,旨在将用户界面(UI)截图转换为结构化数据,从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型…...
Java基础关键_023_IO流(一)
目 录 一、概述 二、分类 1.根据数据流向 2.根据读写数据形式 3.根据流在 IO 操作中的作用和实现方式 三、FileInputStream 1.说明 2.常用方法 (1)read() (2)read(byte[] b) (3)read(byte[] b, …...
Lora 中 怎么 实现 矩阵压缩
Lora 中 怎么 实现 矩阵压缩 1. 导入必要的库 import torch import re from datasets import Dataset from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, \get_cosine_schedule_with_warmup, EarlyStoppingCallback from peft...
lombok不起作用
xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> <scope>provided</scope> </dependency> - **作用**:引入 L…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-1-常用命令速查表-集群健康检查、索引生命周期管理、故障诊断命令
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-常用命令速查表 1-Elasticsearch 运维命令速查表(集群健康检查、ILM管理、故障诊断)一、集群健康检查与监控1.1 集群健康状态核心命令1.2 节点级健康诊断…...
探讨Deveco Studio常见问题及解决方案,分享快速排障方法
以下是针对 DevEco Studio 开发工具的常见问题、解决方案及快速排障方法,覆盖环境配置、编译运行、调试等多个环节,助您高效解决开发中的“拦路虎”。 一、环境配置问题 1. 安装失败或卡顿 现象: 安装时进度条卡住,或提示“Faile…...
Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则
目录 高层模块底层模块 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 依赖倒置原则 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 自己理解 开闭原则 …...
RISCV虚拟化环境搭建
概要 本文记搭建 RISCV 虚拟化环境的流程。 整体架构 我们使用 QEMU 来模拟 RISCV 的各种硬件扩展环境,通过 QEMU 启动 Ubuntu 作为我们的 Host 来在 Host 之中通过 KVMTOOL 来运行 Guest,学习 RISCV 的虚拟化。 目前我的 X86_64 主机使用的是 Ubunt…...
数据结构——串、数组和广义表
串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1a2...an(n≥0) 其中,S是串名,单引号括起来的字符序列是串的值, a i a_i a…...
vue3 elementUi table自由渲染组件
文章目录 前言CustomTable如何使用tableColumn 属性h函数创建原生元素创建组件动态生成 前言 elementui中的table组件,表格中想要自由地渲染内容,是一种比较麻烦的事情,比如你表格中想要某一列插入一个button按钮,是不是要用插槽…...
Centos离线安装gcc
文章目录 Centos离线安装gcc1. gcc是什么?2. gcc下载地址3. gcc的安装4. 安装结果验证 Centos离线安装gcc 1. gcc是什么? GCC(GNU Compiler Collection)是 GNU 项目下的开源编译器套件,主要用于将 C、C 等编程语言的源…...
odbus TCP转Modbus RTU网关快速配置案例
Modbus TCP 转Modbus RTU网关快速配置案例 在工业自动化领域,Modbus 协议以其简洁和高效而著称,成为众多设备通信的首选。 随着技术的发展和应用场景的变化,Modbus 协议也发展出了不同的版本,其中 Modbus TCP 和 Modbus RTU 是两种…...
Unity3D开发AI桌面精灵/宠物系列 【一】 窗口透明化 背景剔除 、去边框、去Logo动画UI正常显示
Unity3D 交互式AI桌面宠物开发系列【一】 文章主要介绍怎么制作AI桌面宠物的流程,我会从项目开始创建初期到最终可以和AI宠物进行交互为止,项目已经开发完成,我会仔细梳理一下流程,分步讲解。 这篇文章主要讲初期一些设置和部署。…...
Vue 自定义指令深度解析与应用实践
文章目录 1. 自定义指令概述1.1 核心概念1.2 指令生命周期 2. 自定义指令基础2.1 指令注册2.2 指令使用 3. 指令钩子函数详解3.1 钩子函数参数3.2 钩子函数示例 4. 自定义指令应用场景4.1 表单自动聚焦4.2 权限控制4.3 图片懒加载 5. 高级应用技巧5.1 动态指令参数5.2 指令修饰…...
基于SpringBoot+Vue的幼儿园管理系统+LW示例参考
1.项目介绍 系统角色:管理员、教师、普通用户功能模块:用户管理、教师管理、班级管理、幼儿信息管理、会议记录管理、待办事项、职工考核、请假信息、缴费信息、体检管理、资源管理、原料管理、菜品信息管理等技术选型:SpringBoot࿰…...
超级课程表项目结尾
L3-17-05-main.py def __init__(self):app QApplication([])self.window QMainWindow()self.window.setWindowTitle("超级课程表")cusWidget CourseWidget()self.window.setCentralWidget(cusWidget)self.showCourse()self.showNotes()# 1. 创建菜单栏self.menuba…...
Spring Retry
1. Spring Retry 的工作原理 内部机制 Spring Retry 主要通过 AOP(面向切面编程)实现重试逻辑。以下是 Spring Retry 的内部工作流程: AOP 拦截器:当一个方法被标记为需要重试,并且该方法抛出了指定类型的异常时&am…...
16.使用读写包操作Excel文件:XlsxWriter 包
一 XlsxWriter 的介绍 XlsxWriter 只能写入 Excel 文件。 OpenPyXL 和 XlsxWriter 的区别在笔记 15 。 二 如何使用 XlsxWriter 1.导包 import datetime as dtimport xlsxwriterimport excel 2.实例化工作簿 book xlsxwriter.Workbook("xlxswriter.xlsx") book.clo…...
【最新版】智慧小区物业管理小程序源码+uniapp全开源
一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…...
音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)
由于本文篇幅较长,分为上、下两篇。 一、引言 通过FFmpeg命令可以获取到SDP描述的RTP流的的音频压缩编码格式、音频压缩编码格式的profile、音频采样率、通道数信息: ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 而由《音视频入门…...