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

使用Android高性能音频--OpenSL ES和AAudio

AAudio的概念介绍:

AAudio 是作为 OpenSL ES 库的轻量级原生 Android 替代项而开发。 与 OpenSL ES 相比,AAudio API 不仅较小,而且容易使用。

AAudio 是在 Android O 版本中引入的全新 Android C API。

因此 API 是专为需要低延迟的高性能音频应用而设计。 应用通过读取并将数据写入流来与 AAudio 进行通信。

GitHub :AAudio Android demo地址:

https://github.com/googlesamples/android-audio-high-performance/tree/master/aaudio

使用Android系统底层的OpenSL ES或者AAudio都可以实现一个高性能的音频程序,尤其是AAudio更是简单易用,性能上,功能上都更佳,但是AAudio 是在 Android O 版本中才引入的全新 Android C API,在以前的系统版本中只能使用OpenSL ES。

  • 那么我们需要做的是在新版本系统中使用AAudio
  • 在不支持AAudio的系统版本中使用OpenSL ES,两套 API 同时使用。

不要怕困难,因为这是一个即面向未来,又兼顾现在的优秀方案。不要害怕这有多么困难,Google已经帮我们实现了——Oboe。

Pangu-Immortal (Pangu-Immortal) · GitHubPangu-Immortal has 18 repositories available. Follow their code on GitHub.https://github.com/Pangu-Immortal

OpenSL ES 谷歌使用文档介绍如下:

注意:开发者应考虑使用开源 Oboe 库,这个库可在 GitHub 上获得。Oboe 是一个 C++ 封装容器,提供与 AAudio 非常相似的 API。Oboe 在 AAudio 可用时对其进行调用,并在 AAudio 不可用时回退到 OpenSL ES。

 OpenSL ES™  API 规范的 Android 专用实现。利用这个库,不论您是编写合成器、数字音频工作站、卡拉 OK 应用、游戏还是其他实时应用,都可以使用 C 或 C++ 实现高性能、低延迟的音频。

  • OpenSL ES 与 Android Java 框架中的 MediaPlayer 和 MediaRecorder API 提供类似的音频功能。
  • OpenSL ES 提供 C 语言接口和 C++ 绑定,让您可以从使用任意一种语言编写的代码中调用 API。

OpenSL ES API 可以帮助您开发和提升应用的音频性能。


如何使用oboe?


官方指导文档在这里,可以通过两种方式使用oboe,这里是把源码拉下来编译到项目。

1. 下载oboe库->https://github.com/google/oboe

Oboe GitHub 主页 : GitHub/Oboe

① 简单使用 : Getting Started

② Oboe 全指南 : Full Guide To Oboe

③ Oboe API 参考 : API reference

④ Android 音频框架发展 : Android audio history


OpenSL 的生命周期如下:

为 OpenSL ES 播放器设置 采样率 与 采样缓冲区参数 :

( 1 ) 在 Java 层获取采样率与采样缓冲区大小 :

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){AudioManager myAudioMgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);// 获取采样率String sampleRateStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);int defaultSampleRate = Integer.parseInt(sampleRateStr);// 获取采样缓冲区String framesPerBurstStr = myAudioMgr.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);int defaultFramesPerBurst = Integer.parseInt(framesPerBurstStr);// 调用 Native 方法传入本地层 native_setDefaultStreamValues(defaultSampleRate, defaultFramesPerBurst);
}

( 2 ) 在 C++ 代码中设置 OpenSL ES 的参数 :

JNIEXPORT void JNICALL
Java_com_google_sample_oboe_hellooboe_MainActivity_native_1setDefaultStreamValues(JNIEnv *env,jclass type,jint sampleRate,jint framesPerBurst) {oboe::DefaultStreamValues::SampleRate = (int32_t) sampleRate;oboe::DefaultStreamValues::FramesPerBurst = (int32_t) framesPerBurst;
}

上述的采样率 和 缓冲区大小是用于 设置 Android 设备内置音频设备 的 , 如 内置扬声器 , 听筒 ;

外置设备 , 如耳机 , 蓝牙音箱 需要设置更大的缓冲区 ;


Oboe 音频流


Oboe 的主要作用是在 Android 应用 和 Android 设备中的 音频 输入 / 输出 设备 之间 操作移动音频数据 ;


Android 应用 输入 / 输出 数据 方案 :

  • 通过使用 回调函数 实现
  • 直接从 音频流 中 读取 / 写出 数据

音频数据读写调用 , 可以是 阻塞的 ( 同步 ) , 也可以是 非阻塞的 ( 异步 ) ;

  • 阻塞 : 调用后 , 阻塞等待回应 , 回应收到后 , 才往下执行 ;
  • 非阻塞 : 调用后 , 不等待回应 , 直接向后执行后续代码 ;

音频流根据如下属性定义 :

  • 音频流方向 : 音频设备作为 数据源 或 流数据接收器 ( 数据目的地 ) ;
  • 共享模式 : 独占模式 / 共享模式 ; 独占模式 下音频流独占该设备 , 其它音频流不允许访问该设备 , 性能高 ; 共享模式 , 多个音频流可以同时访问该设备 , 性能低 ;
  • 采样格式 : 音频流数据的采样格式 ;
     

Oboe 音频设备


音频设备与音频流对应关系 : 每个 Oboe 音频流都需要关联一个单独的音频设备 ; 注意对应关系 , 一个音频设备可以关联多个音频流 , 但是 一个音频流只能关联一个音频设备 ;

音频设备作用 : 音频设备是一个硬件接口或者虚拟端口 , 一般作为 连续的数字音频数据流的 源端 或 目的端 ; 音频设备作为 数据源 或 流数据接收器 ( 数据目的地 ) ;

音频设备举例 : Android 设备的 内置麦克风 , 扬声器 , 电话听筒 , 或外接的耳机 , 蓝牙音箱 等 ;


获取音频设备 : Android 6.0 Marshmallow( API Level 23 ) 及以上的版本 , 可以通过调用 AudioManager 的 getDevices() 方法 , 获取当前的可用音频设备 , 该方法会返回设备的类型和信息 ;


音频设备 ID : 每个音频设备都有一个 唯一的 ID 标识 , 使用该标识 , 可以实现将 音频流 与 指定的 音频设备进行绑定 ; 多数情况下 , 用户不需要自己设置音频设备 , Oboe 会自动选择主设备 , 推荐让 Oboe 自动选择 , 不要进行手动干预 ;


音频流方向 : 音频设备 可以 决定该音频流是 输入流 还是 输出流

  • 输入流 : 麦克风 , 采集音频数据 ; 设备 -> 内存 ;
  • 输出流 : 扬声器 , 播放音频数据 ; 内存 -> 设备 ;

打开 Oboe 音频流时 , 系统会检查音频流方向 , 如果你设置的是麦克风 , 但是音频流方向设置成了输出方向 , 那么打开音频流操作就会出错 ;


使用总结:


第一步:导入oboe头文件

第二步:创建builder并设置参数

第三步:设置回调接口

第四步:播放音频

第五步:关闭音频流


下面提供一下Oboe使用实例:

录制器:

 setupCommonStreamParameters(oboe::AudioStreamBuilder *builder) {builder->setAudioApi(mAudioApi)->setSharingMode(oboe::SharingMode::Exclusive)->setPerformanceMode(oboe::PerformanceMode::LowLatency);return builder;setupRecordingStreamParameters(oboe::AudioStreamBuilder *builder ,bool isCallBack) {builder->setCallback(this)->setDirection(oboe::Direction::Input)return setupCommonStreamParameters(builder);oboe::AudioStream *mRecordingStream = nullptr;oboe::AudioStreamBuilder builder;setupRecordingStreamParameters(&builder);oboe::Result result = builder.openStream(&mRecordingStream);if (result == oboe::Result::OK && mRecordingStream) {oboe::Result result = mRecordingStream->requestStart();  //开始录制。}

播放器:

 setupCommonStreamParameters(oboe::AudioStreamBuilder *builder) {builder->setAudioApi(mAudioApi)->setSharingMode(oboe::SharingMode::Exclusive)->setPerformanceMode(oboe::PerformanceMode::LowLatency);return builder;setupPlayStreamParameters(oboe::AudioStreamBuilder *builder ,bool isCallBack) {builder->setCallback(this)->setDirection(oboe::Direction::output)return setupCommonStreamParameters(builder);oboe::AudioStream *mPlayStream = nullptr;oboe::AudioStreamBuilder builder;setupPlayStreamParameters(&builder);oboe::Result result = builder.openStream(&mPlayStream);if (result == oboe::Result::OK && mPlayStream) {oboe::Result result = mPlayStream->requestStart();  //开始播放。}oboe::DataCallbackResult LiveEffectEngine::onAudioReady(oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames) {render(audioData,numFrames); //audioData放入数据即可播放。return oboe::DataCallbackResult::Continue;}

Pangu-Immortal (Pangu-Immortal) · GitHubPangu-Immortal has 18 repositories available. Follow their code on GitHub.https://github.com/Pangu-Immortal 

 


相关文章:

【算法】前缀和

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、一维前缀和二、二维前缀和三、寻找数值的中心下标四、除自身以外数组的乘积五、和为k的子数组六、和…...

win10系统如何删除账户

具体方法如下:1. 按下Win+R组合键打开“运行”对话框,输入“control”并按回车键,打开控制面板,然后选择“用户账户”。2. 在用户账户界面中,点击“管理其他账户”。3. 选择要删除的账户。4. 点击“删除账户”。5. 根据需求选择是删除文件还是保留文件,然后点击“删除账户…...

微电子领域材料生长方法(六)液相外延(LPE)

微电子领域材料生长方法(六)液相外延(LPE) 液相外延(Liquid Phase Epitaxy, LPE)是一种用于生长单晶薄膜的技术,特别是在半导体材料的制备中。LPE技术允许在较低的温度下从熔体中生长出高质量的…...

微信机器人~~微信hook

拉取镜像 docker pull dannicool/docker-wechatbot-webhook创建我们的容器: docker run \ -d \ --name wxBotWebhook \ -p 3001:3001 \ -e RECVD_MSG_API=http://192.168.31.100:8080/api \ -e DISABLE_AUTO_LOGIN=true -e LOGIN_API_TOKEN=abc -v ~/wxBot_logs:/app/log \ da…...

openGauss 索引

索引 索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。 索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引:经常执行查询的字段。 在连接条件上创建索引,对于存在多字段连接的查…...

深度学习——Transformer的理解整理

一、答主1 机器翻译 transformer刚被提出的时候就是被用于处理机器翻译的。在transformer架构中的不同位置Q,K,V指代的变量是不一样的。 假设现在处理的是英文->德文的翻译任务。 在encoder的输入端,这里执行的是self-attention&#x…...

使用Android高性能音频--OpenSL ES和AAudio

AAudio的概念介绍: AAudio 是作为 OpenSL ES 库的轻量级原生 Android 替代项而开发。 与 OpenSL ES 相比,AAudio API 不仅较小,而且容易使用。 AAudio 是在 Android O 版本中引入的全新 Android C API。 因此 API 是专为需要低延迟的高性能音频应用而设…...

eNSP 构建基本WLAN

配置项配置参数AP组 名称:hcia-group 应用模板:域管理模板hcia-domain、VAP模板hcia-vap 域管理模板 名称:hcia-domain 国家码:cn SSID模板 名称:hcia-ssid SSID名称:hcia-wlan 安全模板 名称:h…...

记录一次C#/.NET以及VB p-code/native的逆向破解

记录一次C#/.NET以及VB p-code/native的逆向破解 玩了5份样本,2份dotnet的,2份native的和1份pcode的。 dotnet framework程序 dotnet的相对会简单,只需要使用dnspy工具打开目标程序,找到逻辑点后,点编辑函数&#xff0…...

IO-操作系统

用户态和内核态 现代操作系统,为了保护系统的安全,都会划分出内核空间和用户空间,或者我们经常说的内核态和用户态。简单来说,就是划分为内核态和用户态两个等级,运行在用户态的进程大都是一些应用程序,能够…...

Elasticsearch基本查询语法

先造点数据 基于elasticsearch7.10.0 POST /hotel {"mappings":{"properties":{"title":{"type":"text"},"city":{"type":"keyword"},"price":{"type":"double&q…...

百度地图入门

百度地图官网百度api 进入官网选择javascript API 里面有详细的教程, 跟着教程先登录注册一个个人开发账号 并创建一个应用获取ak 创建时js需要填白名单,如果是在本地运行填写localhost就好了 当你在控制台看到这个界面是代表创建成功了,…...

Endor Labs:2023年十大开源安全风险

近日,Endor Labs发布了一份新报告,确定了2023年的十大开源安全风险。报告显示,许多软件公司依赖于开源软件代码,但在如何衡量和处理与开源软件相关的风险和漏洞方面缺乏一致性。调查发现,在应用程序中超过80%的代码可能…...

linux 产生随机数 并遍历

1、产生随机数 varRANDOMvarRANDOM varRANDOMvar[ $var % 150 ] 2、产生不重复的随机数 $ entries($(shuf -i 0-149 -n 15)) $ echo “${entries[]}” 3、对随机数排序 $ entries($(shuf -i 0-149 -n 15 | sort -n)) $ echo “entries[]"12224549546678798393118119124140…...

OAuth2协议

OAuth2协议流程图协议角色和流程授权所需信息授权方式授权码模式(authorization code)参数简化模式密码模式客户端模式授权方式小结流程图 协议角色和流程 user-agent:浏览器或者手机App平台 资源所有者(resourc owner&#xff0…...

Kafka在Mac下的安装与使用

mac 安装kafka安装kafka的原因安装kafka启动Zookeeper启动Kafka创建topic查看topic生产数据消费数据关闭zookeeper关闭kafka测试安装kafka的原因 用户微服务登录后需要向广告微服务中发送用户登录的信息以获取用户画像(这个过程是异步的),故…...

Linux之sshd_config配置文件说明及实践

一、sshd_config文件说明 sshd_config 是 OpenSSH SSH 服务器守护进程配置文件,主要用于设置ssh server服务的相关参数,包括监听地址、监听端口、允许验证次数、是否允许root账户登录等等。sshd服务从/etc/ssh/sshd_config(或命令行中用-f指定…...

如何将pdf大小压缩?怎么缩小pdf的文件大小?

PDF文件常常会因为内容的多样和丰富而导致文件过大,这个时候我们可以选择将pdf压缩大小,这样即使你的电脑中有大量PDF文档也不怕占用太多内存啦,今天分享给大家的是使用pdf在线压缩工具进行pdf压缩(https://www.yasuotu.com/pdfya…...

WuThreat身份安全云-TVD每日漏洞情报-2023-03-28

漏洞名称:ABB RCCMD 硬编码密码漏洞 漏洞级别:严重 漏洞编号:CVE-2022-4126 相关涉及:RCCMD: 4.40之前230207 漏洞状态:未定义 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-07407 漏洞名称:SOFTNEXT 垃圾邮件 SQR 代码注入 漏洞级别:高危 漏洞编号:CVE-2…...

在芯片设计行业,从项目的初期到交付,不同的岗位的工程师主要负责什么?

大家都知道在芯片设计行业,项目是至关重要的一环。从项目的初期到交付,不同的岗位的工程师在项目的各环节主要负责什么?他们是怎样配合的?下面看看资深工程师怎么说。 一个项目,从初期到交付的过程是比较漫长的。我们知道最早的时候&#…...

给你一个购物车模块,你会如何设计测试用例?【测试用例设计】

测试购物车 从使用场景上,把自己想象成一个使用购物车的人,模拟流程,可以主要从两个方面进行考虑: 涉及操作:增(添加商品)删(删除商品)改(编辑、跳转商品&a…...

centos7配置pytorch和tensorflow

1、安装anaconda 1.1镜像源下载对应anaconda版本后传到服务器上 1.2进入对应文件夹 首先赋权再执行安装程序 chmod x Anaconda3-2022.10-Linux-x86_64.sh ./Anaconda3-2022.10-Linux-x86_64.sh chmod x Anaconda3-2022.10-Linux-x86_64.sh 1.3交互确认 确认许可协议&…...

libmemunreachable+malloc debug分析内存泄露

使用lsan遇到困难 一般使用lsan来查memleak效率最高,不过针对cameraserver hook到asan库时有一些其他的报错。 而且报错看起来还不太好解决: 看下如何针对camerasever使能lsan,后续研究。 使用libmemunreachablemallocdebug分析 原理 相关…...

关于Error和Exception的一些思考 小结

目录 1. ERROR 2. Exception 2.1 checked Exception 2.2 unchecked Exception 2.3 区别 3. 内存溢出 3.1 堆溢出 3.2 永久代/元空间溢出 3.3 方法栈溢出 Java中,所有的异常都有一个共同的父类:Throwable类。 Throwable类有两个重要的子类&#…...

Docker学习记录

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!! 文章目录阅读前请看一下:我是一…...

@RefreshScope 和 @Scope的使用及源码解析

结论: Scope 1、Scope代表spring Bean对象的作用域,一般分为singleton、prototype、request、session、application。其中request、session、application的缓存在GenericWebApplicationContext.postProcessBeanFactory方法中创建 2、Scope的注解proxy…...

element ui通过formdata上传文件

ElementUI的upload组件手动上传,formdata表单数据 Excerpt 使用场景:选取好excel文件后,再把导入的excel文件和参数同时提交给服务器,需要用到文件的手动上传,但是直接拷贝官网的demo会出现问题,下面会具体…...

关于微信小程序安装npm的过程,从下载到小程序内部安装完成

1.先从官网下载nodejs 网站为Node.js (nodejs.org),选择左边第一个2 然后一直next,选默认就行 选择自己喜欢的路径我的是D:\nodejs-v18.12.1 3 下载完成后,先在安装文件夹中新建两个文件夹 node_cache node_global 4 配置一下环境变量&…...

【游戏开发环境】Unity使用Mac电脑开发,开发环境的搭建(Mac mini M1 VSCode Git 好用工具)

文章目录 一、前言二、Unity下载安装三、VSCode 1、VSCode下载安装2、VSCode插件 2.1、unity3d-pack插件2.2、Bracket Pair Colorizer 2插件2.3、其他插件 3、代码无法提示与补全的问题 3.1、Windows解决办法3.2、Mac解决办法 3.2.1、安装Mono3.2.2、设置Omnisharp: Use Global…...

原神 Android 教程 —安卓版

准备材料 一台能读写 /system 分区的 Android 手机(或:一台安装了 Magisk 的 Android 手机) 有人搞出来免root端了,此条件不再必须私服客户端...

Windows安装配置tidevice

一直以来,iOS自动化的实现和执行都依赖Mac系统,其主要原因是因为需要通过Xcodebuild编译安装WDA (WebDriverAgent)到iOS设备中,通过WDA实现对被测应用进行操作。而Windows系统无法运行Xcode工具,所以无法运行iOS自动化测试&#x…...

关于Spring 的IoC和AOP的面试题,快看看你都能答上来哪些

推荐:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。。 点击跳转到网站 🏡 博客首页:派 大 星 ⛳️ 欢迎关注 ❤️ 点赞 🎒 收藏 ✏️ 留言 &#x1f…...

Python Module — OpenAI ChatGPT API

目录 文章目录目录OpenAI Python SDKopenai.ChatCompletion 模块openai.ChatCompletion.create 函数OpenAI Python SDK 官方文档:https://platform.openai.com/docs/api-reference/introduction OpenAI Python SDK 用于开发与 OpenAI RESTful API 进行交互的客户端…...

Linux 0.11

调试介绍 Linux 0.11-调试 Linux 最早期的代码-36 启动跟踪 BIOS 加载 电脑启动,CPU指向0xFFFFFFF0处,这里正好是系统ROM BIOS存放的地址。即开始执行BIOS指令。为了保持向下兼容,就会把与原PC兼容的BIOS代码和数据复制到低端1M末端的64K…...

Elasticsearch 需要了解的都在这

ES选主过程?其实ES的选主过程其实没有很高深的算法加持,启动过程中对接点的ID进行排序,取ID最大节点作为Master节点,那么如果选出来的主节点中存储的元信息不是最新的怎么办?其实他是分了2个步骤做这件事,先…...

anaconda如何改变虚拟环境安装路径

1、查看anaconda的环境配置(对应结果如下图所示) conda config --show 或者 conda info 查看虚拟环境安装位置的结果如上图所示 2、修改配置语法 conda config --add key value #添加语法 conda config --remove key value #删除语法 其中&#xff0…...

基于opencv的边缘检测方法

1、梯度运算 用OpenCV的形态变换( 膨胀、腐蚀、开运算和闭运算)函数morphologyEx 梯度运算即膨胀结果-腐蚀结果: 【注意】对于二值图像来说,必须是前景图像为白色,背景为黑色,否则需要进行反二值化处理 …...

Mac环境变量配置(Java)

1.打开终端: 2.输入命令:【/usr/libexec/java_home -V】,查看默认的jdk下载地址(绿色下划线的就是jdk默认路径)(注意⚠️:命令行终端是区分大小写的【-v 是不对的,必须是大写 -V】) …...

Linux定时任务:编辑、查看、删除

查看定时任务文件所在位置(通常情况下在/var/spool/cron/文件夹里,文件名通常是以创建者的用户名命名) 注意:当前登录用户名为root: 1、编辑定时任务(相当于自动在/var/spool/cron目录下,创建了一个 以当…...

昇腾AI机器人发布,12家企业、5家高校签约,昇腾AI开发者创享日全国巡展沈阳首站成功举办

“创未来,享非凡”昇腾AI开发者创享日2023年全国巡回首站活动成功举办,本次活动由辽宁省科技厅指导,由沈阳市科技局、浑南区人民政府、沈阳高新区管理委员会、华为技术有限公司共同主办,沈阳昇腾人工智能生态创新中心承办&#xf…...

基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度

本文目录一、什么是对比度二、什么是颜色直方图三、如何通过RGB计算颜色对比度什么是HSV、Lab颜色空间四、OpenCV代码五、Java代码5.1 平滑处理5.2 完整代码一、什么是对比度 对比度是指图像中不同区域之间的明暗差异程度,它是图像质量中的重要指标之一。除了颜色对…...

Springboot是什么

目录 为什么会要用springboot 1、之前 2、现在 springboot优点 springboot四大核心 自动装配介绍 1、自动装配作用是什么 2、自动装配原理 springboot starter是什么 1、starter作用 2、比如:我们想搭建java web框架 3、starter原理 SpringBootApplica…...

Mac M1通过VMWare Fusion安装Centos7记录(镜像和网络有大坑)

以前用linux系统基本都在我的服务器上或者是在win上进行,从没有在M1上进行创建,因此走了一些坑吧,这里会列出我的详细安装步骤。 下载镜像 镜像的下载网站:https://www.centos.org/download/ 在该网站中,不管是Every…...

Windows Server 2016远程桌面配置全过程

镜像下载 系统镜像网址 本次下载的是 Windows Server 2016 (Updated Feb 2018) (x64) - DVD (Chinese-Simplified) 远程桌面配置 Step 1 在开始菜单搜索服务,打开服务器管理器,点击右上角的管理按钮 Step 2 添加角色控制,点击下一步 S…...

js 数据类型

1.概念 数据类型指的是可以在程序中存储和操作的值的类型,每种编程语言都有其支持的数据类型,不同的数据类型用来存储不同的数据,例如文本、数值、图像等。 JavaScript 是一种动态类型的语言,在定义变量时不需要提前指定变量的类…...

No.020<软考>《(高项)备考大全》【第05章】项目范围管理

1 章节相关 1.1 考试相关 上午一般考3分左右,20下、21下、22上考案例分析 21上考论文写作,是案例、论文需要学习准备的重点 1.2 6个过程 (1)规划范围管理:对如何定义、确认和控制项目范围的过程进行描述。 &#x…...

LAMP架构之zabbix监控(2):zabbix基础操作

目录 一、zabbix监控节点添加和删除 (1)手动添加 (2)自动添加 (3)按照条件批量添加 (4)使用api工具进行管理 二、针对应用的zabbix监控 一、zabbix监控节点添加和删除 实验说明&a…...

九龙证券|重磅文章引爆两大板块!千亿煤炭龙头强势涨停!

A股今天走势分化,创业板指逆市拉升;港股走势疲弱,恒生科技指数一度跌超3%。 具体来看,A股方面,沪指弱势震荡下探,盘中一度跌超1%,午后跌幅收窄;创业板指走势微弱,午后涨超…...

OCR之论文笔记TrOCR

文章目录TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models一. 简介二. TrOCR2.1. Encoder2.2 Decoder2.3 Model Initialiaztion2.4 Task Pipeline2.5 Pre-training2.6 Fine-tuning2.7 Data Augmentation三. 实验3.1 Data3.2 Settings3.2 Resul…...

静态路由+DHCP实验(四路由器八PC)

一.200.1.1.0/24子网划分 1.划分八个子网 2.选用前5个,第五个子网再划分4个子网作为骨干 二.规划路由 三.配置(下一跳) 1.先依次实现四个路由器之间全网可通 2.为路由器配置地址池,使用全局模式获取dhcp,指定网关…...

文件包含漏洞原理与实践

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 文件包含漏洞一、什么是文件包含漏洞?二、文件包含函数三、两种文件包含1、本地文件包含1.1 使用教程演示2、远程文件包含1.1 使…...

利用摄影测量进行地形建模的介绍

一、前言 从一个地方到另一个地方的地球表面由连续和突然的海拔变化组成,个人和社会都必须应对这些变化。 水从高山和丘陵向下流,从溪流流入河流,形成三角洲,最终汇入大海。 三维 (3D) 地面信息的获取和表示一直是与行星表面相关的…...

【Nginx】Nginx 常用的基础配置

文章目录一、基础配置二、隐藏 Nginx 版本信息三、禁止ip直接访问80端口四、启动 web 服务 (vue 项目为例)五、PC端和移动端使用不同的项目文件映射六、一个web服务,配置多个项目 (location 匹配路由区别)七、配置负载均衡八、SSL 配置 HTTPS一、基础配置 user …...

基于OpenCV的图片和视频人脸识别

目录 🥩前言 🍖环境使用 🍖模块使用 🍖模块介绍 🍖模块安装问题: 🥩人脸检测 🍖Haar 级联的概念 🍖获取 Haar 级联数据 🍗 1.下载所需版本 🍗 2.安…...

比肩ChatGPT的国产AI:文心一言——有话说

🔗 运行环境:chatGPT,文心一言 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好&am…...

剑指offer JZ77 按之字形顺序打印二叉树

Java JZ77 按之字形顺序打印二叉树 文章目录Java JZ77 按之字形顺序打印二叉树一、题目描述二、双栈法三、队列reverse()法使用双栈法和队列reverse()法解决剑指offer JZ77 按之字形顺序打印二叉树的问题。 一、题目描述 给定一个二叉树,返回该二叉树的之字形层序遍…...

ctfshow——XSS

文章目录 XSS介绍什么是xss&#xff1f;XSS危害XSS的分类常用XSSpayload web316——反射型XSSweb317——过滤<script> web318——过滤script、imgweb319——不止过滤script、imgweb320——过滤空格web321——不止过滤空格web322——不止过滤空格web323web324web 325web32…...

iOS pod库包含MRC类

在我们iOS开发过程中,碰到的大部分文件都是基于ARC内存管理的,但也免不了用到一些三方的MRC的代码,这里介绍三种方法来编写包括MRC文件的.podspec文件。 1).在podspec中指定requires_arc:false,同时指定requires_arc的文件,eg: 这样写的好处是别的项目拉取到你pod源码的时候,不…...

OpenCV C++实现区域面积筛选以及统计区域个数

目录 1、背景介绍 2、代码实现 2.1 获取原图 2.1.1 区域图像imread 2.1.2 具体实现 2.2 获取图像大小 2.3 阈值分割 2.3.1 阈值分割threshold 2.3.2 具体实现 2.4 区域面积筛选 2.4.1 获取轮廓findContours 2.4.2 获取轮廓面积contourArea 2.4.3 填充区域fil…...

HTTP 与 HTTPS 的区别

HTTP 与 HTTPS 的区别&#xff1f; HTTPHTTPS端口80443安全性无加密&#xff0c;安全性较差有加密机制&#xff0c;安全性较高资源消耗较少由于加密处理&#xff0c;资源消耗更多是否需要证书不需要需要协议运行在TCP协议之上运行在SSL协议之上&#xff0c;SSL运行在TCP协议之…...

GateWay具体的使用之全链路跟踪TraceId日志

1.创建全局过滤器&#xff0c;在请求头上带入traceId参数&#xff0c;穿透到下游服务. package com.by.filter;import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.jwt.JWTValidator;…...

RustGUI学习(iced)之小部件(二):如何使用滑动条部件

前言 本专栏是学习Rust的GUI库iced的合集&#xff0c;将介绍iced涉及的各个小部件分别介绍&#xff0c;最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个&#xff0c;目前处于发展中&#xff08;即版本可能会改变&#xff09;&#xff0c;本专栏基于版本0.12.1. 概述…...