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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 处理Mysql获取树形的数据

Mysql数据&#xff1a; 代码如下&#xff1a; Entity&#xff1a; Data Accessors(chain true) public class Region {private BigInteger id;//名称private String name;//父idprivate BigInteger parentId;private List<Region> children;private Integer createTim…

clickhouse MPPDB数据库--新特性使用示例

clickhouse 新特性&#xff1a; 从clickhouse 22.3至最新的版本24.3.2.23&#xff0c;clickhouse在快速发展中&#xff0c;每个版本都增加了一些新的特性&#xff0c;在数据写入、查询方面都有性能加速。 本文根据clickhouse blog中的clickhouse release blog中&#xff0c;学…

K8S Deployment 简介, 1个简单的Kubernetes Deployment YAML 文件

当谈到 Kubernetes 集群中的应用程序部署和管理时&#xff0c;Deployment、ReplicaSet 和 Pod 是三个重要的概念。它们之间存在一定的关系和层次结构。下面是对 Deployment、ReplicaSet 和 Pod 的详细解释以及它们之间的关系。 Deployment&#xff08;部署&#xff09; Deploy…

js教程(12)——本地储存

一、介绍 前端本地存储是指在浏览器中存储数据的机制&#xff0c;它允许前端开发者将数据保存在用户的浏览器中&#xff0c;以便在用户下次访问网站时可以使用这些数据。 前端本地存储有以下几种方式&#xff1a; Cookie&#xff1a;Cookie 是最早也是最常用的前端本地存储方式…

【Java设计模式】序:设计模式总体概述

目录 什么是设计模式设计模式的分类1 创建型模式1.1. 单例&#xff08;Singleton&#xff09;1.2 原型&#xff08;Prototype&#xff09;1.3 工厂方法&#xff08;FactoryMethod&#xff09;1.4 抽象工厂&#xff08;AbstractFactory&#xff09;1.5 建造者&#xff08;Builde…

31. 下一个排列 —— LeetCode (python) [PS: LeetCode 运行环境疑似出错]

# encoding utf-8 # 开发者&#xff1a;xxx # 开发时间&#xff1a; 20:26 # "Stay hungry&#xff0c;stay foolish."class Solution(object):def nextPermutation(self, nums):import itertoolsl len(nums)a tuple(nums)nums.sort()permutations_lst list(ite…

Android RecycleView 异步缓存 itemView 提升滑动性能

RecyclerView 是 Android 官方推荐的用于展示大量数据列表的控件&#xff0c;具有高度的可定制性和灵活性。我们可以通过自定义 LayoutManager、ItemDecoration、ItemAnimator 等来实现不同的布局和动画效果&#xff0c;满足各种需求。同时&#xff0c;RecyclerView 支持局部刷…

C语言什么是静态变量?如何实现?

一、问题 在编写程序的过程中&#xff0c;对于某些函数的局部变量的值&#xff0c;有时不希望它在函数调⽤结束后消失&#xff0c;也就是不释放该变量所占⽤的存储单元&#xff1b;同样&#xff0c;有时在程序设计中也希望某些外部变量只限于被本⽂件引⽤。这就需要使⽤静态变量…

2024年清明节安装matlab 2024a

下载安装离线支持包SupportSoftwareDownloader_R2024a_win64&#xff0c;地址https://ww2.mathworks.cn/support/install/support-software-downloader.html&#xff0c;运行软件&#xff08;自解压运行&#xff09;&#xff0c;登录账号&#xff08;需要提前在官网注册&#x…

反转链表 - LeetCode 热题 23

大家好&#xff01;我是曾续缘&#x1f497; 今天是《LeetCode 热题 100》系列 发车第 23 天 链表第 2 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#…

时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测

时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测 目录 时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab基于CFBP级联前向BP神经网络时序预测&#xff08;完整源码和数据)&#xff1b; 2.数据集为excel…

iHRM人力资源管理系统

iHRM人力资源管理系统 源码和教程都在此 https://www.yuque.com/aslwr/college/bxcq9npncyspgz9t ‍

开源模型应用落地-chatglm3-6b模型小试-入门篇(三)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

5.111 BCC工具之ext4dist.py解读

一,工具简介 ext4dist跟踪ext4的读取、写入、打开和fsync操作,并将其延迟总结为2的幂次方直方图。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from bcc import BPF from time import sleep, strftime import argparse# symbols kallsyms …

路由Vue-Router使用

Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;让用 Vue.js 构建单页应用变得轻而易举。 介绍 | Vue Router (vuejs.org) 1. 安装 npm install vue-router4 查看安装好的vue-router 2. 添加路由 新建views文件夹用来存放所有的页面&#xff0c;在…

7-42 清点代码库

上图转自新浪微博&#xff1a;“阿里代码库有几亿行代码&#xff0c;但其中有很多功能重复的代码&#xff0c;比如单单快排就被重写了几百遍。请设计一个程序&#xff0c;能够将代码库中所有功能重复的代码找出。各位大佬有啥想法&#xff0c;我当时就懵了&#xff0c;然后就挂…

笔记: javaSE day17天笔记

第十七天课堂笔记 Java常用类 数学类★★★ math java.lang.Math , 数学类 round(x) : 四舍五入 , 把 x加0.5 后向下取整 ceil(x) : 返回大于等于x的最小整数 , 向上取整 floor(x) : 返回小于等于x的最大整数 , 向下取整 sqrt(x) : 平方根 cbrt(x): 立方根 pow(a , b)…

LangChain Demo | Agent X ReAct X wikipedia 询问《三体》的主要内容

背景 LangChain学习中&#xff0c;尝试改了一下哈里森和吴恩达课程当中的问题&#xff0c;看看gpt-3.5-turbo在集成了ReAct和wikipedia后&#xff0c;如何回答《三体》的主要内容是什么这个问题&#xff0c;当然&#xff0c;主要是为了回答这问题时LangChain内部发生了什么。所…

基于大型语言模型的智能体(Agent)研究综述--人大

内容概述 论文地址&#xff1a;https://arxiv.org/pdf/2308.11432.pdf 这篇综述内容有35页&#xff0c;内容很多&#xff0c;俗话说一图胜千言&#xff0c;作者提供了5张精美的图片和3个表格&#xff0c;把这些搞明白后对这篇综述也就理解差不多了。文章的总体结构如下由6部分…

基于GaN的半导体光学放大器SOA

摘要 基于GaN的材料可覆盖很宽的光谱范围&#xff0c;以紫外、紫、蓝、绿和红波发射的激光二极管已经商业化。基于GaN的半导体光学放大器&#xff08;SOA&#xff09;具有提高激光二极管输出功率的能力&#xff0c;因此SOA将有很多潜在应用。未来需要利用短波、超快脉冲特性的…