- 博客(32)
- 收藏
- 关注
原创 简单实用的队列数据存储-模板类实现
开发中经常线程使用队列结构存储某种格式的一个数据,然后另一线程读取,也就是经典的生产消费模型,这里做下模板抽象使得格式兼容性更好,成为小轮子拿来便用提升效率。
2023-11-06 21:38:27
198
原创 C++11智能指针的基本原理及使用
智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源。
2023-08-03 10:08:15
227
原创 记录 Libevent的常用功能示例
这篇博文主要以尽量简练的代码实现TcpServer服务器功能,代码覆盖大部分的常用函数接口。通过代码能对Libevent的整体框架,函数使用有直观的理解,配置好Libevent库的前提下,下方代码可直接复制运行。
2023-07-28 10:54:29
217
原创 记录 C++11的线程池实现(支持不定参任务)
基于C++11标准实现的线程池,十分通用。支持不定参函数作为任务,核心功能已实现,细节功能可自行完善。原理不在赘述直接看代码。
2023-07-26 15:59:34
321
原创 Qt 全局信号转发单例类
Qt项目开发,信号槽是必然使用到的。简单项目直接绑定对象信号传递没问题,但项目稍具规模对象父子关系变多,那么信号的传递必然要跨越多层,需要多层连续转发,这种多层传递是可以使用,原理上也没有任何问题,但是增大了代码复杂度也容易遗漏造成逻辑错误。这时可以考虑引入全局信号转发类优化代码,优雅的解决此问题。
2023-06-29 10:07:46
1576
原创 记录 FFmpeg开发常用功能封装
记录下个人在开发中使用到的FFmpeg常用功能,避免相同功能代码的重复编写,使用时直接复制提升效率。由于音视频处理的场景众多,无法编写完全通用的方法接口,可能需根据实际场景进行一定的修改,本文章中的代码也将持续更新优化。
2023-05-15 10:57:37
603
原创 记录 Qt+ffmpeg编码麦克风音频数据
记录一下Qt环境捕捉麦克风原始pcm数据,通过ffmpeg编程成AAC音频的核心代码。此部分代码摘抄自个人的RTP实时音视频传输项目,实现了子线程采集pcm并编码为AVPacket的功能。
2023-05-08 09:40:35
1072
1
原创 记录 音、视频输出类封装
本文记录下自己封装好的音频视频输出类,直接实例化类,先设置对应的音视频参数,之后调用接口传入解码后音、视频数据即可播放。封装类主要以 Qt + FFmpeg + SDL 进行设计。
2023-03-27 10:56:26
518
原创 记录 Reactor模型的基本实现 单线程
Linux环境使用epoll实现基本的Reactor单线程模型,主要用来记录代码思路并实现基本功能,不做复杂逻辑。
2022-12-19 14:11:12
232
原创 记录 FFmpeg生成本地JPG图片
开发中有视频播放中抓拍或截屏等相关需求,需要将视频中的某一帧图片保存到本地,一般为jpg格式图片。常用的有libjpeg这个库,但会引入更多三方库增加复杂性。既然用ffmpeg做了音视频解析播放,还是用ffmpeg的方式实现抓图保存。实现方式还是固定的ffmpeg编码流程,并不复杂,看代码注释即可。已经经过多次测试,一秒抓拍10张以内的1080P的图片效果还是不错的,可以根据自己需求灵活修改使用。
2022-11-10 10:03:59
2403
原创 记录 SDL硬件渲染(AVFrame)
记录一下SDL方式来渲染的图片的操作。SDL是跨平台的多媒体开发库,封装了不同系统中复杂的底层渲染细节,提供了统一的接口,极大提升了开发效率。音视频开发肯定离不开FFmpeg,而FFmpeg解码后的图像数据一般都是包含AVFrame中(yuv420p格式)。所以对于解码后的AVFrame数据,直接调用SDL相关接口即可实现图像显示,简单便捷。。
2022-10-28 16:52:12
1798
原创 记录 队列数据缓冲区(FiFoBuffer)
实际开发中,数据缓存区的概念是必须了解的。如经典的生产、消费模型就是维持着一块数据缓存区供相关的读写操作,当然线程安全问题跑不掉。这里记录下工作中经常使用且经过长时间检验的缓冲区代码,绝大部分场景完全满足,复制直接可用。还有比较经典的环形缓存等设计方法,但很难有万能、全面的方法设计,能兼顾稳定性、简洁性、通用性就是好的设计,取长补短就好。
2022-10-10 15:22:11
1570
原创 记录 SoundTouch的配置与代码分析
基于Qt + FFmpeg实时音视频推流的项目,利用OpenCV实时美颜已经OK。计划用SoundTouch再做变声处理,本来希望男声变女声,大叔变萝莉、单车变摩托的效果,但是多次测试后梦醒了,基本不太可能,只能实现基本的变声,这种应该需要比较专业的算法处理在里面。但不可否认SoundTouch是个很好的音频处理库,实现基本的变调、变速效果还是不错的,就不勉强更理想的效果了,毕竟定位就不同,常见的音频处理需求SoundTouch可以胜任。
2022-09-29 17:55:10
897
1
原创 FFmpeg的软、硬解码方式梳理
背景项目中使用QT开发监控软件,集成海康、宇视、大华、以及网络流设备。品牌设备使用SDK控制,网络流设备自己使用FFmpeg库来解决。如果同时解码多路播放,会出现CPU占用较高的情况。如果视频流路数更多如16路,或编码更为复杂的如H265,那么软件CPU将无力支持,软件卡顿异常崩溃也是很可能的。问题分析...
2022-05-28 11:36:53
6540
10
原创 完美解决Linux环境编译ffmpeg库
背景说明项目功能实现需要在Linux下编译出可用的FFmpeg库。FFmpeg在编译过程中是需要链接其它三方库的,比如x265 x265等,否则可能会造成功能不全(如程序接口返回找不到H264编码器错误),影响使用。编译这种三方库其实理论简单,但是细节磨人,有时候没设置好就是会有些莫名其妙的问题。我这里也参考了如零声学院分享的文档,结合自己情况总结记录了份编译说明,亲测有效,使用稳定。甚至可以按步骤无脑复制shell执行,编译一路绿灯,快速得到完美的FFmpeg库。编译整体思路就是先把依赖的库如x26
2022-03-11 16:12:31
13522
10
原创 Qt环境生成dump解决异常崩溃
背景对于经常使用C/C++的伙伴来说,程序有问题动不动就罢工崩溃的问题简直不能太熟悉了。比如本地测试通过打包发布的release版本Qt程序,在客户环境下仍可能出现异常崩溃的问题。一般通过客户反馈以及分析系统运行日志,问题基本都能够得到快速解决。但总会有些bug很难定位,这种情况下通过生成dump文件,结合winDbg程序定位问题将是一个很好的解决方式。具体操作一、生成dump文件在QtCreator中默认不支持生成dump文件,且发行版release模式不含调试信息,因此这里需要进行以下两步设置。
2022-02-15 19:01:06
6902
17
原创 windows环境编译curl
背景根据工作项目需求,在Qt程序中需要使用curl库来实现,记录下window环境的编译步骤。整体逻辑是比较清晰的,但有个别坑必须记录,纪念下,也希望帮到其他人!!具体环境目前使用的是Qt5.12.6,msvc2017-32位编译器,将编译成该环境下的静态库。考虑业务需求,这里没有使用OpenSSL。其它环境类比即可。实现步骤一、下载curl源码直接使用命令下载,git clone https://github.com/curl/curl.git 。可能提示unable to access的错误
2022-02-09 22:02:18
2781
原创 OpenCV人脸检测及识别(深度学习)
简介最近做了一个人脸检测以及识别的程序,很多的文章都有比较详细的叙述,可以自行查找。但是个人觉得大部分文章都太细致了以至于初学者无法快速领会主干(不是否认质量),是侧重点问题。所以结合我遇到了一些问题,现在做个总结。本文主要叙述实现的思路,对大的方向有了解了,剩下的结合其他详细文章自然水到渠成。环境版本:Qt 5.12.6IDE: QtCreator 4.10.2编译器:MSVC2017 64bitOpenCV版本:4.5.1OpenCV版本先上图人脸检测和人脸识别是
2021-04-17 22:25:04
5181
2
原创 Qt 自定义QMessageBox
其实就是创建一个继承QDialog的widget而已,QDialog使其有自带messageBox的属性,widget布局自己发挥。
2020-12-27 14:50:36
3976
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人