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.5501
https://download.csdn.net/download/u011283226/89067080?spm=1001.2014.3001.5501 Github 的:https://github.com/mengps/AnyCapture
https://github.com/mengps/AnyCapture
相关文章:
Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)
【写在前面】 之前应公司需要,给公司写过一整套直播的库( 推拉流,编解码),类似于 libobs。 结果后来因为没有相关项目,便停止开发&维护了。 不过里面很多有用的组件,然后也挺好用的,遂开源出来一部分。…...
将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件
实现文件流PDF不需要预览直接调用打印机打印实现方案就是,将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件。源码地址...
加密软件VMProtect教程:使用脚本-功能
VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…...
51单片机入门_江协科技_21.1_开发板USB口连接建议
1. 目前我自己用的普中A2版本的开发板,操作失误导致在开发板连接电脑并通电的情况下误将跳线帽触碰到开发板的3.3V与GND,导致USB口浪涌,2个电脑上面的USB口烧毁,开发板暂时没有任何问题,电脑USB口现在只是接通后有电&a…...
基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证
基于Spring Boot3实现Spring Security6 JWT Redis实现登录、token身份认证。 用户从数据库中获取。使用RESTFul风格的APi进行登录。使用JWT生成token。使用Redis进行登录过期判断。所有的工具类和数据结构在源码中都有。 系列文章指路👉 系列文章-基于SpringBoot3…...
Kubernetes(k8s):精通 Pod 操作的关键命令
Kubernetes(k8s):精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…...
【随笔】Git 高级篇 -- 相对引用2(十三)
💌 所属专栏:【Git】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…...
xilinx AXI CAN驱动开发
CAN收发方案有很多,常见的解决方案通过是采用CAN收发芯片,例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现,AXI CAN是其中一种; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…...
Python:百度AI开放平台——OCR图像文字识别应用
一、注册百度AI开放平台 使用百度AI服务的步骤为: 注册:注册成为百度AI开放平台开发者;创建AI应用:在百度API开放平台上创建相关类型的的AI应用,获得AppID、API Key和Secret Key;调用API:调用…...
OpenEuler/Centos制作离线软件源
需求背景: 一般线上服务器都是不能连接外网,服务器安装好系统之后就需要部署相关软件,此时因为无法联网导致无法下载软件,所以都会做一个本地的离线软件源,本文简单介绍如何快速利用已经下载好的rpm包,制作…...
论文笔记:基于多粒度信息融合的社交媒体多模态假新闻检测
整理了ICMR2023 Multi-modal Fake News Detection on Social Media via Multi-grained Information Fusion)论文的阅读笔记 背景模型实验 背景 在假新闻检测领域,目前的方法主要集中在文本和视觉特征的集成上,但不能有效地利用细粒度和粗粒度…...
攻防世界 xff_referer 题目解析
xff_referer 一:了解xxf和Referer X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。 一般的客户端发送HTTP请求没有X-Forwarded-For头的࿰…...
open-cd框架调试记录
源于论文Changer: Feature Interaction Is What You Need forChange Detection 源码位置:open-cd/README.md at main likyoo/open-cd (github.com) 同样是基于MMSegmentation框架的代码,不符合本人编程习惯所以一直也没有研究这东西,近期打…...
【算法刷题day17】Leetcode:110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
文章目录 Leetcode 110.平衡二叉树解题思路代码总结 Leetcode 257. 二叉树的所有路径解题思路代码总结 Leetcode 404.左叶子之和解题思路代码总结 草稿图网站 java的Deque Leetcode 110.平衡二叉树 题目:** 110.平衡二叉树** 解析:代码随想录解析 解题思…...
Linux云计算之Linux基础2——Linux发行版本的安装
目录 一、彻底删除VMware 二、VMware-17虚拟机安装 三、MobaXterm 安装 四、Centos 发行版 7.9的安装 五、rockys 9.1的安装 六、ubuntu2204的安装 一、彻底删除VMware 在卸载VMware虚拟机之前,要先把与VMware相关的服务和进程终止 1. 在windows中按下【Windo…...
C++:赋值运算符(17)
赋值也就是将后面的值赋值给变量,这里最常用的就是 ,a1那么a就是1,此外还包含以下的赋值运算 等于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文件)② 创建项目,引入相应的启动器,编写数据库对应的“实体类”③额外添加pom.xml文…...
ActiViz中的数据集vtkPolyData
文章目录 前言一、数据结构二、数据内容三、几何操作四、数据导入与导出五、数据可视化六、函数详解1、SetPoints(vtkPoints points):2、SetPolys(vtkCellArray polys):3、GetNumberOfPoints():4、GetNumberOfCells():5、GetPointData():6、GetCellData():7、Ge...
【测试篇】测试用例
文章目录 前言具体设计测试用例等价类边界值场景设计法判定表(因果图)正交排列(用的非常少)错误猜测法 前言 什么是测试用例?? 测试用例是针对软件系统或应用程序的特定功能或场景编写的一组步骤…...
Shell学习 - 2.24 Shell let命令:对整数进行数学运算
let 命令和双小括号 (( )) 的用法是类似的,它们都是用来对整数进行运算,读者已经学习了《Shell (())》,再学习 let 命令就相当简单了。 注意:和双小括号 (( )) 一样,let 命令也只能进行整数运算,不能对小数…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
