Qt C++ 屏幕录制 保存mp4
在麒麟系统(基于 Linux)上优化 Qt C++ 的屏幕录制,主要针对捕获效率和编码速度。可以参考以下优化策略:
1. 使用更高效的屏幕捕获 API
麒麟系统作为 Linux 系统的一种,可以考虑直接使用 X11、Wayland、或 DRM/KMS API 进行屏幕捕获。具体可以根据系统的显示服务器选择合适的接口。
使用 X11 Shm(共享内存)优化屏幕捕获:
X11 提供了共享内存扩展(XShm),可以显著提高屏幕捕获速度。
示例代码:
#include <X11/Xlib.h>
#include <X11/extensions/XShm.h>
#include <sys/shm.h>
#include <QImage>QImage captureScreen(Display *display, Window root, int width, int height) {XImage *ximage = XGetImage(display, root, 0, 0, width, height, AllPlanes, ZPixmap);QImage image(reinterpret_cast<const uchar*>(ximage->data), width, height, QImage::Format_RGB32);return image.copy(); // 拷贝数据,避免共享内存释放导致数据丢失
}
这种方式会减少从显存到用户空间内存的拷贝,提升性能。
2. 硬件加速支持
在麒麟系统中,利用硬件加速来提升视频编码效率非常重要。可以启用 GPU 加速,例如使用 VAAPI(视频加速 API),以便在 Intel 或 AMD GPU 上实现更快速的编码。
安装 VAAPI 支持:
sudo apt install libva-dev libva-glx2 libva-x11-2 ffmpeg
FFmpeg 使用 VAAPI 进行编码:
ffmpeg -framerate 30 -i frame_%03d.png -c:v h264_vaapi output.mp4
3. 降低分辨率或帧率
适当降低录制分辨率和帧率能够显著提高性能。如果你不需要高分辨率的录制,可以缩放捕获的图像以减小资源占用。
使用 Qt 的缩放功能:
QImage frame = captureScreen(display, root, screenWidth, screenHeight);QImage scaledFrame = frame.scaled(screenWidth / 2, screenHeight / 2);
4. 管道优化和实时编码
可以通过管道将帧数据直接传递给 FFmpeg 的 stdin,减少磁盘写入。这样可以提高录制效率并减小 IO 瓶颈。
在 Qt 中使用 QProcess
实现实时编码:
QProcess ffmpeg;
ffmpeg.start("ffmpeg", QStringList() << "-f" << "rawvideo" << "-pixel_format" << "rgb24" << "-video_size" << "1920x1080" << "-framerate" << "30" << "-i" << "-" << "-c:v" << "h264_vaapi" << "output.mp4");while (capturing) {QImage frame = captureScreen(display, root, screenWidth, screenHeight);ffmpeg.write(reinterpret_cast<const char*>(frame.bits()), frame.sizeInBytes());
}ffmpeg.closeWriteChannel();
ffmpeg.waitForFinished();
5. 多线程录制
将屏幕捕获、图像处理和编码分别放入不同的线程,可以避免阻塞主线程,提高 CPU 的使用效率。
6. 优化窗口管理和渲染
在窗口管理器上,确保使用性能良好的 WM(如 KWin 或 Mutter),避免系统资源过度消耗。此外,禁用不必要的特效可以释放更多系统资源用于录制。
通过这些措施,你可以在麒麟系统上提高 Qt C++ 屏幕录制的效率。根据实际情况,还可以进一步调整参数或引入更底层的优化方法。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Qt C++ 屏幕录制 保存mp4
在麒麟系统(基于 Linux)上优化 Qt C 的屏幕录制,主要针对捕获效率和编码速度。可以参考以下优化策略: 1. 使用更高效的屏幕捕获 API 麒麟系统作为 Linux 系统的一种,可以考虑直接使用 X11、Wayland、或 DRM/KMS API …...
![](https://i-blog.csdnimg.cn/direct/aeae8dfddb36457e8a1e8133d4a3ead9.png)
Adobe After Effects的插件--------CC Cylinder
CC Cylinder是柱体插件。它是AE内置的3D插件。 使用条件 该插件的作用是将2D图层转换为3D的柱体。所以使用该插件时要确保源图层为2D的。 我们以一张图片素材为例: 给图片图层添加CC Cylinder效果控件,然后新建一个摄像机(利用摄像机旋转、平移、推拉工具,方便在各个角度…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue3项目开发——新闻发布管理系统(一)
文章目录 一、项目要实现的功能二、项目用到的技术栈三、项目创建1、pnpm安装2、创建项目3、项目启动四、项目配置1、ESLint2、Prettier3、ESLint + Prettier 进行配置代码风格3.1配置prettier3.2vue组件名称多单词组成 (忽略index.vue)3.3props解构(关闭)4、husky4.1husky…...
![](https://i-blog.csdnimg.cn/direct/06e43709728649b29373b88c8200b5fb.png)
前端调用后端,出现跨域报错怎么办
我前端是vue,后端是其他同事写的python,因为部署在不同的机器上,我前端如果直接调用他的python,axios请求就会出现跨域报错,如下 blocked by CORS policy 云云 怎么办呢,网上探索了一下午,才找…...
![](https://i-blog.csdnimg.cn/direct/62560508e14e49d385087494867761be.png)
使用Node-RED发送数据到巴法云
上一篇博文完成了Node-RED的安装,下面来尝试一下用Node-RED来发送数据到巴法云服务器。 我在教学用MQTT工具的思考-CSDN博客中说过,巴法云支持云云互联,可以连小米、百度,学生使用的兴趣高。所以今天先测试Node-RED和巴法云的连接…...
![](https://i-blog.csdnimg.cn/direct/6a0a6b6e9aa2473d9e036c42a1794fa7.png)
【今夕是何年】雅达利发布Atari 7800+游戏主机:配备无线手柄、HDMI接口
雅达利(Atari)发布了Atari 7800游戏主机,目前这款主机在其官方商城接受预定,售价129.99美元。Atari 7800游戏主机,作为Atari 7800系列的革新升级版本,搭载了高效的Rockchip 3128处理器,不仅确保…...
![](https://i-blog.csdnimg.cn/direct/451b0e18df094d73aa4b2bfcb59281dd.png)
APP支付宝授权获取code uniapp
1.点击使用plus.runtime跳转打开支付宝 //打开支付宝授权,在支付宝APP中授权后会在支付宝中跳转到你填写的h5地址//urls是授权地址可以后端拼接也可以前端写死 //以下是一个拼接示例,需修改app_id的值和redirect_uri的值即可 //app_id是商户的APPID&…...
![](https://www.ngui.cc/images/no-images.jpg)
在Linux系统下安装、配置ETCD
在Linux系统下安装、配置ETCD(一个分布式键值存储系统)涉及多个步骤,包括下载、安装、配置、启动以及使用ETCD的常用命令。以下是对这些步骤的详细讲解,内容不少于2000字。 一、ETCD简介 ETCD是一个高可用的键值存储系统&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
lambda 表达式可以传递引用为什么需要引用捕获
当 lambda 表达式被传递或存储在其他地方时,通过引用捕获可以确保它始终访问正确的外部变量。—— 引用捕获可以精确地控制被捕获的引用变量的作用域。如果一个 lambda 表达式被存储在一个容器中,并且在不同的时间点被调用,引用捕获可以确保它…...
![](https://www.ngui.cc/images/no-images.jpg)
【Java】/* 双向链表 - 底层实现 */
【难点】:remove、removeAllKey 一、IList package bagfive;/*** Created with IntelliJ IDEA.* Description:* User: tangyuxiu* Date: 2024-08-21* Time: 20:30*/ public interface IList<E> {//头插法void addFirst(E data);//尾插法void addLast(E data…...
![](https://www.ngui.cc/images/no-images.jpg)
Go 语言协程管理精解
1.基础 协程切换需要操作寄存器,这些操作需要通过汇编辅助实现。另外,每一个协程都有一个协程栈,实际上协程栈也是有结构的。汇编程序和栈结构这些概念可能大部分开发者都不太了解,在介绍协程管理之间,先简要介绍。 1…...
![](https://i-blog.csdnimg.cn/direct/3d077edb53864018947b8e705c6d8556.png)
C库函数signal()信号处理
signal()是ANSI C信号处理函数,原型如下: #include <signal.h>typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); signal()将信号signum的处置设置为handler,该handler为SIG_IGNÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
007 SpringCloudAlibaba基础使用(nacos,gateway)
文章目录 cubemall-commoncubemall-productcubemall-gateway https://nacos.io/ https://github.com/alibaba/nacos/releases/tag/1.4.1 https://github.com/alibaba/spring-cloud-alibaba https://github.com/alibaba/Nacos https://developer.aliyun.com/mvn/guide https…...
![](https://www.ngui.cc/images/no-images.jpg)
编译环境揭秘
不同平台因为偏好差异,编译环境的准备会有差异。对于MSVC,微软提供简单的VS安装界面,比较省心。在Ubuntu发行版,gcc/make等程序可能不自带,当需要安装这些软件时就需要不少命令。当然比较麻烦,提供了统一的…...
![](https://i-blog.csdnimg.cn/direct/bb186e96f6634e7893f038b290db009f.png)
不同的字符集(ASCII、UTF-8、UTF-16/UCS-2、UTF-32/UCS-4)
来自:C标准库(第2版)...
![](https://i-blog.csdnimg.cn/direct/fdab9d661f344c12ae6bf11054c53c68.png#pic_center)
STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3)
STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3) 简介 实验 3:在搭建好 tcp 服务器,并拟定好协议的前提下,接收每一个 bin 文件的块,配置到 fpga。 原理图 fpga fpga1 stm32 接线总结 // fpga引脚 stm32…...
![](https://www.ngui.cc/images/no-images.jpg)
JavaScript基础知识(七)
数组相关api再续前缘 arr.forEach(function) 对arr数组的每一项执行遍历操作,并且可以通过function来对相关元素进行二次操作 function: 函数,同时接收三个参数 - item: 数组中的每一项 - index: 数组每一项的下标(item的对应下标) - arr: 原数组 arr.map(function) 对数组的…...
![](https://i-blog.csdnimg.cn/direct/c15709aa20bc4f7280b5e3430999a651.png)
20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡
fdisk -l df -h df -t df -T mount 20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡 2024/8/21 19:47 百度:rk3588 buildroot exFAT mount: mounting /dev/mmcblk1p1 on /mnt failed: Invalid argument Disk /dev/mmcblk1: 955 GB, 10254234…...
![](https://www.ngui.cc/images/no-images.jpg)
Java HashMap练习
JDK1.2添加,线程不安全,性能相对较好 注意:允许使用null作为key或者value 使用数组加链表结构,结合数组和链表的优点 Hash Map的基本使用 package HashMap;import text5.Student;import java.util.Collection; import java.ut…...
![](https://i-blog.csdnimg.cn/direct/c3af8c4534ea4da49a5bfd4e04326846.png)
前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第三篇:登录功能优化
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
![](https://www.ngui.cc/images/no-images.jpg)
8.20 Redis ACL配置 多个用户连接同一个Redis
**一、首先通过 linux命令 redis-cli 输入用户名和密码连接redis的客户端** **二、查看用户,创建用户,设置密码操作** (1)**ACL LIST** 命令 可以查看到当前的权限用户 (2)**ACL SETUSER userName** 此…...
![](https://www.ngui.cc/images/no-images.jpg)
【C语言】static和extern的作用
本文首发于 ❄️慕雪的寒舍 简单介绍C/C中static关键字和extern关键字的作用。 1.简介 在之前的博客中,提到过static的三个作用,但是没有详细说明这三个作用的场景,现在回过头来记录一下。 修饰函数修饰全局变量修饰函数内变量 static还有…...
![](https://i-blog.csdnimg.cn/direct/bcbcb849be804650ad31db0a99071519.webp)
全新分支版本!微软推出Windows 11 Canary Build 27686版
已经很久没有看到 Windows 11 全新的分支版本了,今天微软发布 Windows 11 Canary 新版本,此次版本号已经转移到 Build 27xxx,首发版本为 Build 27686 版。 此次更新带来了多项改进,包括 Windows Sandbox 沙盒功能切换到 Microsof…...
![](https://www.ngui.cc/images/no-images.jpg)
【Linux】ARM服务器命令行安装虚拟机
在Arm服务器上安装虚拟机操作笔记 一、基础环境准备1、环境准备2、检查KVM支持3、启动并启用libvirtd服务4、创建虚拟网络(可选)5、使用virt-manager创建虚拟机(支持KVM)6、管理虚拟机9、监控和日志 二、软虚拟化替代方案1、查看虚…...
![](https://www.ngui.cc/images/no-images.jpg)
Android 10.0 锁屏页面忘记锁屏密码情况下点击5次解锁图标弹出锁屏密码功能实现
1. 前言 在10.0的系统ROM定制化开发中,在一些产品中带锁屏密码的功能中,系统默认是滑动解锁,但是客户会设置锁屏密码,在某些时候会 忘掉锁屏密码,导致需要进入恢复出厂设置然后才能进入系统桌面,这样就导致系统的保存的资料都丢失了,所以需要要求在锁屏密码页面在忘记解…...
![](https://www.ngui.cc/images/no-images.jpg)
Java-CompletableFuture工具类
CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它提供了对异步计算的高级支 持,包括组合多个任务的能力、处理结果、异常处理等。为了方便地使用 CompletableFuture,你 可以创建一个工具类来封装常用的操作。 CompletableFuture 工具类 下面是一个 Complet…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言:递归
递归简单来说就是函数自己调用自己。 特点:一般代码比较简洁,没有出口。 例子1:用一个函数计算阶乘 #include<stdio.h>//不用递归 int fac(int n) {int val 1;for (int i 1; i <n;i){val * i;}return val; }//用递归 int fac1(…...
![](https://www.ngui.cc/images/no-images.jpg)
自动化测试框架pytest+allure+requests
最近复习了一下关于自动化测试的内容,结合[码尚教育] 相关的思路来对测试框架进行开发。 争取实现零代码来实现自动化测试环境的搭建 AutoTestFrame 介绍 AutoTestFrame是一个基于Python的自动化测试框架,旨在帮助测试人员快速、高效地完成测试任务。…...
![](https://www.ngui.cc/images/no-images.jpg)
Python 笔记 numpy.ndarray切片
NumPy 的 ndarray 类型提供了非常灵活的切片功能,可以方便地访问和操作数组中的元素。切片允许您通过指定索引来选择数组的一部分。下面是一些基本的切片操作及其解释。 一维数组的切片 对于一维数组,切片操作类似于 Python 列表的切片。 示例 impor…...
![](https://www.ngui.cc/images/no-images.jpg)
一、HTML5知识点精讲
一、HTML5介绍 html是用来描述网页的一种语言(就是写网页的一种语言)。 它和CSS,JS称为网页三要素。 HTML负责把元素简单呈现在网页上,是网页的身体CSS负责给网页元素添加各种样式,是网页的衣服JS负责实现各种动态、…...
有哪些可以做任务的网站/百度广告代理商查询
多个媒体报道指华为消费者业务CEO余承东近日在内部会议上透露,华为手机今年的出货量大约在2.3亿部,按照这样的数据推算,四季度华为手机的出货量同比下滑近四分之一。华为公司公布今年上半年的业绩时表示上半年的手机出货量为1.18亿部…...
![](/images/no-images.jpg)
电脑版 做网站尺寸/最新新闻热点事件2024
USB(Universal Serial BUS,通用串行总线)协议规定,所有的USB设备都有VID(Vendor ID,供应商识别码)和PID(Product ID,产品识别码)。VID由供应商向USB-IF&#…...
![](https://common.cnblogs.com/images/copycode.gif)
梁山网站开发/网站建设排名优化
转自:http://www.cnblogs.com/OpenCoder/archive/2009/09/23/1572646.html 委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C时代就有函数指针这一说法,而在我看…...
![](/images/no-images.jpg)
重庆施工许可证查询系统/seo视频教程汇总
github https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit spring-cloud-zuul-ratelimit 说明 spring-cloud-zuul-ratelimit是和zuul整合提供分布式限流策略的扩展 对请求的目标URL进行限流(例如:某个URL每分钟只允许调用多少次)…...
培训机构网站模板/湖南网站设计外包服务
今天给大家科普:什么是傅里叶变换?什么是红黑树?希望能帮助到大家啦~下方图片可以单独保存收藏,也可以分享给朋友哦每日福利 点击公众号菜单:今日福利即可免费获得课程<玩转Linux:常用命令…...
![](/images/no-images.jpg)
淘宝做网站推广怎么样/头条号权重查询
Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API Reflect设计目的: 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。修改某些Object方法的返回结果&#…...