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

【Qt】之音视频编程1:QtAV的背景和安装篇

QtAV 背景与核心概念

1. 什么是 QtAV?

QtAV 是一个基于 Qt 框架FFmpeg 的多媒体播放库,旨在为 Qt 应用程序提供高性能、跨平台的音视频播放、处理及渲染功能。它封装了 FFmpeg 的底层编解码能力,并通过 Qt 的图形系统(如 QML、OpenGL)实现高效的视频渲染。


2. 开发背景
  • 起源
    QtAV 由开发者 Wang Bin 于2013年发起,初衷是解决 Qt 原生多媒体模块(如 PhononQt Multimedia)的局限性:
    • 功能不足:原生模块对现代视频格式(如 H.264/H.265)支持有限,且性能较低。
    • 依赖复杂:直接使用 FFmpeg 需要处理复杂的底层 API,而 QtAV 提供了更友好的 Qt 风格接口。
  • 目标用户
    需要嵌入音视频功能的 Qt 开发者(如视频编辑器、监控系统、流媒体播放器等)。

3. 核心特性
  • 跨平台支持
    支持 Windows、Linux、macOS、Android 和 iOS,依赖 Qt 的跨平台能力。
  • 高性能渲染
    利用硬件加速(如 DXVA2、VAAPI、VDPAU、OpenGL)提升解码和渲染效率。
  • 灵活的渲染方式
    支持多种后端:
    • OpenGL(默认,适合高性能场景)
    • QPainter(纯软件渲染,兼容性强)
    • Direct2D(Windows 专属)
    • GDI(传统方式,性能较低)
  • 功能丰富
    支持音视频同步、字幕加载、逐帧播放、滤镜(如旋转、裁剪)、网络流媒体(RTMP/HTTP)等。
  • 易用的 API
    提供 C++ 和 QML 两种接口,适合快速集成到 Qt 项目中。

4. 技术栈依赖
  • FFmpeg
    负责音视频解码(核心依赖 libavcodeclibavformat 等)。
  • Qt
    提供跨平台 GUI 支持和信号槽机制(需 Qt 5 或更高版本)。
  • 可选硬件加速库
    如 CUDA(NVIDIA)、MediaCodec(Android)等。

5. 与类似库的对比
库/模块优势局限性
QtAV功能全面,性能高,支持硬件加速需手动编译 FFmpeg 依赖
Qt Multimedia官方维护,简单易用功能较少,性能一般
VLC-Qt基于 VLC,格式支持广泛体积较大,License 限制(LGPL)
GStreamer管道化设计,灵活性强配置复杂,学习曲线高

6. 典型应用场景
  • 桌面播放器:如基于 Qt 的本地/网络视频播放器。
  • 视频监控:实时解码多路摄像头流。
  • 教育/会议系统:支持屏幕共享、字幕同步。
  • 嵌入式设备:如车载娱乐系统、工业控制界面。

7. 快速体验
// QML 示例:快速集成一个播放器
import QtAV 1.7
VideoOutput {source: "video.mp4"anchors.fill: parent
}
// C++ 示例:基本播放控制
QAVPlayer player;
player.setFile("video.mp4");
player.play();

8. 现状与未来
  • 维护状态
    目前 QtAV 更新较慢(最新版本为 1.13.0,2021年),但核心功能稳定。部分开发者转向基于 FFmpeg 的其他现代方案(如 QtMultimedia + FFmpeg 组合)。
  • 替代方案
    Qt 6 的 Qt Multimedia 模块已逐步增强,但对高级功能仍需第三方库补充。

实际应用

在实际手机应用开发中,QtAV 的使用场景有限,但并非完全不可行。是否选择它取决于具体需求和技术栈。以下是详细分析:


1. 手机端使用 QtAV 的可行性

适用场景
  • 跨平台 Qt 应用
    如果手机应用本身基于 Qt/QML 开发(如使用 Qt for Android/iOS),且需要高级音视频功能(如硬解码、自定义渲染),QtAV 是一个可选方案。
  • 功能需求复杂
    需要处理特殊视频格式(如 RTSP 监控流)、逐帧控制、滤镜等超出 Qt Multimedia 能力的场景。
不适用场景
  • 原生开发主导
    大多数手机应用采用原生开发(Android/Kotlin 或 iOS/Swift),直接使用平台专属库更高效(如 Android 的 MediaCodec/ExoPlayer 或 iOS 的 AVFoundation)。
  • 性能敏感场景
    QtAV 的跨平台抽象层可能带来额外性能开销,不如原生库优化彻底。

2. 手机端音视频的常见技术方案

平台/场景推荐方案优势
Android 原生MediaCodec + MediaPlayer/ExoPlayer官方支持,硬件加速完善,生态成熟
iOS 原生AVFoundation/AVPlayer低延迟,系统级优化
跨平台框架Flutter(video_player 插件)快速集成,适合简单播放需求
Qt 应用QtAV 或 Qt Multimedia + FFmpeg 定制适合已有 Qt 代码库的项目

3. QtAV 在手机端的局限性

  • 性能问题
    • 移动端硬件碎片化严重,QtAV 的硬件加速可能不如原生方案稳定。
    • 功耗优化较差,长时间解码可能增加电量消耗。
  • 依赖复杂度
    • 需要手动编译 FFmpeg 并链接到移动端项目(尤其是 iOS 需处理静态库和许可问题)。
    • 增加应用体积(FFmpeg 库通常较大)。
  • 维护风险
    QtAV 更新缓慢,对最新手机系统(如 Android 14/iOS 17)的适配可能滞后。

4. 实际案例参考

  • Qt 开发的工业/车载应用
    部分车载娱乐系统(基于 Qt)使用 QtAV 播放本地或网络视频。
  • 跨平台监控应用
    需要同时支持桌面和移动端的监控软件,可能选择 QtAV 保持代码统一。
  • 淘汰案例
    普通社交/短视频 App 通常转向原生方案(如 ExoPlayer)以获得更好的用户体验。

5. 替代建议

  • 若坚持 Qt 技术栈
    • 简单播放:优先尝试 Qt 6 的 Qt Multimedia(已支持更多格式)。
    • 高级功能:QtAV + 自定义 FFmpeg 编译(需权衡维护成本)。
  • 若可接受原生开发
    • Android:ExoPlayer(Google 推荐,支持 DASH/HLS/DRM)。
    • iOS:AVPlayer + AVAssetReader(精准帧控制)。
  • 跨平台框架
    • Flutter:video_player + ffmpeg_kit_flutter 插件。
    • React Native:react-native-video

总结

  • 能用但慎用:QtAV 适合已有 Qt 基础且需要复杂音视频功能的手机应用,但需面对性能和维护挑战。
  • 推荐原生方案:大多数情况下,手机端音视频开发应优先选择平台专属库(Android/iOS),它们在性能、功耗和生态支持上更具优势。

QtAV 编译与安装指南

QtAV 是一个基于 QtFFmpeg 的多媒体播放库,支持跨平台(Windows、Linux、macOS、Android、iOS)。以下是详细的编译安装步骤:


1. 环境准备

1.1 依赖安装

(1) 安装 Qt
  • 下载 Qt:从 Qt 官网 安装 Qt 5.15+Qt 6.x(建议使用 Qt 5.15 LTS)。
  • 确保包含以下模块
    • QtCoreQtGuiQtWidgets(C++ 开发)
    • QtQuickQtQml(QML 开发)
    • QtMultimedia(可选,用于对比测试)
(2) 安装 FFmpeg

QtAV 依赖 FFmpeg 进行音视频解码,需要手动编译或安装预编译版本:

  • Linux (Ubuntu/Debian):
    sudo apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
    
  • macOS (Homebrew):
    brew install ffmpeg
    
  • Windows
    • 下载 FFmpeg sharedstatic 版本(如 gyan.dev)。
    • 解压后添加 bin 目录到系统 PATH
(3) 可选依赖(硬件加速)
  • OpenGL(默认渲染方式)
  • CUDA(NVIDIA GPU 加速)
  • VAAPI/VDPAU(Linux 视频加速)

2. 获取 QtAV 源码

git clone https://github.com/wang-bin/QtAV.git
cd QtAV
git submodule update --init  # 更新子模块(如果有)

3. 编译 QtAV

3.1 使用 qmake 编译(推荐)

(1) 生成 Makefile
mkdir build
cd build
qmake ../QtAV.pro  # 默认使用系统 FFmpeg

自定义 FFmpeg 路径(如果 FFmpeg 不在系统路径):

qmake ../QtAV.pro "FFMPEG_HOME=/path/to/ffmpeg"
(2) 编译并安装
make -j4       # 多线程编译(根据 CPU 核心数调整)
sudo make install  # 安装到系统(Linux/macOS)
  • Windows 下直接运行 nmake(MSVC)或 mingw32-make(MinGW)。
(3) 验证安装
  • 头文件默认安装到 /usr/local/include/QtAV(Linux/macOS)或 C:\QtAV(Windows)。
  • 动态库(.so/.dll)安装到系统库目录。

3.2 使用 CMake 编译(可选)

mkdir build
cd build
cmake .. -DQt5_DIR=/path/to/Qt5 -DFFMPEG_HOME=/path/to/ffmpeg
cmake --build . --parallel
sudo cmake --install .

4. 运行测试

4.1 测试命令行播放器

QtAVPlayer  # 或直接运行编译生成的 player 示例

如果提示找不到库,设置环境变量:

  • Linux/macOS:
    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    
  • Windows:
    set PATH=C:\path\to\QtAV\bin;%PATH%
    

4.2 测试 QML 播放器

import QtQuick 2.0
import QtAV 1.7VideoOutput {source: "file:///path/to/video.mp4"anchors.fill: parent
}

5. 常见问题

5.1 FFmpeg 版本不兼容

  • 确保 FFmpeg 版本 ≥ 4.0(推荐 5.x)。
  • 如果报错 undefined symbol: avcodec_receive_frame,可能是 FFmpeg API 变更,需重新编译 QtAV。

5.2 找不到 QtAV 模块

  • QML 报错 module "QtAV" is not installed
    sudo cp -r /usr/local/qml/QtAV /path/to/Qt/qml/  # 手动复制 QML 插件
    

5.3 硬件加速失败

  • 检查 OpenGL 驱动是否正常:
    glxinfo | grep OpenGL  # Linux
    
  • 尝试切换渲染后端:
    VideoOutput {renderer: OpenGL  // 可选:QPainter、Direct2D(Windows)
    }
    

6. 卸载 QtAV

sudo make uninstall  # qmake 方式
# 或手动删除安装的文件:
sudo rm -rf /usr/local/include/QtAV /usr/local/lib/libQtAV* /usr/local/qml/QtAV

总结

步骤关键命令/操作
1. 安装依赖Qt + FFmpeg
2. 克隆源码git clone https://github.com/wang-bin/QtAV.git
3. 编译安装qmake + make + make install
4. 测试QtAVPlayer 或 QML 示例

windows的免编译安装(实测可用)

1. 环境准备

需要自己在windows环境安装QtCreator(Qt)
并按照下面的安装指导安装QtAV的库

2. 安装包下载

  • 下面这个网站可以下载自己想要的MinGW64/32 或 VS版本的成品库(或库安装包)
    https://sourceforge.net/projects/qtav/files/release/
    文章附了两个已经下载好的软件包
  • 下载注意:可能下载不到需要点击Problems Downloading? – 选择一个可用节点(需要自己试)
    在这里插入图片描述
  • 需要下载ffmpeg开发包:
    https://sourceforge.net/projects/avbuild/files/windows-desktop/

3. 头文件安装

  • 把QtAV包和ffmpeg包 中的头文件拷贝到 Qt的头文件路径中
    在这里插入图片描述

4.环境变量设置

  • 不管自己下载的是压缩包还是exe文件,把它解压到指定路径,比如D:\program\QtAV1.4.2MinGW64

目录形式

  • bin 目录 (可能带有ffmpeg库文件,也可能没带。没带是因为它把ffmpeg库和QtAV库集成在一起了所以它会很大)
    在这里插入图片描述
    在这里插入图片描述
  • 把bin路径添加到环境变量中
    在这里插入图片描述

测试例子

  • .pro文件添加:
    版本1:(bin目录中没带ffmpeg的库:avcodec.dll)
# 指定QtAV路径
LIBS += -L D:/program/QtAV1.4.2MinGW64/bin \-lQt5AV1 \-lQt5Widgets

版本2:(bin目录中带有ffmpeg的库:avcodec.dll)

# 指定QtAV路径
LIBS += -L D:/program/QtAV1.11.0MinGW32/bin \-lQtAV1 \-lQtAVWidgets1-lavcodec-57-lavformat-57-lavutil-55-lswscale-4
  • main.cpp:
#include <QtAV/QtAV>
#include <QtAVWidgets/QtAVWidgets>
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 1. 创建播放器和视频输出QtAV::AVPlayer player;QtAV::WidgetRenderer renderer;  // 替代旧的VideoOutput// 2. 设置窗口属性renderer.widget()->setWindowTitle("QtAV Player");renderer.widget()->resize(800, 600);renderer.widget()->show();// 3. 关联播放器和渲染器(新API)player.setRenderer(&renderer);// 4. 播放视频player.play("../player/test.mp4");return a.exec();
}

在这里插入图片描述

  • 效果
    注意:头文件及环境变量安装完成后 才能打开Qt软件新建项目
    在这里插入图片描述

相关文章:

【Qt】之音视频编程1:QtAV的背景和安装篇

QtAV 背景与核心概念 1. 什么是 QtAV&#xff1f; QtAV 是一个基于 Qt 框架 和 FFmpeg 的多媒体播放库&#xff0c;旨在为 Qt 应用程序提供高性能、跨平台的音视频播放、处理及渲染功能。它封装了 FFmpeg 的底层编解码能力&#xff0c;并通过 Qt 的图形系统&#xff08;如 QM…...

Centos7安装部署wordpress个人博客保姆级教程

目录 关闭防火墙修改yum镜像源安装 php安装mysql安装nginx关闭SELinux配置nginx转发php文件到fpm服务下载wordpress与配置 centos: 7 php:8.1.29 wordpress:6.8.1 nginx:1.26.1 mysql:5.6.51 关闭防火墙 # 停止防火墙 systemctl stop firewalld # 禁止开启启动 systemctl …...

Python-简单网络编程 I

目录 一、UDP 网络程序1. 通信结构图2. Python 代码实现1&#xff09;服务器端2&#xff09;客户端 3. 注意 二、TCP 网络程序1. 通信结构图2. Python 代码实现1&#xff09;服务器端2&#xff09;客户端 3. 注意 三、文件下载1. PyCharm 程序传参1&#xff09;图形化界面传参2…...

深入浅出之STL源码分析8_三个指针

引言 在第一篇文章 深入浅出之STL源码分析1_vector基本操作-CSDN博客 中有引出了下面的几个问题 1.刚才我提到了我的编译器版本是g 11.4.0&#xff0c;而我们要讲解的是STL&#xff08;标准模板库&#xff09;&#xff0c;那么二者之间的关系是什么&#xff1f;STL安装后我们…...

数据结构(七)——图

一、图的定义与基本术语 1.图的定义 图G由顶点集V和边集E组成&#xff0c;记为G(V,E)&#xff0c;其中V(G)表示图G中顶点的有限非空集&#xff1b;E(G)表示图G中顶点之间的关系&#xff08;边&#xff09;的集合 注意&#xff1a;线性表可以是空表&#xff0c;树可以是空树&…...

养生:打造健康生活的全方位策略

在生活节奏不断加快的当下&#xff0c;养生已成为提升生活质量、维护身心平衡的重要方式。从饮食、运动到睡眠&#xff0c;再到心态调节&#xff0c;各个方面的养生之道共同构建起健康生活的坚实基础。以下为您详细介绍养生的关键要点&#xff0c;助您拥抱健康生活。 饮食养生…...

数据结构(2)线性表-顺序表

知道一个算法的好坏怎么去判断以后&#xff0c;就该正式的去学习一些常见的数据结构&#xff0c;当然&#xff0c;这里的数据结构仅仅是初阶&#xff0c;不会挨个一个一个学完&#xff0c;后期慢慢来。 一、数据结构总论 一般按照逻辑结构和存储结构来分类&#xff0c;在初阶…...

【深度学习-Day 10】机器学习基石:从零入门线性回归与逻辑回归

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

芯片:金线的作用

一、金线的核心作用&#xff1a;互联芯片与外部封装 金线&#xff08;Gold Wire&#xff09;在芯片制造中主要用于引线键合&#xff08;Wire Bonding&#xff09;&#xff0c;这是将芯片&#xff08;Die&#xff09;与外部封装引脚&#xff08;Lead Frame或Substrate&#xff…...

Vue3+uniapp 封装axios

1.第一步在项目根目录新建utils文件夹&#xff0c;里边新建两个文件request.js和uni-api-promisify.js 2.request.js 代码 要安装axios import axios from axios import { showToast } from /utils/uni-api-promisify// 创建axios实例 const service axios.create({baseURL:…...

Nacos源码—9.Nacos升级gRPC分析七

大纲 10.gRPC客户端初始化分析 11.gRPC客户端的心跳机制(健康检查) 12.gRPC服务端如何处理客户端的建立连接请求 13.gRPC服务端如何映射各种请求与对应的Handler处理类 14.gRPC简单介绍 10.gRPC客户端初始化分析 (1)gRPC客户端代理初始化的源码 (2)gRPC客户端启动的源码…...

与智能体高效协作:Kimi交互逻辑探索与提示词设计实践【附kimi提示词合集下载】

引言&#xff1a;智能时代的人机协作新范式 在持续使用多款AI助手完成技术文档分析、数据分析等任务后&#xff0c;我逐渐意识到工具效能的核心不仅在于技术参数&#xff0c;更在于使用者对交互逻辑的理解深度。本文将基于实际项目经验&#xff0c;探讨智能体交互的本质规律&a…...

Web 架构之负载均衡会话保持

文章目录 一、引言二、思维导图三、负载均衡会话保持的概念3.1 定义3.2 作用 四、负载均衡会话保持的实现方式4.1 基于 IP 地址原理代码示例&#xff08;以 Nginx 为例&#xff09;注释 4.2 基于 Cookie原理代码示例&#xff08;以 HAProxy 为例&#xff09;注释 4.3 基于 SSL …...

遨游卫星电话与普通手机有什么区别?

在数字化浪潮席卷全球的今天&#xff0c;通信设备的角色早已超越传统语音工具&#xff0c;成为连接物理世界与数字世界的核心枢纽。然而&#xff0c;当普通手机在都市丛林中游刃有余时&#xff0c;面对偏远地区、危险作业场景的应急通信需求&#xff0c;其局限性便显露无遗。遨…...

【Redis】谈谈Redis的设计

Redis&#xff08;Remote Dictionary Service&#xff09;是一个高性能的内存键值数据库&#xff0c;其设计核心是速度、简单性和灵活性。以下从架构、数据结构、持久化、网络模型等方面解析 Redis 的设计实现原理&#xff1a; 1. 核心设计思想 内存优先&#xff1a;数据主要存…...

聊天项目总结

目前项目 完成了个人信息修改&#xff0c;添加好友&#xff0c;创建群聊&#xff0c;添加群聊&#xff0c;在线状态&#xff0c;删除好友&#xff0c;退出群&#xff0c;解散群&#xff0c;好友申请&#xff0c;群资料修改&#xff0c;群管理&#xff0c;群主转让&#xff0c;…...

智能手表整机装配作业指导书(SOP)

&#x1f4c4; 智能手表整机装配作业指导书&#xff08;SOP&#xff09; 产品名称&#xff1a;Aurora Watch S1 产品型号&#xff1a;AWS1-BG22 版本号&#xff1a;SOP-AWS1-V1.0 编制日期&#xff1a;2025年5月6日 编制单位&#xff1a;制造工程部&#xff08;ME&#xff09;…...

c语言第一个小游戏:贪吃蛇小游戏05

贪吃蛇脱缰自动向右走&#xff1a;脱缰的野蛇 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake *head; struct snake *tail; void initNcurse() { initscr(); keypad(stdscr,1); } int …...

ES6中的解构

在 JavaScript&#xff08;包括 TypeScript&#xff09;中&#xff0c;数组解构和对象解构是 ES6 引入的两个非常实用的语法特性&#xff0c;它们可以帮助我们更方便地从数组或对象中提取数据。 一、数组解构&#xff08;Array Destructuring&#xff09; &#x1f4cc; 基本用…...

Pycharm的终端执行allure命令出现command not found

Pycharm的接口自动化项目用的是venv虚拟环境&#xff0c;已下载和配置好Allure路径&#xff0c;查看Allure版本正常。 问题&#xff1a;在重新打开Pycham的项目时&#xff0c;在Pycharm终端中执行allure相关命令就会报错zsh: allure: command not found 原因&#xff1a;在PyC…...

[ctfshow web入门] web72

信息收集 下载index.php并查看&#xff0c;和上题差不多 error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗&#xff1f; if(isset($_POST[c])){$c $_POST[c];eval($c);$s ob_get_contents();ob_end_clean();echo preg_replace("/[0-9]|[a-z]/i",…...

【Folium】使用离线地图

文章目录 相关文献离线地图下载Folium 使用离线地图 相关文献 Folium — Folium 0.19.5 documentationOffline Map Maker 离线地图下载 我们使用 Offline Map Maker 进行地图下载。 特别注意&#xff1a;Folium 默认支持 WGS84 坐标系&#xff0c;建议下载 WGS84 坐标系的地…...

嵌入式自学第二十天(5.13)

&#xff08;1&#xff09;线性表顺序存储的优缺点&#xff1a; 优点&#xff1a;无需为表中逻辑关系添加额外存储空间&#xff1b; 可以快速随机访问元素&#xff0c;时间复杂度O(1)。 缺点&#xff1a;插入删除需要移动元素O(n&#xff09;&#xff1b; 无法动态存储。 …...

ThingsBoard3.9.1 MQTT Topic(4)

本章中的主题适用于网关设备。 1.网关订阅设备属性的topic&#xff1a;v1/gateway/attributes/response 订阅后接收到的响应格式。 { "id":3, "device":"m1", "values":{ "version":"V1.2"…...

centos中JDK_PATH 如何设置

在 CentOS 7.9 中设置 JDK_PATH&#xff08;即 JAVA_HOME&#xff09;的步骤如下。JAVA_HOME 是一个环境变量&#xff0c;用于指向 Java 开发工具包&#xff08;JDK&#xff09;的安装路径。 1. 查找 JDK 安装路径 首先&#xff0c;你需要找到 JDK 的安装路径。可以通过以下命…...

一次讲清 FP32 / FP16 / BF16 / INT8 / INT4

一次讲清 FP32 / FP16 / BF16 / INT8 / INT4 目标&#xff1a;让你3 分钟读懂格式原理&#xff0c;5 分钟学会选型。 只记一句&#xff1a;“指数定范围&#xff0c;尾数定精度&#xff1b;位宽定显存&#xff0c;硬件定成本”。 1 | 为什么要有这么多格式&#xff1f; …...

PH热榜 | 2025-05-13

1. FirstQuadrant 标语&#xff1a;通过以人为本的人工智能来最大化B2B销售 介绍&#xff1a;销售人工智能&#xff0c;帮助创始人和收益团队提高效率&#xff0c;保持组织有序&#xff0c;并促成更多交易。它通过简化销售幕后工作&#xff0c;确保每个细节都不会遗漏。 产品…...

java基础-泛型

文章目录 目录 文章目录 前言 一、泛型的作用 1.类型安全 2.通用性 这里再举个例子 二、泛型的实现 1.泛型类 2.泛型接口 3.泛型方法 4.T符号的起源&#xff08;额外&#xff09; 三、泛型擦除 四、泛型通配符 1.上界通配符&#xff08; &#xff09; 为什么用于…...

对抗帕金森:在疾病阴影下,如何重掌生活主动权?

帕金森病&#xff0c;一种影响全球超 1000 万人的神经退行性疾病&#xff0c;正无声地改变着患者的生活轨迹。随着大脑中多巴胺分泌减少&#xff0c;患者逐渐出现肢体震颤、肌肉僵硬、步态迟缓等症状&#xff0c;甚至连扣纽扣、端水杯这类日常动作都变得艰难。更棘手的是&#…...

网络协议与系统架构分析实战:工具与方法全解

网络协议与系统架构分析实战&#xff1a;工具与方法全解 在互联网系统的开发、运维与安全分析中&#xff0c;协议解析与抓包分析是不可或缺的核心技能。本文将系统梳理主流协议解析工具、协议自动识别方案&#xff0c;并结合实际抓包案例&#xff0c;讲解如何还原和推测底层系…...

使用PocketFlow构建Web Search Agent

前言 本文介绍的是PocketFlow的cookbook中的pocketflow-agent部分。 回顾一下PocketFlow的核心架构&#xff1a; 每一个节点的架构&#xff1a; 具体介绍可以看上一篇文章&#xff1a; “Pocket Flow&#xff0c;一个仅用 100 行代码实现的 LLM 框架” 实现效果 这个Web S…...

基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计

一、简介: ADAU1701JSTZ-RL 是一款高性能音频编解码器 (Codec),专为便携式和低功耗应用设计。它集成了 ADC、DAC、麦克风前置放大器、耳机放大器和数字信号处理功能,支持 I2S/PCM 音频接口和 I2C 控制接口,非常适合与 STM32 微控制器配合使用。 二、硬件接口: 典型的 ST…...

轻量级高性能推理引擎MNN 学习笔记 02.MNN主要API

1. MNN 主要API 注意&#xff1a;本学习笔记只介绍了我在学习过程中常用的API &#xff0c;更多MNN API 请参考官方文档。 1.1. 推理时操作流程 创建Interpreter &#xff1a; createFromFile()通过Interpreter创建Session &#xff1a;createSession()设置输入数据: getSes…...

STM32 ADC 模数转换器详解:原理、配置与应用

STM32 ADC 模数转换器详解&#xff1a;原理、配置与应用 在嵌入式系统中&#xff0c;模数转换&#xff08;ADC&#xff09;是实现传感器信号采集、信号处理等任务的关键环节。STM32 微控制器作为一款功能强大的 32 位微控制器&#xff0c;其内置的 ADC 模块为开发者提供了高效…...

18.Excel数据透视表:第1部分创建数据透视表

一 什么是数据透视表 通过万花筒可以用不同的方式査看里面画面图像&#xff0c;在excel中可以将数据透视表看作是对准数据的万花筒&#xff0c;用不同角度去观察数据&#xff0c;也可以旋转数据&#xff0c;对数据进行重新排列&#xff0c;对大量的数据可以快速的汇总和建立交叉…...

AI 模型训练轻量化技术在军事领域的实战应用与技术解析

AI 模型训练轻量化技术在军事领域的实战应用与技术解析 一、引言 在人工智能与军事领域深度融合的当下&#xff0c;AI 模型训练轻量化技术正成为破解战场资源限制的关键钥匙。通过模型压缩、量化、剪枝等核心技术&#xff0c;轻量化模型在算力受限、通信不稳定的复杂战场环境中…...

科学养生,开启健康生活

在快节奏的现代生活中&#xff0c;健康养生成为人们关注的焦点。科学合理的养生方式&#xff0c;无需依赖传统医学理论&#xff0c;也能有效提升生活质量&#xff0c;为身体注入活力。​ 均衡饮食是养生的基础。每天应保证摄入足够的蛋白质、碳水化合物和脂肪&#xff0c;同时…...

高效跨平台文件传输与管理的工具

软件介绍 这款名为 Coolmuster Mobile Transfer 的工具是一款多平台支持的文件传输工具&#xff0c;能高效地在不同设备间进行文件传输与管理。 适用场景 它适用于多种场景&#xff0c;无论是个人文件整理、家庭成员间资料共享&#xff0c;还是企业场景下的工作文件处理&…...

如何优化 Linux 服务器的磁盘 I/O 性能

# 优化 Linux 服务器磁盘 I/O 性能的全面指南 ## 1. 识别 I/O 瓶颈 首先确定是否存在 I/O 瓶颈以及瓶颈位置&#xff1a; bash # 使用 iostat 查看磁盘 I/O 统计 iostat -x 1 # 使用 iotop 查看进程级 I/O 使用情况 iotop # 使用 vmstat 查看系统整体 I/O 情况 vmstat 1 …...

Python基础学习-Day23

目录 基础概念转换器&#xff08;transformer&#xff09;估计器&#xff08;estimator&#xff09;管道&#xff08;pipeline&#xff09; 实例pipeline 基础概念 pipeline在机器学习领域可以翻译为“管道”&#xff0c;也可以翻译为“流水线”&#xff0c;是机器学习中一个重…...

【Ubuntu】扩充磁盘大小

sudo apt-get install gparted 安装完成后&#xff0c;搜索gparted软件&#xff0c;打开gparted 参考...

数据治理域——日志数据采集设计

摘要 本文主要介绍了Web页面端日志采集的设计。首先阐述了页面浏览日志采集&#xff0c;包括客户端日志采集的实现方式、采集内容及技术亮点。接着介绍了无线客户端端日志采集&#xff0c;包括UserTrack的核心设计、移动端与浏览器端采集差异以及典型应用场景崩溃分析。最后探…...

Dinky 安装部署并配置提交 Flink Yarn 任务

官方文档 https://www.dinky.org.cn/docs/1.1/deploy_guide/normal_deploy 版本 dinky 1.1.0、1.2.3 当前最新发布版本为 1.2.3 &#xff0c;但是官方文档最新稳定版为 1.1 &#xff0c;所以先选择 1.1.0&#xff0c;验证通过后&#xff0c;再尝试 1.2.3 &#xff0c;发现 1…...

杰理-701-手表sdk无法电脑连接经典蓝牙

杰理-701-手表sdk无法电脑连接经典蓝牙 只有手机可以连接经典蓝牙播放音乐&#xff0c;电脑无法连接&#xff0c;需要关闭emitter功能 交流q群&#xff1a;187115320...

Timsort 算法

文章目录 1 基础理解1.1 定义和原理1.2 工作原理 2 算法实现2.1 Python 代码实现2.1.1 代码2.1.2 核心逻辑计算最小运行长度&#xff08;calc_min_run(n)&#xff09;插入排序&#xff08;insertion_sort(arr, left, right)&#xff09; 2.2 Java 代码实现2.3 C 代码实现 3 逻辑…...

Go构建高并发权重抽奖系统:从设计到优化全流程指南

引言&#xff1a;为何需要专业抽奖系统&#xff1f; 在现代互联网应用中&#xff0c;抽奖系统被广泛用于营销活动、用户激励等场景。一个好的抽奖系统需要满足&#xff1a; 公平性&#xff1a;确保概率分布准确高性能&#xff1a;支持高并发抽奖请求安全性&#xff1a;防止作…...

深度学习计算

深度学习的飞速发展离不开强大的计算能力支撑。从张量计算到 GPU 加速&#xff0c;从自动微分到分布式计算&#xff0c;深度学习计算的每一项技术都如同精密仪器中的关键齿轮&#xff0c;推动着模型性能的不断提升。本文深入剖析深度学习计算的核心技术、优化策略以及前沿趋势&…...

【Bluedroid】蓝牙 HID DEVICE 初始化流程源码解析

本文深入剖析Android蓝牙协议栈中HID设备&#xff08;BT-HD&#xff09;服务的初始化与启用流程&#xff0c;从接口初始化、服务掩码管理、服务请求路由到属性回调通知&#xff0c;完整展现蓝牙HID服务激活的技术路径。通过代码逻辑梳理&#xff0c;揭示服务启用的核心机制&…...

Kotlin 中的 Unit 类型的作用以及 Java 中 Void 的区别

在 Kotlin 中&#xff0c;Unit 类型和 Java 中的 void 关键字都用于表示“没有返回值”的函数&#xff0c;但它们在设计理念、类型系统和实际使用中有显著的区别。 1 Kotlin 中的 Unit 类型 表示无返回值&#xff1a; 当函数不返回有意义的值时&#xff0c;Kotlin 使用 Unit …...

Gemini 2.5 推动视频理解进入新时代

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...