Qt/C++音视频开发82-系统音量值获取和设置/音量大小/静音
一、前言
在音视频开发中,音量的控制分两块,一个是控制播放器本身的音量,绝大部分场景都是需要控制这个,这个不会影响系统音量的设置。还有一种场景是需要控制系统的音量,因为播放器本身的音量是在系统音量的基础上控制的,也就是系统音量30%,意味着播放器最大的音量也是只能到系统音量的30%,这个情况在小部分场景中是不准确的,不是用户期望的,比如展厅展馆播放器,他们很多时候希望播放器音量的大小就是系统音量的大小,所以需要搞个开关,开启音量设置是否自动跟随系统音量。
在windows上读取和设置系统的音量有多种方法,最常见最万能最准确的办法就是使用winapi接口,一般会引入windows.h/mmdeviceapi.h/endpointvolume.h/audioclient.h四个头文件,调用其中的几个函数接口就行。还有另外一种方法比较独特,就是用纯Qt方法,模拟系统按键,发送Fn+F2/Fn+F3来控制音量减少和增加,这种方法缺点就是无法获取当前音量值。
这里遇到个小插曲,就是封装好的这个类,在mingw正常,但是msvc居然编译通不过,后面发现原来是头文件引入顺序的问题,要先引入系统的头文件,再引入Qt的头文件,就没问题,可能Qt的头文件也引入的系统的头文件,然后又自己增加了一些定义导致的冲突吧。
二、效果图
三、相关地址
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangqingyun
- 个人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
- 文件地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码:01jf 文件名:bin_video_demo。
四、功能特点
4.1 基础功能
- 支持各种音频视频文件格式,比如mp3、wav、mp4、asf、rm、rmvb、mkv等。
- 支持本地摄像头设备和本地桌面采集,支持多设备和多屏幕。
- 支持各种视频流格式,比如rtp、rtsp、rtmp、http、udp等。
- 本地音视频文件和网络音视频文件,自动识别文件长度、播放进度、音量大小、静音状态等。
- 文件可以指定播放位置、调节音量大小、设置静音状态等。
- 支持倍速播放文件,可选0.5倍、1.0倍、2.5倍、5.0倍等速度,相当于慢放和快放。
- 支持开始播放、停止播放、暂停播放、继续播放。
- 支持抓拍截图,可指定文件路径,可选抓拍完成是否自动显示预览。
- 支持录像存储,手动开始录像、停止录像,部分内核支持暂停录像后继续录像,跳过不需要录像的部分。
- 支持无感知切换循环播放、自动重连等机制。
- 提供播放成功、播放完成、收到解码图片、收到抓拍图片、视频尺寸变化、录像状态变化等信号。
- 多线程处理,一个解码一个线程,不卡主界面。
4.2 特色功能
- 同时支持多种解码内核,包括qmedia内核(Qt4/Qt5/Qt6)、ffmpeg内核(ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6)、vlc内核(vlc2/vlc3)、mpv内核(mpv1/mp2)、mdk内核、海康sdk、easyplayer内核等。
- 非常完善的多重基类设计,新增一种解码内核只需要实现极少的代码量,就可以应用整套机制,极易拓展。
- 同时支持多种画面显示策略,自动调整(原始分辨率小于显示控件尺寸则按照原始分辨率大小显示,否则等比缩放)、等比缩放(永远等比缩放)、拉伸填充(永远拉伸填充)。所有内核和所有视频显示模式下都支持三种画面显示策略。
- 同时支持多种视频显示模式,句柄模式(传入控件句柄交给对方绘制控制)、绘制模式(回调拿到数据后转成QImage用QPainter绘制)、GPU模式(回调拿到数据后转成yuv用QOpenglWidget绘制)。
- 支持多种硬件加速类型,ffmpeg可选dxva2、d3d11va等,vlc可选any、dxva2、d3d11va,mpv可选auto、dxva2、d3d11va,mdk可选dxva2、d3d11va、cuda、mft等。不同的系统环境有不同的类型选择,比如linux系统有vaapi、vdpau,macos系统有videotoolbox。
- 解码线程和显示窗体分离,可指定任意解码内核挂载到任意显示窗体,动态切换。
- 支持共享解码线程,默认开启并且自动处理,当识别到相同的视频地址,共享一个解码线程,在网络视频环境中可以大大节约网络流量以及对方设备的推流压力。国内顶尖视频厂商均采用此策略。这样只要拉一路视频流就可以共享到几十个几百个通道展示。
- 自动识别视频旋转角度并绘制,比如手机上拍摄的视频一般是旋转了90度的,播放的时候要自动旋转处理,不然默认是倒着的。
- 自动识别视频流播放过程中分辨率的变化,在视频控件上自动调整尺寸。比如摄像机可以在使用过程中动态配置分辨率,当分辨率改动后对应视频控件也要做出同步反应。
- 音视频文件无感知自动切换循环播放,不会出现切换期间黑屏等肉眼可见的切换痕迹。
- 视频控件同时支持任意解码内核、任意画面显示策略、任意视频显示模式。
- 视频控件悬浮条同时支持句柄、绘制、GPU三种模式,非绝对坐标移来移去。
- 本地摄像头设备支持指定设备名称、分辨率、帧率进行播放。
- 本地桌面采集支持设定采集区域、偏移值、指定桌面索引、帧率、多个桌面同时采集等。还支持指定窗口标题采集固定窗口。
- 录像文件同时支持打开的视频文件、本地摄像头、本地桌面、网络视频流等。
- 瞬间响应打开和关闭,无论是打开不存在的视频或者网络流,探测设备是否存在,读取中的超时等待,收到关闭指令立即中断之前的操作并响应。
- 支持打开各种图片文件,支持本地音视频文件拖曳播放。
- 视频流通信方式可选tcp/udp,有些设备可能只提供了某一种协议通信比如tcp,需要指定该种协议方式打开。
- 可设置连接超时时间(视频流探测用的超时时间)、读取超时时间(采集过程中的超时时间)。
- 支持逐帧播放,提供上一帧/下一帧函数接口,可以逐帧查阅采集到的图像。
- 音频文件自动提取专辑信息比如标题、艺术家、专辑、专辑封面,自动显示专辑封面。
- 视频响应极低延迟0.2s左右,极速响应打开视频流0.5s左右,专门做了优化处理。
- 支持H264/H265编码(现在越来越多的监控摄像头是H265视频流格式)生成视频文件,内部自动识别切换编码格式。
- 支持用户信息中包含特殊字符(比如用户信息中包含+#@等字符)的视频流播放,内置解析转义处理。
- 支持滤镜,各种水印及图形效果,支持多个水印和图像,可以将OSD标签信息和各种图形信息写入到MP4文件。
- 支持视频流中的各种音频格式,AAC、PCM、G.726、G.711A、G.711Mu、G.711ulaw、G.711alaw、MP2L2等都支持,推荐选择AAC兼容性跨平台性最好。
- 内核ffmpeg采用纯qt+ffmpeg解码,非sdl等第三方绘制播放依赖,gpu绘制采用qopenglwidget,音频播放采用qaudiooutput。
- 内核ffmpeg和内核mdk支持安卓,其中mdk支持安卓硬解码,性能非常凶残。
- 可以切换音视频轨道,也就是节目通道,可能ts文件带了多个音视频节目流,可以分别设置要播放哪一个,可以播放前设置好和播放过程中动态设置。
- 可以设置视频旋转角度,可以播放前设置好和播放过程中动态改变。
- 视频控件悬浮条自带开始和停止录像切换、声音静音切换、抓拍截图、关闭视频等功能。
- 音频组件支持声音波形值数据解析,可以根据该值绘制波形曲线和柱状声音条,默认提供了声音振幅信号。
- 标签和图形信息支持三种绘制方式,绘制到遮罩层、绘制到图片、源头绘制(对应信息可以存储到文件)。
- 通过传入一个url地址,该地址可以带上通信协议、分辨率、帧率等信息,无需其他设置。
- 保存视频到文件支持三种策略,自动处理、仅限文件、全部转码,转码策略支持自动识别、转264、转265,编码保存支持指定分辨率缩放或者等比例缩放。比如对保存文件体积有要求可以指定缩放后再存储。
- 支持加密保存文件和解密播放文件,可以指定秘钥文本。
- 提供的监控布局类支持64通道同时显示,还支持各种异型布局,比如13通道,手机上6行2列布局。各种布局可以自由定义。
- 支持电子放大,在悬浮条切换到电子放大模式,在画面上选择需要放大的区域,选取完毕后自动放大,再次切换放大模式可以复位。
- 各组件中极其详细的打印信息提示,尤其是报错信息提示,封装的统一打印格式。针对现场复杂的设备环境测试极其方便有用,相当于精确定位到具体哪个通道哪个步骤出错。
- 同时提供了简单示例、视频播放器、多画面视频监控、监控回放、逐帧播放、多屏渲染等单独窗体示例,专门演示对应功能如何使用。
- 监控回放可选不同厂家类型、回放时间段、用户信息、指定通道。支持切换回放进度。
- 可以从声卡设备下拉框选择声卡播放声音,提供对应的切换声卡函数接口。
- 支持编译到手机app使用,提供了专门的手机app布局界面,可以作为手机上的视频监控使用。
- 代码框架和结构优化到最优,性能强悍,注释详细,持续迭代更新升级。
- 源码支持windows、linux、mac、android等,支持各种国产linux系统,包括但不限于统信UOS/中标麒麟/银河麒麟等。还支持嵌入式linux。
- 源码支持Qt4、Qt5、Qt6,兼容所有版本。
4.3 视频控件
- 可动态添加任意多个osd标签信息,标签信息包括名字、是否可见、字号大小、文本文字、文本颜色、背景颜色、标签图片、标签坐标、标签格式(文本、日期、时间、日期时间、图片)、标签位置(左上角、左下角、右上角、右下角、居中、自定义坐标)。
- 可动态添加任意多个图形信息,比如人工智能算法解析后的图形区域信息直接发给视频控件即可。图形信息支持任意形状,直接绘制在原始图片上,采用绝对坐标。
- 图形信息包括名字、边框大小、边框颜色、背景颜色、矩形区域、路径集合、点坐标集合等。
- 每个图形信息都可指定三种区域中的一种或者多种,指定了的都会绘制。
- 内置悬浮条控件,悬浮条位置支持顶部、底部、左侧、右侧。
- 悬浮条控件参数包括边距、间距、背景透明度、背景颜色、文本颜色、按下颜色、位置、按钮图标代码集合、按钮名称标识集合、按钮提示信息集合。
- 悬浮条控件一排工具按钮可自定义,通过结构体参数设置,图标可选图形字体还是自定义图片。
- 悬浮条按钮内部实现了录像切换、抓拍截图、静音切换、关闭视频等功能,也可以自行在源码中增加自己对应的功能。
- 悬浮条按钮对应实现了功能的按钮,有对应图标切换处理,比如录像按钮按下后会切换到正在录像中的图标,声音按钮切换后变成静音图标,再次切换还原。
- 悬浮条按钮单击后都用名称唯一标识作为信号发出,可以自行关联响应处理。
- 悬浮条空白区域可以显示提示信息,默认显示当前视频分辨率大小,可以增加帧率、码流大小等信息。
- 视频控件参数包括边框大小、边框颜色、焦点颜色、背景颜色(默认透明)、文字颜色(默认全局文字颜色)、填充颜色(视频外的空白处填充黑色)、背景文字、背景图片(如果设置了图片优先取图片)、是否拷贝图片、缩放显示模式(自动调整、等比缩放、拉伸填充)、视频显示模式(句柄、绘制、GPU)、启用悬浮条、悬浮条尺寸(横向为高度、纵向为宽度)、悬浮条位置(顶部、底部、左侧、右侧)。
五、相关代码
#include "volumehelper.h"
#include "qdebug.h"#ifdef setsystemvolume
#include "windows.h"
#include "audioclient.h"
#include "mmdeviceapi.h"
#include "endpointvolume.h"
#endifint VolumeHelper::getVolume()
{
#ifdef setsystemvolumeHRESULT hr;IMMDeviceEnumerator *pDeviceEnumerator = 0;IMMDevice *pDevice = 0;IAudioEndpointVolume *pAudioEndpointVolume = 0;IAudioClient *pAudioClient = 0;try {hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void **)&pDeviceEnumerator);if (FAILED(hr)) {throw "CoCreateInstance";}hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice);if (FAILED(hr)) {throw "GetDefaultAudioEndpoint";}hr = pDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void **)&pAudioEndpointVolume);if (FAILED(hr)) {throw "pDevice->Active";}hr = pDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void **)&pAudioClient);if (FAILED(hr)) {throw "pDevice->Active";}float fVolume;hr = pAudioEndpointVolume->GetMasterVolumeLevelScalar(&fVolume);if (FAILED(hr)) {throw "SetMasterVolumeLevelScalar";}pAudioClient->Release();pAudioEndpointVolume->Release();pDevice->Release();pDeviceEnumerator->Release();return fVolume * 100;} catch (...) {if (pAudioClient) {pAudioClient->Release();}if (pAudioEndpointVolume) {pAudioEndpointVolume->Release();}if (pDevice) {pDevice->Release();}if (pDeviceEnumerator) {pDeviceEnumerator->Release();}throw;}
#endifreturn 0;
}bool VolumeHelper::setVolume(int volume)
{
#ifdef setsystemvolumeHRESULT hr;IMMDeviceEnumerator *pDeviceEnumerator = 0;IMMDevice *pDevice = 0;IAudioEndpointVolume *pAudioEndpointVolume = 0;IAudioClient *pAudioClient = 0;try {hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void **)&pDeviceEnumerator);if (FAILED(hr)) {throw "CoCreateInstance";}hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice);if (FAILED(hr)) {throw "GetDefaultAudioEndpoint";}hr = pDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void **)&pAudioEndpointVolume);if (FAILED(hr)) {throw "pDevice->Active";}hr = pDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void **)&pAudioClient);if (FAILED(hr)) {throw "pDevice->Active";}if (volume == -2) {hr = pAudioEndpointVolume->SetMute(FALSE, NULL);if (FAILED(hr)) {throw "SetMute";}} else if (volume == -1) {hr = pAudioEndpointVolume->SetMute(TRUE, NULL);if (FAILED(hr)) {throw "SetMute";}} else if (volume >= 0 && volume <= 100) {float fVolume = volume / 100.0f;hr = pAudioEndpointVolume->SetMasterVolumeLevelScalar(fVolume, &GUID_NULL);if (FAILED(hr)) {throw "SetMasterVolumeLevelScalar";}pAudioClient->Release();pAudioEndpointVolume->Release();pDevice->Release();pDeviceEnumerator->Release(); }return true;} catch (...) {if (pAudioClient) {pAudioClient->Release();}if (pAudioEndpointVolume) {pAudioEndpointVolume->Release();}if (pDevice) {pDevice->Release();}if (pDeviceEnumerator) {pDeviceEnumerator->Release();}throw;}
#endifreturn false;
}
相关文章:
Qt/C++音视频开发82-系统音量值获取和设置/音量大小/静音
一、前言 在音视频开发中,音量的控制分两块,一个是控制播放器本身的音量,绝大部分场景都是需要控制这个,这个不会影响系统音量的设置。还有一种场景是需要控制系统的音量,因为播放器本身的音量是在系统音量的基础上控…...
C盘清理终极方案——基于Windows软连接的目录迁移实战
C盘清理终极方案——基于Windows软连接的目录迁移实战 (案例实现:.cache、.conda、AppData\docker等目录移动至D盘) 核心 # 创建目录软连接 mklink /J "C:\Users\<用户名>\AppData\Local\Docker" "D:\SoftwareCa…...
医疗AI测试实战:如何确保人工智能安全赋能医疗行业?
一、医疗AI测试的重要性 人工智能(AI)正广泛应用于医疗行业,如疾病诊断、医学影像分析、药物研发、手术机器人和智能健康管理等领域。医疗AI技术的应用不仅提高了诊断效率,还能降低误诊率,改善患者治疗效果。然而&…...
在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧
目录 引言 一、历史中的非对称作战:从李牧到八路军的智谋传承 李牧戍边:古代军事博弈中的资源重构 八路军的游击战:现代战争中的智慧延续 二、创业界的逆袭之道:小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …...
在使用element-ui时表单的表头在切换页面时第一次进入页面容易是白色字体解决方法
在里面添加:header-cell-style"{ color: black }" <el-table :data"tableData" style"width: 100%" height"250" :header-cell-style"{ color: black }" ></el-table> 正确代码是 <templat…...
与指定数字相同的数的个数(信息学奥赛一本通-1102)
【题目描述】 输出一个整数序列中与指定数字相同的数的个数。 【输入】 输入包含三行: 第一行为n,表示整数序列的长度(n≤100); 第二行为n个整数,整数之间以一个空格分开; 第三行包含一个整数,为指定的数字…...
13. Pandas :使用 to_excel 方法写入 Excel文件
一 to_excel 方法的相关参数 用它来指定要将 DataFrame 写入哪些工作表的哪些单元格,以及是否需要包含列标题和 DataFrame 索引。如何处理特殊值(如 np.nan 和 np.inf)。 1.指定工作表和单元格 sheet_name:指定将 DataFrame 写入的…...
python画图文字显示不全+VScode新建jupyter文件
之前有两个jupyter文件,一个显示正确一个显示错误。已经尝试过的方法包括: 1、更改下载好的SimHei字体,或者其他支持中文的字体 2、重新创建虚拟环境 3、清楚matplotlib缓存目录 4、从anaconda的jupyter换至vscode 目前部分中文不能正常…...
C#中继承的核心定义
1. 继承的核心定义 继承 是面向对象编程(OOP)的核心特性之一,允许一个类(称为子类/派生类)基于另一个类(称为父类/基类)构建,自动获得父类的成员(字段、属…...
MOEFeedForward 模块
代码 class FeedForward(nn.Module):def __init__(self, config: LMConfig):super().__init__()if config.hidden_dim is None:hidden_dim 4 * config.dimhidden_dim int(2 * hidden_dim / 3)config.hidden_dim config.multiple_of * ((hidden_dim config.multiple_of - 1…...
TypeScript变量声明详解:与JavaScript的对比与工程化价值
TypeScript的变量声明机制在保留JavaScript灵活性的同时,通过类型注解和作用域强化显著提升了代码可靠性。本文将深入解析TypeScript的变量声明特性,并与JavaScript/ES标准进行对比,揭示其工程实践价值。 一、变量声明方式对比 1. 基础声明语…...
在 Axios 中设置代理
在 Axios 中设置代理 Axios 与代理 Axios 是 JavaScript 生态中最广泛使用的 HTTP 客户端之一。它基于 Promise,提供了易用、直观的 API,用于执行 HTTP 请求并处理自定义请求头、配置和 Cookie 等。 通过为 Axios 请求设置代理,您可以隐藏自…...
WebSocket 使用教程
WebSocket 使用教程 WebSocket 是一种在现代网络应用中广泛使用的网络通信协议,旨在实现服务器与客户端之间高效、实时的双向通信。与传统的 HTTP 协议相比,WebSocket 提供了更低的延迟和更高的互动性,使其成为构建实时应用的理想选择。无论…...
【RabbitMQ】rabbitmq在spring boot中的使用
rabbitmq官网地址:https://www.rabbitmq.com/tutorials 下面介绍rabbitmq官网中七种使用方式在spring boot中如何使用 下面是基于 Spring Boot 使用 RabbitMQ 实现这七种模式的示例代码。假设已经引入了以下依赖: Maven 依赖 <dependency><g…...
独立开发记录:使用Trae和Cloudflare快速搭建了自己的个人博客
前段时间我计划搭建个人博客,用于记录自己写的文章、录制的课程和开发的项目,于是结合 Trae AI IDE 与 Cloudflare 快速搭建并上线了人生第一个网站,在这个过程中,我整合了两种工具的优势(AI辅助开发 免费托管加速&a…...
文件解析漏洞详解
IIS解析漏洞 环境安装 windows2003iis6 IIS6.X ⽬录解析 在iis6.x中,.asp⽂件夹中的任意⽂件都会被当做asp⽂件去执⾏。 在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件 在x.asp中新建⼀个png⽂件。内容为<%now()%> asp代码。 外部浏览器中访问windows2003的i…...
自然语言处理:文本聚类
介绍 大家好,博主又来和大家分享自然语言处理领域的知识了。今天给大家分享的内容是自然语言处理中的文本聚类。 文本聚类在自然语言处理领域占据着重要地位,它能将大量无序的文本按照内容的相似性自动划分成不同的类别,极大地提高了文本处…...
【MySQL】基本操作 —— DDL
目录 DDLDDL 常用操作对数据库的常用操作查看所有数据库创建数据库切换、显示当前数据库删除数据库修改数据库编码 对表的常用操作创建表数据类型数值类型日期和时间类型字符串类型 查看当前数据库所有表查看指定表的创建语句查看指定表结构删除表 对表结构的常用操作给表添加字…...
玩转python:通俗易懂掌握高级数据结构:collections模块之namedtuple
引言 namedtuple是Python中collections模块提供的一个强大工具,用于创建具有字段名的元组。它不仅具备元组的不可变性,还能通过字段名访问元素,极大地提高了代码的可读性和可维护性。本文将详细介绍namedtuple的关键用法和特性,并…...
[GHCTF 2025]SQL??? 【sqlite注入】
梳理一下SQLite注入 常见指令 查看版本:sqlite_version() 列出附加数据库中的所有表:.tables 注入步骤 先查字段: 1 order by 5 # 三板斧: 0 union select 1,2,sql from sqlite_master; sql字段存储创建该数据库对象时所使…...
spring boot 发送邮件验证码
一、前置需求 1、准备邮箱 2、登录授权码 qq邮箱在–>设置–>账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启服务 二、发送邮件 1、简单邮件 包含邮件标题、邮件正文 2、引入mail启动器 <dependency><groupId>org.springframework.boot</groupI…...
[项目]基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及移植FreeRTOS
基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及debug模块 一.项目搭建二.移植FreeRTOS 一.项目搭建 先配置SYS系统滴答定时器来源为默认,因为其他定时器用来驱动电机了只能与FreeRTOS共用: 之后选择RCC配置芯片的时钟来源: 配置时钟树&am…...
Amazon RDS ProxySQL 探索(一)
:::info 💡 在日常开发中,开发者们会涉及到数据库的连接,在使用Amazon RDS数据库时,若使用集群模式或者多数据库时,会出现一写多读多个Endpoint,在实际开发中, 开发者们配置数据库连接通常希望走…...
高速PCB设计(布线设计)
以下是针对高速PCB布线设计的综合笔记,结合用户提供的设计规范及行业通用原则整理而成: 一、关键信号布线原则 布线优先级 顺序:射频信号>中/低频信号>时钟信号>高速信号射频信号需包地处理,线…...
《探秘人工智能与鸿蒙系统集成开发的硬件基石》
在科技飞速发展的当下,人工智能与鸿蒙系统的集成开发开辟了创新的前沿领域。这一融合不仅代表着技术的演进,更预示着智能设备生态的全新变革。而在这场技术盛宴的背后,坚实的硬件配置是确保开发顺利进行的关键,它就像一座大厦的基…...
使用Langflow和AstraDB构建AI助手:从架构设计到与NocoBase的集成
本文由 Leandro Martins 编写,最初发布于 Building an AI Assistant with Langflow and AstraDB: From Architecture to Integration with NocoBase。 引言 本文的目标是演示如何创建一个集成了 NocoBase、LangFlow 和 VectorDB 工具的 AI 助手。作为基础…...
【零基础入门unity游戏开发——unity3D篇】3D物理系统之 —— 3D刚体组件Rigidbody
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...
工程化与框架系列(30)--前端日志系统实现
前端日志系统实现 📝 引言 前端日志系统是应用监控和问题诊断的重要工具。本文将深入探讨前端日志系统的设计与实现,包括日志收集、处理、存储和分析等方面,帮助开发者构建完整的前端日志解决方案。 日志系统概述 前端日志系统主要包括以…...
小爱音箱控制家里的NAS将影片在电视上播放-deepseek帮助下实现-慎入openmanux
天始规划 我给ai一个任务,不过我没那么多能力,听说AI代理很行,这个任务我打算交给它.就用现在火的,openmanu,功能简单,我来安装openmanus,并规划任务. 进入openmanu首页 https://github.com/wjcroom/OpenManus openusa推荐使用uv管理,打算安装在家里的nas虚拟机.uv和python环…...
jQuery EasyUI 扩展
jQuery EasyUI 扩展 引言 jQuery EasyUI 是一个基于 jQuery 的易于使用的界面扩展库,它简化了网页界面的开发过程。随着 Web 技术的不断发展,越来越多的开发者开始寻求对 jQuery EasyUI 的扩展,以满足不同场景下的需求。本文将详细介绍 jQuery EasyUI 的扩展方法、技巧以及…...
笔试刷题专题(一)
文章目录 最小花费爬楼梯(动态规划)题解代码 数组中两个字符串的最小距离(贪心(dp))题解代码 点击消除题解代码 最小花费爬楼梯(动态规划) 题目链接 题解 1. 状态表示࿱…...
使用Docker部署前端应用到生产环境
前期准备 安装 Docker:确保你的开发机器和生产服务器都已经安装了 Docker。可以参考 Docker 官方安装指南 完成安装。准备前端项目:保证你的前端项目代码完整,并且能够在本地正常构建。 编写 Dockerfile Dockerfile 是用于构建 Docker 镜像…...
ES6(1) 简介与基础概念
1. ES6 简介 ES6(ECMAScript 6)是 JavaScript 的一个重要版本,它在 ES5 的基础上进行了扩展和优化。ES6 主要应用于现代 Web 开发,提高了 JavaScript 的编程效率和可读性。 2. ES6 与 JavaScript 的关系 JavaScript 是一种基于 E…...
redis数据库的介绍以及安装部署
一.redis数据库的介绍 借助nginx的upstream模块实现后端服务的负载均衡,如果后端服务采用的是会话的机制来识别客户端的身份,如果使用的调度算法是轮询算法的话,其中我们需要去做的就是实现后端服务的会话保持。 第一种换调度算法ÿ…...
MySQL数据库复杂的增删改查操作
在前面的文章中,我们主要学习了数据库的基础知识以及基本的增删改查的操作。接下去将以一个比较实际的公司数据库为例子,进行讲解一些较为复杂且现时需求的例子。 基础知识: 一文清晰梳理Mysql 数据库基础知识_字段变动如何梳理清楚-CSDN博…...
tomcat部署springboot+vue(不使用nginx)
1、首先将springboot项目打包为war包。 注意:将application.yml文件中添加以下信息: spring.jmx.enabledfalse 避免tomcat下部署多个项目,出现org.springframework.jmx.export.UnableToRegisterMBeanException:影响项目启动。 2、前段项目打…...
Flutter 从入门到进阶:构建跨平台应用的最佳实践
引言 Flutter 是 Google 推出的一款开源 UI 框架,能够帮助开发者使用 Dart 语言构建高性能、跨平台的移动、桌面和 Web 应用。它以 “一次编写,到处运行” 的特点吸引了众多开发者。Flutter 采用自绘 UI 渲染引擎(Skia)ÿ…...
ROS实践(三)机器人描述文件xacro(urdf扩展)
目录 一、定义 二、xacro 文件常见组成部分 1. 命名空间声明 2. 定义宏 3. 调用宏 4. 定义参数 5. 条件语句 6. 转换 xacro 文件为 urdf 7. gazebo标签 三、代码示例 1. gazebo标签使用(仿真参数配置) 2. 引用仿真配置并定义机器人模型&#x…...
微信小程序从右向左无限滚动组件封装(类似公告)
组件代码 wxml代码 <view class"container"><view class"text-wrapper"><!-- 这两个都不能删除,用来放无限滚动的,第一个滚完第二个接上,第二个滚完第一个又接上了 --><text class"scroll-text text1" style"left: …...
前端面试:axios 请求的底层依赖是什么?
在前端开发中,Axios 是一个流行的 JavaScript 库,用于发送 HTTP 请求。它简化了与 RESTful APIs 的交互,并提供了许多便利的方法与配置选项。要理解 Axios 的底层依赖,需要从以下几个方面进行分析: 1. Axios 基于 XML…...
【小白向】Ubuntu|VMware 新建虚拟机后打开 SSH 服务、在主机上安装vscode并连接、配置 git 的 ssh
常常有人问VMware-Tools装了也复制粘贴不了怎么办,这个东西影响因素太多了,具体解决办法你们可以参考一下:【经验】VMware|虚拟机只能使用鼠标无法使用键盘、装不了或装了VMware-Tools无法复制粘贴的可能解决办法_增强型键盘驱动程…...
UVC摄像头命令推流,推到rv1126里面去
ffmpeg命令查询UVC设备 .\ffmpeg.exe -list_devices true -f dshow -i dummy 上图是查询UVC设备的效果图,画红框的部分是UVC设备的设备名称"USB2.0 PC CAMERA"和设备号 "device_pnp_\\?\usb#vid_1908&pid_2310&mi_00#8&39abfe5&0&a…...
Node.js 与 MongoDB:高效的企业级应用开发
Node.js 与 MongoDB:高效的企业级应用开发 引言 随着互联网技术的飞速发展,企业级应用开发的需求日益增长。作为现代Web开发的重要工具,Node.js凭借其高性能、轻量级的特点,已经成为构建高效、可扩展后端服务的首选技术之一。而MongoDB作为一种流行的NoSQL数据库,以其灵…...
【大模型学习】第十九章 什么是迁移学习
目录 1. 迁移学习的起源背景 1.1 传统机器学习的问题 1.2 迁移学习的提出背景 2. 什么是迁移学习 2.1 迁移学习的定义 2.2 生活实例解释 3. 技术要点与原理 3.1 迁移学习方法分类 3.1.1 基于特征的迁移学习(Feature-based Transfer) 案例说明 代码示例 3.1.2 基于…...
sql-labs less-1-5wp
目录标题 less-1判断列数查找数据库和版本信息查找数据库中的表爆破users表的列爆破xx表xx列的数据 Less-2判断类型判断注释符和回显点爆破数据库和版本信息爆破security数据库的表爆破users表的列名爆破表中数据 Less-3判断类型判断注释符和回显点爆破爆破版本号和数据库爆数据…...
Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)
前言:作者在进行小游戏审核版本的过程中,碰到了下列问题,所以对这个抖音小游戏接入广告研究了下。 还有就是作者的TTSDK版本号是6.2.6,使用的Unity版本是Unity2022.3.29f1,最好和作者的两个版本号保持一致,因为我发现TTSDK旧版的很多函数在新版中就已经无法正常使用了,必…...
在Simulink中将Excel数据导入可变负载模块的方法介绍
文章目录 数据准备与格式要求Excel数据格式MATLAB预处理数据导入方法使用From Spreadsheet模块(直接导入Excel)通过MATLAB工作区中转(From Workspace模块)使用1-D Lookup Table模块(非线性负载映射)Signal Builder模块(变载工况导入)可变负载模块配置注意事项与调试在S…...
Html5记忆翻牌游戏开发经验分享
H5记忆翻牌游戏开发经验分享 这里写目录标题 H5记忆翻牌游戏开发经验分享前言项目概述技术要点解析1. 页面布局(HTML CSS)响应式设计 2. 翻牌动画效果3. 游戏逻辑实现状态管理卡片配对检测 开发技巧总结1. 模块化设计2. 性能优化3. 用户体验 踩坑经验扩…...
Centos离线安装openssl-devel
文章目录 Centos离线安装openssl-devel1. openssl-devel是什么?2. openssl-devel下载地址3. openssl-devel安装4. 安装结果验证 Centos离线安装openssl-devel 1. openssl-devel是什么? openssl-devel 是 Linux 系统中与 OpenSSL 加密库相关的开发包&…...
Spring Boot项目中集成sa-token实现认证授权和OAuth 2.0第三方登录
OAuth 2.0第三方登录 OAuth 2.0 是一种授权协议,允许第三方应用在不暴露用户密码的情况下访问用户的资源。它通常用于第三方登录场景,例如使用GitHub、Google等社交平台进行登录。 在sa-token框架中,OAuth 2.0第三方登录可以通过集成sa-tok…...