- 博客(26)
- 资源 (4)
- 收藏
- 关注

原创 C++ header-only HTTP框架cuehttp
简介cuehttp是一个使用Modern C++(C++14)编写的跨平台、高性能、易用的HTTP框架。基于中间件模式可以方便、高效、优雅的增加功能。cuehttp基于boost.asio开发,使用http-parser进行HTTP协议解析。cuehttp内部包含一组中间件函数,注册的中间件会根据中间件的添加顺序执行。在中间件中也可以选择是否进行下一个中间件的执行或改变中间件内的行为执行顺序。...
2019-12-09 09:48:10
937
原创 C++11中实现类似golang的defer
golang中有个处理异常的关键字defer应用场景类似于java里面的finally,使用的时候就是所有的其他的正常的函数进程执行完毕之后都要执行defer。也就是被defer修饰的函数或者语句都是等到所有的作用域内部的函数执行完毕才会执行。defer的这个特性正好契合C++的RAII。那我们能不能利用RAII实现defer的功能呢。思路RAII我们知道对象在作用域结束自动析构,那...
2019-12-11 21:52:49
764
原创 Visual Studio解决方案sln版本升级/高低版本转换工具
我们使用Visual Studio 版本互转工具给用户提供更多的Visual Studio版本选择。使用方法如下:打开转换工具点击浏览,选择需要转换的解决方案文件在下方列表中选择需要转换的版本然后双击关于注意 如果选择把一个高级版本“降级”为低级版本,则需要手动进行一些修改,否则项目出错。例如:把
2019-12-10 23:21:53
16540
2
原创 nginx-rtmp开启ssi功能页面无法加载css的解决方法
当我们使用nginx-rtmp时并希望同时使用http功能,这里我们使用nginx的配置文件,开启ssi使nginx支持静态网页时,我们遇到页面无法正常加载css的问题。寻找原因我们发现配置文件中缺少#文件扩展名与文件类型映射表include
2019-12-10 23:17:27
888
原创 设置vscode默认终端为msys/MinGW32/MinGW64
msys2配置略略略略略…MinGW32/MinGW64安装略略略略略…vscode配置msys/MinGW32/MinGW64终端这里重点在这。在vscode的settings.json中添加以下配置 "terminal.integrated.shell.windows": "cmd.exe", "terminal.integrated.shellArgs.windows":...
2019-11-22 14:44:54
4392
2
原创 编译时遇到stray '\239' inprogram,stray '\187' inprogram,stray '\191' inprogram的解决办法
使用用户提供的交叉编译工具链编译程序时遇到一个编译错误stray '\239' inprogramstray '\187' inprogramstray '\191' inprogram初看这个错误摸不着头脑,网上的解决方案也是一本正经的胡说八道那我们来看看239 187 191是什么,也就是EF BB BF原来是utf-8的BOM,那原因我大概了解了这个源码的文件格式是带BOM的ut
2017-11-30 10:33:02
2567
原创 使用Onvif协议获取设备快照
获取设备能力Capabilities获取设备的能力,并且可以获取到Media和PTZ的URI,使用Media的URI,可以进行快照的抓取_tds__GetCapabilities* capabilities = soap_new__tds__GetCapabiliti
2017-09-24 15:02:17
1730
原创 使用Onvif协议控制预置位
预置位在安防领域有较为普遍的应用,可以进行很多既定位置的跳转,很方便之前我们说过如何用Onvif协议进行设备的发现,探测,以及云台控制等,今天我们来说一下如何使用Onvif进行预置位的操作流程获取设备能力Capabilities获取设备的能力,并且可以获取到Media和PTZ的URI,使用这两个URL可以进行流和预置位操
2017-09-24 14:54:49
3975
原创 使用ffmpeg保存视频中的快照数据
将从摄像机取出来的I帧数据编码成jpeg图片数据 AVPacket管理,使用wrapper管理AVPacket的资源class AVPacketWrapper{public: AVPacketWrapper()
2017-09-22 11:42:58
804
原创 使用RTSP判断摄像机设备是否在线以及快照抓取
可以使用Onvif/RTSP协议接入摄像机在EasyNVR应用中非常重要的一环就是设备的在线状态判断和快照抓取设备在线状态判断有很多种方法又没有什么方法说有很多种方法指的是,我们可以使用ICMP协议对设备的进行ping操作,或者可以对设备的特定端口进行连接获取判断连接是否一次,再或者使用RTSP协议流程进行判定,但是都有个问题–不靠谱,禁ping,端口未知,RTSP协议实现不标
2017-08-13 23:18:13
6041
2
原创 使用Onvif协议进行设备PTZ云台控制
接上一篇使用Onvif协议最重要的应用就是对设备进行PTZ云台控制,PTZ控制包含转动、变焦等,这里我们主要讨论常用的转动和变焦(也就是放大缩小)流程要进行设备PTZ控制,我们首先需要获取到设备的Device Service Address和此设备的用户名密码前两个流程和获取流地址一样获取设备能力Capabilities获取设备的能力,并且可以获取到Media和PTZ的URI,使用这两个URL可以进
2017-08-12 11:24:43
25353
3
原创 使用Onvif协议进行设备RTSP地址获取
上一篇我们说到如何发现网内Onvif设备,还有如何探测特定设备的信息EasyNVR-Onvif(一)使用Onvif协议进行设备发现以及指定设备信息探测这里我们说如何进行很重要的信息获取,就是设备的流地址,也就是设备的RTSP地址流程要获取设备的RTSP地址,我们首先需要获取到设备的Device Service Address,也就是上一篇得到的如果需要获取更进一步的信息,我们需要知道此设备的用户名密
2017-08-12 10:48:56
6684
1
原创 使用Onvif协议进行设备发现以及指定设备信息探测
首先,我们要了解Onvif协议,https://www.onvif.org/这里我们之探讨如何使用gsoap进行onvif客户端的开发,关于gsoap的onvif框
2017-08-12 01:26:35
13833
原创 使用ffmpeg循环推流(循环读取视频文件)推送RTMP服务器的方法
在做RTMP服务器开发时,总是在测试推流效果。有时候,我们想使用OBS进行推流测试,也可以,这很好。以及其他RTMP推流工具。但是,别忘了,还有ffmpeg这个神器。ffmpeg可以获取各种视频流,并推送给 RTMP流媒体服务器。比如,拉取摄像机RTSP流,推送给RTMP服务器,命令在此 ffmpeg -re -i rtsp://u
2017-07-08 00:36:51
73993
4
原创 编译nginx windows遇到”error C3646: “st_size”: 未知重写说明符“的解决办法
编译windows版的redis,若引用了自定义的C++编写的模块,会遇到下列错误这时,我们需要在引用C++头文件之前使用如下代码段#if (defined _WIN32 && defined _OFF_T_DEFINED)typedef off_t _off_t;#endif此问题解决获取更多信息邮件:support@easydarwin.org WEB:www.EasyDarwin.orgQ
2017-02-14 14:41:31
1243
3
原创 Github Git彻底删除历史提交记录的方法
有时候我们可能会遇到git提交错误的情况,比如提交了敏感的信息或者提交了错误的版本。这个时候我们想将提交到代码库的记录删除,我们要怎么做呢? 首先,我们需要找到我们需要回滚到的提交点的hash,可以使用git log命令获取提交的历史找到需要回滚到的提交点 复制hash值,使用git reset –hard commit_hash 再使用git push origin HEAD –force即
2017-01-08 23:39:49
39682
3
原创 Modern C++(六)强类型枚举enum
我们都知道在C++11前的枚举类型是默认为int类型,不是强类型的,所以毫无关系的两个枚举类型可以进行比较enum EnumA{ A = 1, B = 2};enum EnumB{ C = 1, D = 2};if (EnumA::A == EnumB::C){ //...}并且还隐藏着另外一个问题,由于枚举类型的元素是完全暴露出来的,其作用域内不
2016-11-03 00:05:31
944
原创 Modern C++(五)nullptr关键字
我们都知道在C++11标准之前使用NULL对指针进行置空。但这是不严谨的使用方式。因为在C语言中#define NULL ((void*)0)并且支持#define NULL 0但在C++中#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0)
2016-10-30 02:05:30
415
原创 Modern C++(四)左值与右值
在之前的文章里,我们提到了lvalue、rvalue、xvalue。在C++11之前,左值指的是表达式左边的值,右值指的是表达式右边的值。比如//a为左值,(b + c)为右值a = b + c;这是一个很简单的辨别方法。但C++中有个辨别左值右值的更准确的方法: 可以对其取地址的值为左值,否则为右值在上面的示例中我们可以使用auto d = &a;,但是你无法使用auto e = &(b
2016-10-30 01:27:14
544
原创 Modern C++(三)decltype关键字
C++11中新添加了decltype关键字,它用于在编译时推导表达式的类型。因为decltype在编译期推导类型,并不会计算表达式的值。 我们看一下它是如何使用的//注释为变量类型int a = 5;decltype(a) b = 5; //intdecltype(a + b) c = 5; //intconst int& d = a;decltype(d) e
2016-10-29 02:48:58
498
原创 Modern C++(二)Range-based for loop(基于范围的for循环)
上篇文章我们介绍了auto关键字,最后举了个示例说明auto在改善遍历容器方面的作用。在C++11标准中我们有了Range-based for loop,就是基于范围的for循环,这让我们遍历容器更加的容易。我们先看使用示例。
2016-10-29 00:03:13
720
原创 Modern C++(一)auto自动类型推导
从今天开始,我会将自己一直以来使用C++11的新特性记录下来。作为自己职业生涯的记录以及经验分享。第一篇我给了auto关键字,这是因为实际使用中,确实auto给我们开发效率提升了很多,确实使用的也算是最广。在C++11之前已经有了auto,它指代的是“一个自动存储变量的关键字,也就是申明一块临时的变量内存”,比如:auto int i = 5; 我们很少使用,因为非static的变量本身就是自动存储
2016-10-28 23:34:33
692
原创 _WIN32_WINNT版本列表
Modifying WINVER and _WIN32_WINNT//// _WIN32_WINNT version constants//#define _WIN32_WINNT_NT4 0x0400 // Windows NT 4.0#define _WIN32_WINNT_WIN2K 0x0500 // Windo
2016-09-23 14:19:54
8598
原创 ffplay播放视频源延时的参数设置
使用ffplay播放视频源时,rtsp/rtmp等,会有一定的延时,这里我们可以通过设置ffplay播放参数将延时控制到最小。 ffplay.exe -i rtmp://xxxxxxx -fflags nobuffer 减少缓冲也可以减少分析码流的时间 ffplay.exe -i rtmp://xxxxxxx -fflags nobuffer -analyzeduration 100
2016-09-23 13:05:42
8853
2
原创 C++静态多态CRTP
CRTP指的是Curiously Recurring Template Prattern,这是一种可以实现静态多态的惯用法。我们知道C++中,你不能将基类的虚函数定义为模板函数。这时你就可以考虑使用CRTP。在以后的Modern C++改进设计模式中会有所使用。并且,CRTP不需要像动态多态那样携带虚表和虚指针,拥有更快的运行效率http://eli.thegreenplace.net/2013/1
2016-07-18 21:39:11
2984
原创 使用ffmpeg程序抓取视频流保存为图片
ffmpeg.exe抓取视频流图片ffmpeg.exe从rtsp地址抓取图片ffmpeg.exe -i rtsp://admin:admin@192.168.66.222/11 -rtsp_transport tcp -f image2 -an D:\\pic\\%10d.jpgffmpeg.exe从视频文件中抓取图片ffmpeg.exe -i D:\\test.mp4 -f image2
2016-06-17 17:24:02
8388
1
raft_zh.pdf
2020-03-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人