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

Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)

【写在前面】

        之前应公司需要,给公司写过一整套直播的库( 推拉流,编解码),类似于 libobs

        结果后来因为没有相关项目,便停止开发&维护了。

        不过里面很多有用的组件,然后也挺好用的,遂开源出来一部分。

        因此,本篇就简单讲一下用法。


【正文开始】

        关于 AnyCapture:

AnyCapture 是一个基于 Qt 的回调式采集库。

它简化了各类采集实现(包装),提供相当方便的接口,旨在能够轻松集成以实现采集相关工作。

        采集目标:

  • 轻松采集屏幕, ScreenCapture 提供多种采集模式(GDI/DX9/DXGI),AnyCapture 默认将自动选择

  • 轻松采集相机, CameraCapture 使用 Qt Multimedia 完成采集工作。

  • 轻松采集音频输入&输出, AudioCapture 使用 WASAPI(Windows)。

最多支持采集1个屏幕&1个相机&1个音频输入&1个音频输出, 然而可简单实例多个(无需担心资源占用)实现多路采集。

        如何构建:

1、构建 libyuvconvertor, 为 libyuv 浅包装, 构建文件 /libyuvconvertor/libyuvconvertor.pro。

2、构建 anycapture, 构建文件 anycapture.pro。

         如何使用:

1、使用 availableCameras() / availableScreens() / availableAudioInputs() / availableAudioOutputs() 获取有效设备。

2、使用 startCapture*() 开启采集, 采集到的资源将通过回调传递。

3、使用 stopCapture*() 停止采集。

          AnyCapture 接口说明:

    /*** @brief 获取有效的相机列表* @return QList<CameraDevice>*/static QList<any_capture::CameraDevice> availableCameras();/*** @brief 开始采集相机* @param info 要采集的相机信息{使用 @link availableCameras() 获取}* @param settings 相机设置* @param format 输出图像格式* @param callback 采集回调{为空则可使用 @link grabCameraFrame() 抓取}* @param master 采集回调指针* @return bool{true:成功; false:失败}*/bool startCaptureCamera(const QCameraInfo &info, const QCameraViewfinderSettings &settings, any_capture::OutputVideoFormat format, any_capture::capture_callback callback, void *master);/*** @brief 抓取一帧相机帧* @warning 需要先使用{@link startCaptureCamera()}* @return QVideoFrame*/QVideoFrame grabCameraFrame() const;/*** @brief 停止采集相机*/void stopCaptureCamera();/*** @brief 获取有效的屏幕列表* @return QList<QScreen *>*/static QList<QScreen *> availableScreens();/*** @brief 开始采集屏幕* @param captureScreen 要采集的屏幕{使用 @link availableScreens() 获取}* @param captureFrameRate 捕获帧率* @param captureCursor 是否捕获光标* @param format 输出图像格式* @param callback 采集回调{为空则不会采集,但可使用 @link grabScreen() 抓取}* @param master 采集回调指针* @return bool{true:成功; false:失败}*/bool startCaptureScreen(QScreen *captureScreen, int captureFrameRate, bool captureCursor, any_capture::OutputVideoFormat format, any_capture::capture_callback callback, void *master);/*** @brief 抓取一帧屏幕* @warning 需要先使用{@link startCaptureScreen()}* @return QImage*/QImage grabScreen() const;/*** @brief 停止采集屏幕*/void stopCaptureScreen();/*** @brief 获取有效的音频输入* @return QList<any_capture::AudioDevice>*/static QList<any_capture::AudioDevice> availableAudioInputs();/*** @brief 开始采集音频输入* @param input 要采集的音频输入* @param callback 采集回调* @param master 采集回调指针* @return bool{true:成功; false:失败}*/bool startCaptureAudioInput(const any_capture::AudioDevice &input, any_capture::capture_callback callback, void *master);/*** @brief 停止采集音频输入*/void stopCaptureAudioInput();/*** @brief 获取有效的音频输出* @return QList<any_capture::AudioDevice>*/static QList<any_capture::AudioDevice> availableAudioOutputs();/*** @brief 开始采集音频输出* @param output 要采集的音频输出* @param callback 采集回调* @param master 采集回调指针* @return bool{true:成功; false:失败}*/bool startCaptureAudioOutput(const any_capture::AudioDevice &output, any_capture::capture_callback callback, void *master);/*** @brief 停止采集音频输出*/void stopCaptureAudioOutput();

【结语】

        注意:AudioCapture / ScreenCapture / CameraCapture 都可以单独使用。

        项目链接(多多star呀..⭐_⭐):

        CSDN 的:https://download.csdn.net/download/u011283226/89067080?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://download.csdn.net/download/u011283226/89067080?spm=1001.2014.3001.5501        Github 的:https://github.com/mengps/AnyCaptureicon-default.png?t=N7T8https://github.com/mengps/AnyCapture

相关文章:

Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)

【写在前面】 之前应公司需要&#xff0c;给公司写过一整套直播的库( 推拉流&#xff0c;编解码)&#xff0c;类似于 libobs。 结果后来因为没有相关项目&#xff0c;便停止开发&维护了。 不过里面很多有用的组件&#xff0c;然后也挺好用的&#xff0c;遂开源出来一部分。…...

将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件

实现文件流PDF不需要预览直接调用打印机打印实现方案就是&#xff0c;将写好的打印机代码打包成jar包然后直接注册成windows服务&#xff0c;然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件。源码地址...

加密软件VMProtect教程:使用脚本-功能

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…...

51单片机入门_江协科技_21.1_开发板USB口连接建议

1. 目前我自己用的普中A2版本的开发板&#xff0c;操作失误导致在开发板连接电脑并通电的情况下误将跳线帽触碰到开发板的3.3V与GND&#xff0c;导致USB口浪涌&#xff0c;2个电脑上面的USB口烧毁&#xff0c;开发板暂时没有任何问题&#xff0c;电脑USB口现在只是接通后有电&a…...

基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证

基于Spring Boot3实现Spring Security6 JWT Redis实现登录、token身份认证。 用户从数据库中获取。使用RESTFul风格的APi进行登录。使用JWT生成token。使用Redis进行登录过期判断。所有的工具类和数据结构在源码中都有。 系列文章指路&#x1f449; 系列文章-基于SpringBoot3…...

Kubernetes(k8s):精通 Pod 操作的关键命令

Kubernetes&#xff08;k8s&#xff09;&#xff1a;精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…...

【随笔】Git 高级篇 -- 相对引用2(十三)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…...

xilinx AXI CAN驱动开发

CAN收发方案有很多&#xff0c;常见的解决方案通过是采用CAN收发芯片&#xff0c;例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现&#xff0c;AXI CAN是其中一种&#xff1b; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…...

Python:百度AI开放平台——OCR图像文字识别应用

一、注册百度AI开放平台 使用百度AI服务的步骤为&#xff1a; 注册&#xff1a;注册成为百度AI开放平台开发者&#xff1b;创建AI应用&#xff1a;在百度API开放平台上创建相关类型的的AI应用&#xff0c;获得AppID、API Key和Secret Key&#xff1b;调用API&#xff1a;调用…...

OpenEuler/Centos制作离线软件源

需求背景&#xff1a; 一般线上服务器都是不能连接外网&#xff0c;服务器安装好系统之后就需要部署相关软件&#xff0c;此时因为无法联网导致无法下载软件&#xff0c;所以都会做一个本地的离线软件源&#xff0c;本文简单介绍如何快速利用已经下载好的rpm包&#xff0c;制作…...

论文笔记:基于多粒度信息融合的社交媒体多模态假新闻检测

整理了ICMR2023 Multi-modal Fake News Detection on Social Media via Multi-grained Information Fusion&#xff09;论文的阅读笔记 背景模型实验 背景 在假新闻检测领域&#xff0c;目前的方法主要集中在文本和视觉特征的集成上&#xff0c;但不能有效地利用细粒度和粗粒度…...

攻防世界 xff_referer 题目解析

xff_referer 一&#xff1a;了解xxf和Referer X-Forwarded-For:简称XFF头&#xff0c;它代表客户端&#xff0c;也就是HTTP的请求端真实的IP&#xff0c;只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。 一般的客户端发送HTTP请求没有X-Forwarded-For头的&#xff0…...

open-cd框架调试记录

源于论文Changer: Feature Interaction Is What You Need forChange Detection 源码位置&#xff1a;open-cd/README.md at main likyoo/open-cd (github.com) 同样是基于MMSegmentation框架的代码&#xff0c;不符合本人编程习惯所以一直也没有研究这东西&#xff0c;近期打…...

【算法刷题day17】Leetcode:110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

文章目录 Leetcode 110.平衡二叉树解题思路代码总结 Leetcode 257. 二叉树的所有路径解题思路代码总结 Leetcode 404.左叶子之和解题思路代码总结 草稿图网站 java的Deque Leetcode 110.平衡二叉树 题目&#xff1a;** 110.平衡二叉树** 解析&#xff1a;代码随想录解析 解题思…...

Linux云计算之Linux基础2——Linux发行版本的安装

目录 一、彻底删除VMware 二、VMware-17虚拟机安装 三、MobaXterm 安装 四、Centos 发行版 7.9的安装 五、rockys 9.1的安装 六、ubuntu2204的安装 一、彻底删除VMware 在卸载VMware虚拟机之前&#xff0c;要先把与VMware相关的服务和进程终止 1. 在windows中按下【Windo…...

C++:赋值运算符(17)

赋值也就是将后面的值赋值给变量&#xff0c;这里最常用的就是 &#xff0c;a1那么a就是1&#xff0c;此外还包含以下的赋值运算 等于int a 1; a10 a10加等于int a 1; a1;a2-减等于int a 1; a-1;a0*乘等于int a 2; a*5;a10/除等于int a 10; a/2;a5%模等于int a 10; a%…...

Spring Boot | Spring Boot的“数据访问“、Spring Boot“整合MyBatis“

目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目&#xff0c;引入相应的启动器&#xff0c;编写数据库对应的“实体类”③额外添加pom.xml文…...

ActiViz中的数据集vtkPolyData

文章目录 前言一、数据结构二、数据内容三、几何操作四、数据导入与导出五、数据可视化六、函数详解1、SetPoints(vtkPoints points):2、SetPolys(vtkCellArray polys):3、GetNumberOfPoints():4、GetNumberOfCells():5、GetPointData():6、GetCellData():7、Ge...

【测试篇】测试用例

文章目录 前言具体设计测试用例等价类边界值场景设计法判定表&#xff08;因果图&#xff09;正交排列&#xff08;用的非常少&#xff09;错误猜测法 前言 什么是测试用例&#xff1f;&#xff1f; 测试用例是针对软件系统或应用程序的特定功能或场景编写的一组步骤&#xf…...

Shell学习 - 2.24 Shell let命令:对整数进行数学运算

let 命令和双小括号 (( )) 的用法是类似的&#xff0c;它们都是用来对整数进行运算&#xff0c;读者已经学习了《Shell (())》&#xff0c;再学习 let 命令就相当简单了。 注意&#xff1a;和双小括号 (( )) 一样&#xff0c;let 命令也只能进行整数运算&#xff0c;不能对小数…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...