自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

while(1) { smile(); }

拥抱开源,回馈开源

原创 Qt无边框窗体实现方案

Qt虽然提供了诸如Qt::FramelessWindowHint之类的属性可以移除窗体的边框,但是移除边框之后,窗体的一些默认行为也被移除了,如鼠标拖动改变大小、双击标题栏最大化等,这些行为需要开发者自己来实现。 本文主要介绍实现无边框窗体的几种方案。 笔者认为,一个完美的无边框窗体解决方案需要支...

2020-05-30 15:56:17 44 0

原创 Qt 5.13.2版本静态库编译

本文介绍如何使用MSVC编译Qt 5.13.2版本的静态库. 1. 下载qt-everywhere-src-5.13.2 Qt离线下载地址:http://download.qt.io/archive/qt/ 下载完成之后,解压到D:\Qt-5.13.2\qt-everywhere-src-5.1...

2020-04-14 15:24:14 161 0

原创 WebRTC -- 自定义AudioDeviceModule时线程检查失败

《WebRTC – 添加选择音频输入输出设备功能》一文介绍了Webrtc默认使用计算机上的默认的音频输入输出设备,并且介绍了如何为webrtc指定音频的输入输出设备。读者根据上文介绍的方法实践的时候,Debug版运行时很可能会遇到thread check failed的提示。 WebRTC内部有三...

2020-01-15 11:20:58 261 0

原创 Qt QSS使用

一、选择器类型 Qt QSS选择器和CSS2、CSS3的选择器类似,建议先学习或者复习一下CSS选择器的语法。QSS虽然和CSS类型,但有也稍许不同,而且支持的语法也没那么多,具体讲解如下。 1.1 类选择器 /* 匹配QPushButton的实例及其子类 */ QPushButton { ...

2019-12-11 14:50:49 156 0

原创 WebRTC -- Janus编译部署及配置

Janus是一个开源的WebRTC SFU服务器,可以作为WebRTC的一个端将其收到的数据进行转发,同时提供一些的控制能力,Janus是基于插件架构的,其功能都是通过一个个插件来提供。 一、编译部署 Janus可以方便的在Linux和MacOS上面编译部署,暂时不支持Windows系统,但可以在...

2019-11-12 20:02:14 509 0

原创 WebRTC -- 音视频流传输带宽控制

WebRTC没有提供这方面的接口,我们可以通过修改sdp信息来实现音视频流的传输带宽控制,sdp格式参考之前的文章:《WebRTC – SDP格式解析》 实现原理比较简单,就是分别在sdp的audio和video媒体部分加入b=AS:信息,可以参考下面的代码实现: void updateSdpAu...

2019-11-12 12:01:28 202 0

原创 WebRTC -- 添加选择视频输入设备功能

《WebRTC – 添加选择音频输入输出设备功能》介绍了如何添加音频输入输出设备选择功能,本文介绍如何添加选择视频输入设备的功能。 添加视频输入设备的选择功能不需要像音频设备那样修改webrtc源码,只需要创建自定义webrtc::VideoCaptureModule即可。 int videoDe...

2019-11-12 11:48:24 202 0

原创 WebRTC -- 添加选择音频输入输出设备功能

我们先来看看WebRTC中提供音频设备输入输出功能的类结构: 从上图中我们看到: AudioDeviceModule接口类是音频设备模型的基类,该接口类及其子类并不提供任何针对音频的实际操作,实际操作都是由AudioDeviceGeneric接口类的子类来提供。 AudioDeviceG...

2019-11-12 11:30:44 524 3

原创 WebRTC -- 在直播领域应用的可行性分析

一、目前流行的直播技术架构 目前主流的直播方案一般采用RTMP架构,首先客户端采集音视频流(如obs studio客户端),然后通过RTMP协议将流推到流媒体服务器,最后流媒体服务器将流处理后分发给各个直播客户端。 优点: 良好的CDN支持,目前主流的CDN 厂商都有比较成熟的解决方案,另外...

2019-11-05 23:29:06 298 0

原创 WebRTC -- 解决VP8编码崩溃的问题

问题描述: 在Release模式下,WebRTC的VP8编码模块崩溃。 解决方案: 由于我使用的MSVC编译器编译的(即clang=false参数),MSVC编译器默认对variance_final_from_16bit_sum_avx2函数中的汇编代码进行优化导致的bug,只需要禁用对该函数优化...

2019-10-30 15:55:14 187 0

原创 Linux后台执行命令

一、& 当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。例如:sh test.sh & 如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中: command > log.out 2>&...

2019-10-29 10:23:59 88 1

原创 WebRTC -- 端到端连接过程分析

STUN Server可以使用coturn开源实现,它同时实现了STUN和TURN服务器。 Signal Server需要自己实现,可以基于WebSocket等协议,要注意的是:信令服务器需要主动通知Client A/B,所以需要维持一个长连接。 ...

2019-10-29 09:22:12 205 0

原创 WebRTC -- TURN服务器搭建

本文讲解如何在Ubuntu系统上采用coturn搭建p2p打洞服务器,coturn是一个开源的stun和turn服务器实现。 安装依赖项 sudo apt-get install openssl sudo apt-get install libssl sudo apt-get install li...

2019-10-28 17:50:51 201 0

原创 WebRTC -- Mesh、MCU、SFU架构

WebRTC是基于P2P的实时通信技术,(如果P2P打洞失败,则会使用TURN服务器进行数据转发),在有2台客户端参与的情况下,网络拓扑结构如图: 一、Mesh架构 在只有2个客户端参与情况下,我们可以使用上图的这种拓扑结构。但假如同时有3个客户端参与(如多人视频会议),如果还是按照上面的方式,...

2019-10-28 16:44:51 1526 0

原创 日志输出规范

众所周知,软件日志对问题的排查可以起到至关重要的作用,但在多人协同开发的情况下,可能会导致不同的人使用不同的日志打印风格,导致日志可阅读性不高。纵观各大知名软件的输出日志,无不有着规范的格式,非常利于阅读。纵观网络,现在鲜有对程序如何输出日志进行规范的文档,本文尝试定义一个日志输出方面的文档。 ...

2019-10-25 09:49:32 254 0

原创 WebRTC -- H264视频编码I、B、P帧

一、概述 H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先...

2019-10-24 15:33:07 206 0

原创 WebRTC -- 流媒体基础概念

流媒体协议 名称 推出机构 传输协议 客户端 RTSP+RTP IETF TCP+UDP VLC, WMP RTMP Adobe Inc. TCP Flash RTMFP Adobe Inc. UDP Flash...

2019-10-24 11:08:32 92127 0

原创 Lua语法快速回忆

一、基础 Lua区分大小写 注释格式 -- 行注释 --[[ exp --]] 局部变量local, 其他的为全局变量,变量默认值为nil 只有false和nil为假 Lua中字符串是不可变的常量 “ … ”是字符串连接操作符 Lua没有整形,都是实数 在字符串前放置操作符"#&...

2019-09-04 09:56:29 61 0

原创 Windows注册自定义URL协议

原理: 在注册表HKEY_CLASSES_ROOT项下加入对应的子项,内容如下: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\test] @="URL:test protocol" "URL Pro...

2019-08-29 11:03:14 704 0

原创 Windows资源管理器图标覆盖优先级设定

我们在安装了TortoiseSVN或TortoiseGit后,会自动在资源管理器的文件夹和文件图标上显示覆盖图标(Icon Overlay),这样会比较方便的查看文件的状态。 但有时候我们安装的其他软件,如Dropbox等,也会在资源管理器中显示覆盖图标,多个软件都显示时,会由于优先级问题导致覆盖...

2019-08-23 11:57:36 193 0

原创 Windows批处理请求UAC管理员权限

@echo off cd /d "%~dp0" cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul if %errorlevel%==0 goto Admin if exi...

2019-08-05 17:35:36 524 0

原创 CEF -- Windows平台编译

本文以CEF 3626版本为例,其他版本的编译可以用其作为参考。 另,本文只是简略的记录了CEF编译过程的大致步骤,并没有事无巨细的记录可能遇到的任何问题,毕竟编译CEF是一个繁琐的事情,需要一定的独立解决问题的能力。 假设: 我们已经将automate-git.py下载到E:\sourcec...

2019-07-13 21:45:55 222 0

原创 Fiddler抓包指南:结合Proxifier工具

本文介绍如何使用Fiddler抓取HTTP和HTTPS协议的包,同时还介绍了如何结合Proxifier工具来处理Filddler无法抓取到包的情况。 一、HTTP基本抓包 Fiddler官网下载安装:https://www.telerik.com/fiddler 对浏览器的抓包,就不再赘述,打开...

2019-06-20 11:44:47 2657 1

原创 WebRTC -- Windows平台编译

写作本文时使用的webrtc版本为:branch heads/67 一、 准备工作 1.0 科学上网工具 如果你不知道什么是“科学上网”或者没有“科学上网”的工具,那么请止步吧。 因为源码都是在命令行中下载,为了防止全局代理对命令行无效,可以设置如下环境变量: netsh ...

2019-06-20 10:01:46 85396 1

原创 Windows Console彩色进度条

我们在进行命令行程序开发的时候,经常会遇到显示一个进度条,如下载进度等,现在提供一个封装好的在命令行中显示彩色进度条的函数: #include <windows.h> void ShowConsoleProcess(double percentage) { const char* ...

2019-05-30 11:12:28 267 0

原创 Windows驱动开发入门 --WDM inf文件模板

本文介绍在安装WDM驱动时如何编写inf文件。由于inf文件的规则比较负责,写法也比多,故本文介绍的是通过Visual Studio开发WDM驱动时的inf模板文件的通用写法。 模板文件如下: ; ; 用于Visual Studio的inf模板 ; [Version] ; 固定写法 Signat...

2019-04-13 18:16:51 193 0

原创 Python瑞士军刀 --Python2与Python3共存

虽然Python3已经出来了有些年头了,且主流的模块均已支持Python3了,但难免有些脚本和模块由于历史原因还只能使用Python2,所以在电脑上还是会出现Python2和Python3共存的情况。在这种情况下,如何确定我们使用python命令调起的是Python2还是3了?如何确保使用pip命...

2019-03-26 15:06:50 98 0

原创 Windows驱动开发入门 -- HelloWorld

一、驱动开发环境搭建 在Download the Windows Driver Kit (WDK)页面中下载最新版本的Visual Studio和WDK进行安装。如果要下载老版本可以到Other WDK downloads下载。 本文演示环境为:Visual Studio 2017版本,WDK f...

2019-03-13 09:34:11 3193 5

原创 用户界面特权隔离

写这篇文章源于本人在开发过程中遇到向某个进程发送消息失败而起。 一、用户界面特权隔离 在早期的Windows操作系统中,在同一用户下运行的所有进程有着相同的安全等级,拥有相同的权限。例如,一个进程可以自由地发送一个Windows消息到另外一个进程的窗口。从Windows Vista开始,当然也包...

2019-03-06 11:25:10 541 0

原创 Windows驱动开发入门 -- 理清基本概念

一、DDK、WDM、WDF、WDK 我们知道开发Windows平台的应用程序离不开微软提供的SDK,同样开发Windows驱动也离不开微软提供的类似SDK的开发包。但是驱动模型的发展经历了几个过程,每个过程都有不同的驱动开发包,所以导致很多初学者容易弄混。 下面通过图表的形式列出各种驱动开发包的名...

2019-01-15 16:09:01 488 0

原创 使用NuGet管理C++项目的依赖库

一、NuGet介绍 使用C++进行开发的同学,一定很羡慕Python的pip、Java的Maven等包管理器,只需要一个命令就可以将工程需要的依赖库安装到位。由于C++的大多数库都是系统、编译环境强相关联的,所以在开发中我们会针对不同的操作系统(Win32、Win64等)、编译器(MSVC140、...

2019-01-10 18:40:25 2493 0

原创 NSIS教程(10): MUI跳过某些安装步骤

在正常情况下安装包会有“欢迎界面”,“安装目录选择界面”等等。假如现在安装包支持通过命令行参数传入“安装目录”(如setup.exe /installdir F:\test),在检测到命令行参数中已经指定了安装目录的情况下,则跳过“欢迎界面”和“安装目录选择界面”。 HOW TO DO? 在页面插...

2018-11-14 10:47:11 655 0

原创 如何使软件适应高dpi显示环境

一、dpi介绍 dpi是“Dots Per Inch”的缩写,表示每英寸的像素点个数,也就是像素点的密集度。 dpi = 总像素点 / 总面积 比如一个32寸的显示,但分辨率只有19201440,而一个24寸的显示器,分辨率却达到38402160,很明显后面这个显示器的每英寸的像素点的个数多,显示...

2018-11-09 12:42:32 4599 0

原创 Qt实现HTTP的Get/Post请求

借助Qt的NetWork模块,可以轻松的实现HTTP的Get/Post请求,而不需要再次引用像libcurl这样的第三方库。 头文件 #include &amp;amp;amp;lt;QNetworkRequest&amp;amp;amp;gt; #include &amp...

2018-10-21 22:21:39 16333 10

原创 拨开字符编码的迷雾--Qt字符编码

在使用Qt开发的过程中,我们经常会遇到中文乱码的问题,虽然网上提供了有很多方法都可以用来解决这个问题,但他们都没有从原理上进行讲解。本文力求从原理上来讲解清楚Qt字符编码的问题。 在阅读本文之前,需要先掌握编码的基础知识以及编译器如何处理字符编码,建议先阅读之前的几篇文章: 拨开字符编码的迷雾–字...

2018-10-21 20:33:04 194 0

原创 Qt无边框窗体模仿Win32标准窗体鼠标拖拽效果

本文介绍如何针对Qt的无边框窗体(即setWindowFlags(Qt::FramelessWindowHint);)实现鼠标拖拽标题栏移动窗体位置、鼠标拖拽窗体四周边框改变窗体大小的行为。 一、为所有控件添加MouseTracking 在Qt中,控件默认只有在至少有一个鼠标按键被按下的情况下,控...

2018-10-21 20:03:06 257 0

原创 Fiddler常见用法

Fiddler官网: https://www.telerik.com/fiddler 一、会话过滤器 选中【Filters】–&amp;amp;gt; 【Use Filters】开启过滤功能。 二、抓取HTTPS请求 【Tools】–&amp;amp;gt;...

2018-10-15 15:01:15 273 0

原创 Qt静态库编译指南

本文编译环境为: VS2013 + Qt5.5.1 一、准备 安装VS2013及下载Qt5.5.1源码。 安装ActivePerl,并且将安装目录添加到PATH环境变量。 安装Python,并且将安装目录添加到PATH环境变量。 安装GPerf,并且将安装目录/gnuwin32/bin目录添加...

2018-10-08 16:59:37 582 0

原创 使用C++生成条形码

一、条形码介绍 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。 条码种类很多,常见的大概有二十多种码制,其中包括: Code39码(标准39码)、Codab...

2018-09-21 12:57:31 3510 2

原创 Git/TortoiseSVN/TortoiseGit常用配置

TortoiseSVN/TortoiseGit 内置的文件比对工具是 TortoiseMerge,用于文件比对和解决冲突合并,TortoiseGit 还支持外部的比对工具使用,比如 Beyond Compare。配置如下: Diff Viewer C:\Program Files (x86...

2018-07-30 21:27:02 1078 0

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