自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

急支糖浆的博客

很菜很菜的菜鸟

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 c++引用折叠,万能引用,完美转发

引用折叠template<typename T>void print(T &&t){}在使用如上的模板函数时,如果T的类型为T&或者T&&,则形参t的类型对应为T& &&或者T && &&。此时形成了引用的引用,从而会发生引用折叠,引用折叠规则如下:引用1 引用2 折叠结果 & & & & &&

2022-05-20 10:58:17 1118 1

原创 ffmpeg视频编码

本文实现ffmpeg视频编码ffmpeg视频编码流程1.首先使用videoInput打开摄像头进行视频采集2.打开指定编码器,这里使用libx264。也可以使用h264_qsv,h264_nvenc进行硬编码。3.采集获取的是rgb数据,编码需要使用yuv,创建像素格式转换。4.编码后的数据需要保存在文件,创建输出封装格式上下文。5.打开输出,不断的获取采集数据,进行像素格式转换,编码,写入文件。ffmpeg视频编码示例#include <iostream&gt.

2021-08-22 09:37:51 1815 1

原创 videoInput视频采集

videoInput视频采集videoInputgithub地址从中获取到videoInput.cpp和videoInput.h两个文件。创建vs工程加入上面两个文件并创建main.cpp。main.cpp示例代码:#include <iostream>#include <thread>#include "videoInput.h"using namespace std;int main(){ //获取摄像头的数量和名字 video.

2021-08-21 08:25:52 1093 2

原创 ffmpeg音视频解码

#include <iostream>extern "C" {#include "libavformat\avformat.h"#include "libavcodec\avcodec.h"#include "libavutil\avutil.h"#include "libswscale\swscale.h"#include "libswresample\swresample.h"#include "libavutil\imgutils.h"#include "libavut.

2021-08-19 20:20:35 964

原创 ffmpeg rtmp推流

ffmpeg实现转推本地文件的rtmp流#include <iostream>extern "C" {#include "libavformat\avformat.h"#include "libavutil\avutil.h"#include "libavutil\time.h"#include "libavcodec\avcodec.h"}#pragma comment(lib, "avformat.lib")#pragma comment(lib, "avcodec

2021-07-31 16:17:11 3202

原创 ffmpeg转封装格式

使用ffmpeg进行视频格式的转换#include <iostream>extern "C" {#include "libavformat\avformat.h"#include "libavutil\avutil.h"#include "libavcodec\avcodec.h"}#pragma comment(lib, "avformat.lib")#pragma comment(lib, "avcodec.lib")#pragma comment(lib, "av

2021-07-31 10:59:06 275

原创 va_list语法

va_list(1)va_list类型,定义该类型变量来指向可变参数的地址。它的定义为:typedef char * va_list;(2)va_start(va_list, arg),va_start初始化va_list变量,使得va_list变量指向可变参数列表第一个参数的地址,第二个参数固定为可变参数列表(…)左边第一个参数。它的定义为:#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) -

2020-11-26 09:43:02 4803

原创 OBS源码编译

OBS源码下载cmake-gui,本示例下载cmake-3.19.0-win64-x64.msi。Qt下载,下载QtOBS源码,git clone源码后,本示例使用tag24.01,更新子模块。OBS依赖包,下载OBS依赖包dependencies2017。OBS源码编译首先下载上述依赖。然后打开cmake-gui设置OBS源码路径,build路径并且add entry Qt和dependencies路径。最后configure,generate一下,在build目录下会生成vs文件。打开v

2020-11-21 18:34:41 665

原创 windows编译ffmpeg,支持h264,qsv,aac

windows下ffmpeg的编译环境,windows下编译ffmpeg。在ffmpeg源码目录下新建文件夹3rdparty,3rdparty里面创建include和lib两个文件夹,分别存放依赖编码器的头文件和库文件。ffmpeg支持libx264首先下载编译libx264,windows下编译libx264将生成的libx264.lib导入3rdparty/lib,x264_config.h和x264.h导入3rdparty/include。打开msys_vs2017.bat,进入ffmpeg

2020-10-13 08:42:06 2677 4

原创 windows下编译ffmpeg

编译环境下载MinGW下载地址,下载完成获得mingw-get-setup.exe,选择安装路径,继续。之后会获得MinGW Installer,选"Basic Setup",将右侧的选项全部选中,点击菜单上的“Installation”下的“Apply Changes”开始安装。等待安装完成,这个过程需要的时间可能会比较长。下载yasm下载地址,注意选择版本,下载后将文件名称改成yasm.exe,放在之前安装好的MinGW\bin目录下。配置环境将msys/1.0/msys.bat复制一份命

2020-10-11 09:48:08 1177 1

原创 rgb24转yuv420P

本文记录了将rgb24的像素数据转为yuv420P的像素数据的方法1.直接使用公式,遍历rgb每个像素点并将rgb格式转换为yuv格式static void rgb2yuv420(int w, int h, uint8_t *rgb, uint8_t *yuv){ int pixsize; int pixIndex; uint8_t *y,*u,*v; int...

2020-02-14 15:30:06 1368

原创 windows下编译librtmp库

使用rtmp协议进行视频推流时可能会用到librtmp库,在这里介绍一下windows环境下编译librtmp的方法。librtmp下载编译下载librtmp,下载地址下载指定版本,解压到指定目录下,librtmp文件夹下是librtmp的源码。使用VS创建一个控制台工程,选择静态库,如下:将librtmp源码拷到工程目录下并将源码添加到工程里,就可以开始编译了,如下:编译遇到的...

2019-12-08 13:55:22 1398 1

原创 windows下编译x264

最近需要使用x264进行H264视频编码,发现x264是linux下的库,但我需要在windows下使用dll,在这里记录一下windows编译x264过程。编译环境下载MinGW ,下载地址。下载完成获得mingw-get-setup.exe,选择安装路径,继续。之后会获得MinGW Installer,选"Basic Setup",将右侧的选项全部选中,点击菜单上的“Installati...

2019-10-13 10:13:36 1064

原创 Qt事件机制

Qt事件机制Qt事件的产生事件是由窗口系统或Qt自身产生的,用以响应所发生的各类事情。当用户点击鼠标按键时,就可以产生一个鼠标事件。大多数事件是作为用户动作的响应而产生的,但是也有一些例外,比如像定时器事件,则是由系统独立产生的。Qt事件的分发对于Qt应用程序,由QCoreApplication对象开启主事件循环后,会不断地获取本地窗口系统事件队列中的事件并将其转换成QEvent对象,然后...

2019-08-23 18:20:03 348

原创 C++类模板

类模板C++的类模板为生成通用的类声明提供了一种很好的方法。模板提供参数化类型,即能够将类型名作为参数传递给接收方来建立类或函数。例如,将类型名int,传递给AA模板,可以让编译器构造一个对int进行处理的AA类。定义类模板正常定义一个处理int类型的类如下:class AA { public: AA(){} ~AA(){ } void print(co...

2019-07-27 19:22:59 141

原创 C++类模板的具体化

显示具体化首先在.h头文件定义个类模板,如下#pragma once#include <iostream>//通用模板类型template<class T1, class T2>class AA{public: void print();};template<class T1, class T2>void AA<T1, T2&gt...

2019-07-27 18:45:52 1603

原创 C++模板编译

普通类成员函数编译和链接编译普通类成员函数可以将函数声明和函数定义分别放在.h头文件和.cpp源文件。在编译时,每个.cpp文件是一个编译单元,各个编译单元互相是不可知的。编译器会将.cpp文件中使用的头文件展开,然后经过编译、汇编将源文件生成.obj目标文件(机器代码)。链接每个.obj都有一个未解决符号表和导出符号表。未解决符号表是源文件使用的外部符号,需要连接器告诉其定义。导出符号表...

2019-07-27 08:39:35 335

原创 lambda表达式语法C++11

lambda表达式lambda函数,也叫lambda表达式(简称为lambda),是C++11提供的一种匿名函数-即无需给函数命名。在C++11中,对于接受函数指针或函数符(函数对象)的函数,可使用匿名函数定义(lambda)作为其参数。lambda语法Lambda表达式语法:捕获列表修饰符->返回值类型{函数体};捕获列表:[]是lambda的引出符,编译器根据引出符判断接下来是否...

2019-07-22 09:48:59 368

原创 git常见问题

使用git遇到的一些问题:1.当切换到一次commit或远程分支时,会出现detached HEAD(分离头指针)的情况,即HEAD不指向任何一个分支。在detached HEAD上面做修改提交并切换分支后,detached HEAD消失,因此会失去刚才的提交。解决办法:再切换分支后会提示说明当前head没指向任何分支并给出commitid,可以以该commit创建分支或将该commit合并...

2019-07-20 09:46:48 432

原创 CEF基础

CEF概述Chromium Embedded Framework (CEF) 是一个基于Google Chromium 的开源项目。与Google Chromium 不同,CEF致力于Google Chrome项目的发展,CEF可以很方便的将浏览器嵌入到第三方应用。CEF将开发者从底层的Chromium和Blink的复杂代码释放出来,提供了一套稳定的API。CEF大部分特性都已经实现,使得开发者...

2019-07-19 14:37:13 1022

原创 CEF3进程模型

CEF3使用多进程架构。主进程browser进程处理窗口创建、窗口绘制、网络交互以及大部分的主要逻辑。browser进程通常就是宿主进程。blink的渲染和js的执行,通常在分离的render(渲染)进程里。除此之外,render进程还会处理一些逻辑,例如js bindings和dom节点的访问。进程模型默认会为每个唯一源(协议+域)创建一个新的render进程。我尝试了变换新的域名发现(...

2019-07-18 18:41:20 1738

原创 C++ bind函数及function函数包装器

函数包装器function特征标:是由返回类型以及括号括起并用逗号分隔的参数类型比列表定义的。函数包装器function:是在头文件functional中声明的,它从调用特征标的角度定义了一个对象,可用于包装调用特征标相同的函数指针、函数对象或lambda表达式。function语法:function<返回类型(参数1类型, 参数2类型,…)> fc;例如,下面声明创建一个名为...

2019-07-18 08:37:03 340

原创 Qt安装教程-详细

本文主要介绍了Qt5.9.7的安装步骤。Qt的下载地址: http://download.qt.io/archive/qt/。qt-opensource-windows-x86-5.9.7.exe 是一个综合的安装包(5.8之前分开下载各个编译器库),下载后安装的时候可以选择装哪个编译器对应的库。一般选MinGW 或者MSVC,也可以选Android开发用的arm编译器。安装完成时,如果系统...

2019-07-14 14:39:26 20326 8

原创 C++移动语义(右值引用)

最近觉得应该多看看C++的新特性,否则别人代码中用到,自己不熟悉,看代码的效率就比较低。本周抽时间看了看移动语义,在这里简单介绍下:我们都知道深拷贝和浅拷贝,浅拷贝是两个变量指向同一块区域,这样删除对象的时候会删除内存同一块区域两次,有崩溃的风险;深拷贝是指原对象删除已有空间,然后重新开辟空间,并把参数对象的内容复制过来,两个对象两个空间,相对安全。但深拷贝临时对象会有一个效率问题,比如下面例子...

2019-07-12 18:05:52 199

原创 Qt中文乱码原因及解决方案

本文主要分析了基于windows系统msvc2013编译器的Qt中文乱码。概念字库表:是一个系统支持的文字,符号,数字的集合。编码字符集(字符集):我们平时所说的字符集就是这个,计算机以二进制的形式存储字符,每个字符对应的二进制编码不同,而编码字符集就是所有编码与字符的映射集合。例如:在ASCII码的编码字符集中,字母A的编码是65,65的二进制就是01000001。字符编码:不同字符的编...

2019-07-08 09:19:52 34235 6

原创 Qt容器类介绍

简介:Qt提供了多个基于模板的容器类,这些容器类可用于支持指定的数据类型,和STL容器相比,它们更加轻巧,安全,使用方便。这些容器类在很多方面进行了优化,例如优化速度,降低内存消耗,减少代码膨胀。它们都是隐式共享,写时复制并且它们支持线程可重入,在只读情况下,多线程访问同一对象是线程安全的。在访问容器中的数据项时,可以使用两种风格的迭代器:Java风格迭代器和STL风格迭代。Qt还提供了for...

2019-06-26 18:41:25 578

原创 Qt基于mupdf的pdf转图片

背景Qt关于PDF的方法不多,很多时候在处理PDF时要借助第三方库,相关的库有Poppler,mupdf等。本文主要介绍了mupdf的下载,编译以及在windows下配合Qt使用将pdf中的一页转成png图片(Poppler编译起来比较麻烦)。官方网址下载地址我下的是mupdf-1.15.0-source.tar.xz。下载完毕,解压到指定目录下。打开platform/win32目录下...

2019-06-22 17:59:44 3215 4

原创 Qt无标题栏窗口的平移,缩放,拉伸

实现功能在做Qt应用的时候,由于美观等问题经常会使用自定义的标题栏并将窗口默认的标题栏进行隐藏。随之带来的问题就是窗口失去了平移,缩放等功能。本文根据拦截自定义标题栏widget的事件,实现了通过移动标题栏进而移动整个窗口window,并且支持双击标题栏缩放整个窗口以及窗口边缘的拉伸功能。本文主要参考了Qt 之自定义界面(窗体缩放-跨平台终极版),在其基础上进行一些修改和整理。UI结构如下...

2019-06-17 18:02:14 1878 2

原创 Qt多线程之QThread

Qt应用运行时会自动创建一个UI线程(Qt为了防止多线程操作界面出现问题,有关界面的操作必须在UI线程中),这个线程也就是主线程。然而程序运行的时候经常会有复杂操作,若在主线中进行处理则UI界面会出现暂停卡死的现象。所以,为了良好的用户体验,我们通常将耗时较长的功能放在一个子线程中进行处理。QObject::connect在介绍Qt线程使用方法前,先说说QObject::connect函数,前...

2019-06-06 18:34:15 2684 1

原创 C++虚继承内存分布

本周抽空看虚继承的时候,研究了下虚继承的对象的内存分布,C++虚继承主要解决了菱形继承访问不明确的问题。上述继承关系,定义DD对象的构造函数输出如下:AA BB AA CC DD,对象中存在两份AA。若AA存在成员变量,访问该变量时会出现访问不明确的错误。使用虚继承后可解决该问题:构造函数输出为AA BB CC DD,对象只存在一份AA。这是因为虚继承会生成一个虚基表指针vbptr(与虚函...

2019-06-01 13:57:20 944

原创 NSIS打包教程

NSIS简介NSIS是"Nullsoft 脚本安装系统"(Nullsoft scriptable Installation System)的缩写,它是是一个免费的win32安装、卸载系统,可以很方便的打包windows应用程序。它的特点:脚本简洁高效;系统开销少;支持安装、卸载、系统设置、解压文件等功能。打包步骤1.下载NSIS脚本安装系统,启动NSIS Edit,在“文件”菜单中“新建脚本...

2019-05-25 14:22:12 14198

原创 Qt设置窗体透明

这几天研究了下Qt关于窗体透明的方法,不同的方法有着不同的效果,今天在此总结一下。界面结构如下:全透明setWindowOpacity(double value);该函数用来设置窗体透明度,有效范围从1.0(不透明)到0.0(完全透明的),并且会影响子控件。默认情况下,此属性的值是1.0。设置透明度值为0.7//全透明setWindowOpacity(0.7);子控件透明使用Q...

2019-05-22 09:09:18 12579

原创 Qt防止应用多重启动和应用重启

最近想实现一个防止应用重复启动的功能,一台计算机同一时刻只允许运行一个应用。若启动时发现系统里存在该应用,则退出并通知该应用显示在最前端。主要实现以下两部分:发现系统里已经存在应用;与已存在的应用进行通信,通知其显示在最前端。...

2019-05-19 11:54:50 1197

原创 Qt文件对话框QFileDialog

背景在写客户端的时候经常会遇到打开或保存文件的需求,这时候需要弹出文件对话框让用户进行选择。Qt提供了QFileDialog控件来显示文件对话框,具体使用如下:1.保存文件对话框...

2019-05-16 22:20:29 3147 1

原创 Qt实现半透明背景(遮罩)

实现功能有时候我们的程序可能会需要弹出一个对话框,为了美观这个对话框后面需要半透明的遮罩。本文使用QWidget实现了一个半透明的遮罩,可以设置遮罩的大小,颜色,透明度以及遮罩内要显示的对话框,遮罩能够随着中央对话框的显示而显示,对话框的隐藏而隐藏,效果如下:遮罩MaskForm的实现想法是将要显示的对话框安装事件过滤器MaskForm,MaskForm拦截对话框的QEvent::Show...

2019-05-08 08:06:15 4374 4

原创 Qt一些控件的样式

自己平时使用做个记录。1、QProcessBar//进度条的样式QProgressBar { color:rgb(255,255,0); background:grey; border-radius:4px;}//进度块的样式QProgressBar::chunk { background:blue; border-radius:4px; //设置斑马线 width:1...

2019-04-14 08:48:13 555

原创 git常用命令

git本地库1、git init:初始化本地库。2、git clone 远程库url:从远程库克隆到本地。git initgit clone https://github.com/jizhitangjiang/NetworkDemo.gitgit查看1、git log:查看commit记录,若commit删除,则不能查看删除commit之后的记录。2、git reflog:查看所有......

2019-04-13 08:28:55 298

WindowFrameless.zip

如果用不了可在下方留言,博客地址https://blog.csdn.net/qq_35905572/article/details/92666244

2019-06-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除