- 博客(104)
- 资源 (8)
- 收藏
- 关注
原创 Npm私有仓库Nexus的使用
公司内部常常搭建内网私服,用于管理封装的工具插件等,和其他源的包缓存,支持网络隔离、节省宽带流量等等,安装 Nexus 官网下载或Docker 方式安装。
2022-05-24 18:15:31 4038
原创 本人遇到的常见g++编译链接错误总结
今天用g++编译程序,提示:C++ "multiple definition of .. first defined here"
2014-07-07 16:52:44 3427
转载 Boost库bind接口轻松实现类成员函数作为回调函数
C++中,将非类成员函数或者类的静态成员函数作为回调函数实现起来非常简单,但是将类的成员函数作为回调函数使用实现起来就相对较复杂,因为成员函数的调用必须有具体的实例对象支持。最近在学习BOOST库,发现BOOST库实现类成员函数作为回调函数非常容易,故发文以作简单总结。 简要介绍了BOOST库,BOOST库又被称为C++准标准程序库,库中大部分特性都被收录在C++11中,下面用到的fun
2014-07-04 13:25:54 9557
转载 MINGW/MSYS与CYGWIN/GCC的介绍及区别
MinGW,即 Minimalist GNU For Windows(GCC compiler suite)。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。MinGW 并不仅是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含
2014-06-25 11:19:41 2537
原创 Linux下链接live555库lib的顺序
live555源码编译之后,自己程序链接live555库提示部分函数链接不到,可能是因为lib链接顺序b
2014-06-23 10:54:41 1736
转载 JavaScript两种方法实现sleep
方法一:function sleep(d){ for(var t = Date.now();Date.now() - t <= d;);}sleep(5000); //当前方法暂停5秒方法二:
2014-06-18 15:48:19 1786
原创 boost中result_of简单使用
#include int main(){ typedef double (*Func)(double d); // 函数指针定义 Func func = sqrt; // 函数指针赋值 boost::result_of::type x = func(5.0); // 类型推导 std::cout<< "x: " << x << std::endl; std::cout
2014-05-23 16:48:00 1621
原创 boost中property_tree操作内存中的数据
void ReadJson(const char * szJson){ std::stringstream ss(szJson); boost::property_tree::ptree pt; boost::property_tree::read_json(ss, pt); // 读取数据 // pt.get("cmd"); return;}void WriteJso
2014-05-23 09:59:08 1377
原创 boost读写锁
boost::shared_mutex是共享锁,有lock、unlock方法以及shared_lock、shared_unlock方法。 boost::shared_mutex可以用来实现读写锁。多线程中的一个经典问题是一写多读,即当有线程发生写操作时,所有其他线程的读操作暂停,其他时刻,允许多个线程同时读操作。使用boost::shared_mutex构造读写锁时需要使用到b
2014-05-13 10:01:57 2721 1
原创 关于Onvif的一些总结
最近这几天搞定了Onvif的剪裁,过程中对Onvif的开发多了一些了解,现在记下来以便积累。如果哪位高手看到此文存在错误,望不吝赐教!1、大部分onvif开发者是通过gsoap工具和官网提供的wsdl文件来生成开发文件的,里面包含onvif标准的各种接口,最后再根据开发文件编写自己的程序。我觉得这个过程十分麻烦,为何不能像第三方库那样提供直接的开发文件? 答:总的来说,Onv
2014-03-09 16:56:01 3429 2
转载 剪裁Onvif:减小soapC.cpp文件的大小(二)
gSOAP生成的onvif框架代码太大了,可以通过以下方法裁剪1. 编译选项 -DWITH_NOIDREF2. 修改生成的代码,去掉所有的soap_default_xxx,这些函数里面都是将结构体的成员置为0的,完全可以用memset来代替。 修改方法:首先删掉这些函数: cat onvifC.c |awk -F' ' 'BEGIN{i=0}
2014-03-09 15:58:44 3984 1
原创 剪裁Onvif:减小soapC.cpp文件的大小(一)
背景介绍:1、本人是目前在公司是负责产品中安防设备接入的,Onvif和GB28181均是客户端,不用做服务器,所以关于服务器的细节不是很了解;2、去年根据需求完成了Onvif设备的接入,但不灵活和健壮,且so文件很大(Debug版本有18M,说到都是泪),所以剪裁Onvif的计划早已规划,今年产品系统重构刚好逮着机会试着剪裁Onvif。上一周花了三天时间终于完成了这一目标,首先得感谢Q群1
2014-03-09 14:26:57 5821 2
转载 std::tr1::shared_ptr源码赏析
vs2010的std::tr1::shared_ptr和boost的shared_ptr比起来简单易懂,代码短小精悍。我没有细读过boost::shared_ptr的代码,粗略看过,细节上的区别还是很大的。大致结构shared_ptr是一个模板类,派生自_Ptr_base。其中_Ptr_base内记录的_Ty*是用户创建shared_ptr时传入的要管理的指针;而_Ptr_base
2014-02-26 18:35:57 4451 1
转载 shared_ptr简介以及常见问题
本文中的shared_ptr以vs2010中的std::tr1::shared_ptr作为研究对象。可能和boost中的有些许差异,特此说明。基本功能shared_ptr提供了一个管理内存的简单有效的方法。shared_ptr能在以下方面给开发提供便利:1、 使用shared_ptr能有效的解决忘记释放内存带来的内存泄漏问题。同时通过自定义删除器功能还能广泛的用于任
2014-02-26 18:22:13 4730
原创 Debian系统升级
以Debian 6升级到7为例:1、打开更新源地址:vim /etc/apt/sources.list;2、将squeeze替换为wheezy;3、终端输入:apt-get update 和 apt-get dist-upgrade(不要用apt-get upgrade,可能重启之后会出现问题);4、等待缓慢升级完成然后重启即可。
2014-02-24 16:07:37 1978
原创 C++设计模式——单例模式
template class SingletonTmpl{public: static CBase *Instance() { if (0 == m_instance) m_instance = new CBase(); return m_instance; } static void Destroy() { if (0 != m_instance) {
2014-02-13 14:47:08 763
原创 C++设计模式——简单工厂模式、工厂模式、抽象工厂模式
1、简单工厂模式:C++设计模式——简单工厂模式2、工厂模式:C++设计模式——工厂方法模式3、抽象工厂模式:C++设计模式——抽象工厂模式
2014-02-10 15:42:10 1416
转载 宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等
先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等。例如:#define myprintf(...) printk("[lch]:File:%s, Line:%d, Function:%s," __VA_ARGS__, __FILE__, __LINE__ ,__FUNCTION__);此处的 #define 的作用
2014-01-23 16:52:54 1146
原创 Linux常用开发环境安装
一. 安装 openssh-server$ sudo apt-get install openssh-server1.建立 SSH KEY: $ ssh-keygen -t rsa -P "" (注意不要多加空格或缺少空格)中途需要安装者选择保存密钥的文件,按回车使用默认的文件就可以了:Enter file in which to save the key (/home/hea
2014-01-22 17:37:37 1119
转载 RTMP协议中的AMF数据类型说明
这里有一个连接,amf0和amf3的库,我下了看了下,还是自己写吧,哎。http://wooce.iteye.com/blog/1396278参考crtmpserver的代码写的,其中有amf.h文件。 AMF数据第一个byte为此数据的类型,类型有:Number0×00double类型Boolean0×01bool类型
2014-01-14 19:53:05 5508
转载 Rtmp协议简单分析(二)——协议交互过程
具体传输的过程是这样的,首先双方先进行握手,握手过程官方文档上有说明,但是在flash10.1之后,adobe公司改了握手,文档上那个握手不能用了,至少播放AVC和ACC不能用,这东西太坑人了,改了又不说一声,而且一个本来简单的握手改的很是复杂,居然要依赖openssl加密,有必要吗。网上找不到有关文章,我只有看rtmpserver开源项目源码来弄。 握手步骤没有变,但内容完全
2014-01-14 19:21:27 2520
转载 Rtmp协议简单分析(一)——协议数据
首先说下rtmp协议包的格式。握手之后,rtmp传输一个数据默认的长度是128bytes,这128bytes不包括包头的长度,只是数据的长度,文档上面没有说明,很憋了我一段时间,数据超过这个长度之后就要分块,超过128bytes的数据放到下一个块中,以此类推。块大小是可配置的,最大块是65535字节,最小块是128字节。块越大CPU使用率越低,但是也导致大的写入,在低带宽下产生其他内容的延迟。
2014-01-14 18:05:15 1639
原创 更新 Debian 的 SVN 版本
Debian版本在Linux桌面版本中占用内存较小,也不会频繁的更新版本,但往往软件版本不是最新。比如我在Debian 7.2上apt-get install subversion默认安装SVN的版本是1.6的,但我的SVN库最低要求是1.7,而最新SVN版本是1.8了。如果你发现使用apt-get update和apt-get upgrade之后却不能更新,可以参考下面的方法。(以SVN
2014-01-08 19:44:35 1890
原创 Linux错误代码定义表
errno-base.h#ifndef _ASM_GENERIC_ERRNO_BASE_H#define _ASM_GENERIC_ERRNO_BASE_H#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory */#define ESRCH 3 /*
2014-01-03 10:19:31 913
转载 linux 编译指定库、头文件的路径问题
1.为什么会出现undefined reference to 'xxxxx'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。2.-l参数和-L参数-l参数就是用来指定程序
2013-12-17 13:32:14 2357
转载 流媒体Live555(五)——openRTSP流程分析
openRTSP是对RTSPClient的实现,与服务器对应的客户端功能1、初始化BasicTaskschedular::createNew()BasicUsageEnvironment::createNew()解析输入streamURLourClient= createClient(streamURL)\_ourRTSPClient = RTSPC
2013-12-10 18:35:40 1368
转载 为现有的二进制文件制作deb包
如何制作Deb包和相应的软件仓库,其实这个很简单。这里推荐使用dpkg来进行deb包的创建、编辑和制作。1. deb包的文件结构deb 软件包里面的结构:它具有DEBIAN和软件具体安装目录(如etc, usr, opt, tmp等)。在DEBIAN目录中起码具有control文件,其次还可能具有postinst(postinstallation)、 postrm(postremove
2013-12-03 22:11:26 4200
原创 Windows和Linux下播放采集wave格式音频文件的简单记录
wave音频的部分介绍可参看前面两篇文章:WAV格式常见的几种压缩形式(compression code)、WAV音频格式。Windows:1、在windows上,api基本上屏蔽了驱动的不能,可直接使用windows media api,播放使用waveIn_xxx系列,采集使用waveOut_xxx系列。2、如果你熟悉ffmpeg,也可使用里面的接口进行播放和录制。不过wa
2013-12-01 22:36:24 2313
转载 WAV音频格式
WAV是音频文件存储格式,不是音频的编解码。另可见,WAV格式常见的几种压缩形式(compression code)。1、综述 WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。 WAVE文件是由若干个Chunk组
2013-12-01 19:43:27 1771
转载 WAV格式常见的几种压缩形式(compression code)
WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道。标准格式化的WAV文件采样频率为44100Hz,采样比特为
2013-12-01 19:38:54 12223 1
原创 Windows和Linux编译Live555的Debug版本(可调式)
修改UsageEnvironment/include目录下的UsageEnvironment.hh文件,加入DEBUG宏定义#ifndef _USAGE_ENVIRONMENT_HH#define _USAGE_ENVIRONMENT_HH#define DEBUG 1 // 新添加#ifndef _USAGEENVIRONMENT_VERSION_HH#include "Usag
2013-11-29 11:23:14 3601
转载 RTSP服务器实例live555源代码分析
1. RTSP连接的建立过程 RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话。 首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立Socket(ourSocket)在TCP的554端口进行监听,然后把连接处理函数句柄(RTSPSe
2013-11-28 18:45:09 1180
剪裁onvif之后的wsdl文件示例
2014-03-09
G711参考资料
2013-12-01
Live555源码分析RTSP客户端
2013-11-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人