- 博客(31)
- 资源 (4)
- 收藏
- 关注
转载 MakeFile脚本和shell脚本的一些差异
在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的。本文试着归纳一下Makefile和shell脚本的不同。1、 shell中所有引用以$打头的变量其后要加{},而在Makefile中的变量是以$打头的后加()。实例如下:MakefilePATH="/data/"SUBPATH=$(PATH)ShellPATH="/data/"SUB
2014-12-24 16:15:38 787
原创 onvif Device端开发
这篇文章不是对onvif device端开发的步骤和基本知识的说明,而是我在开发过程中遇到的一些问题。很多问题,比如序列化、比如内存管理都在user guide中详细说明了,因此多看文档还是比较重要的。关于wsdl2h和soapcpp2的使用还是比较重要的,其中我遇到的最重要的一个实际问题是:如何把生成的多个服务端的类联系起来,去监听同一个端口,接收并分发同一份消息。gSO
2014-03-28 11:18:42 3678
原创 QuickTime RTP流
之前做的RTP服务端在QuickTime播放的时候出了问题,会话可以建立,也可以接收到数据,但是QuickTime死活不播放,后来更改了QuickTime的设置,在偏好设置->高级中,把“启用Direct3D视频加速”的勾选取消,便解决问题了..QuickTime不像VLC的容错好,需要在RTSP会话中给定码流的参数,如:“a=fmtp:98 packetization-mode=1;
2014-01-25 14:45:33 1437
原创 opengl glBindTexture为何失败
半年没有写点东西总结下了。有时候脑中想法很多,却又感觉文字功底着实有限,无法把自由散漫的思想分门别类地记下来,好在可以与人交流,掏空自己,然后吸收些新东西;有时候却什么都不想,就翻翻书,享受前人的精神盛宴。 还是写技术性的东西好,可以有章可循,写得不好,就算别人看不大懂,自己肯定是理解,若干日月后翻出来看还可以嘲笑以前的自己,知道自己走过了哪些里程碑。 这一两年涉及太广
2013-12-31 10:32:50 5148
转载 socket bind 之 INADDR_ANY
在最开始接触bind的时候,只是在写基于tcp的server端的时候,知道在listen之前需要先bind一下,用来确保socket能在某个固定的端口监听。而bind的时候,函数参数中的端口填自己将要绑定的端口就行;而IP地址,需要填本机的IP,但是也可以用一个宏INADDR_ANY代替,用这个宏就可以不用查找本机的IP,它就可以代替本机的IP。当时只觉得这个INADDR_ANY比较神奇,但是由于
2013-06-14 17:16:16 4484
原创 小工具,从wireshark中导出原始16进制数据,进而导出RTPPayload数据
wireshark抓到的包可以导出:file->export->file在packet format下可以选择导出的格式,但如果需要的数据是多个包的组合那就麻烦了,因为导出的数据无论如何都会加上链路层、IP层和传输层的头信息,手动删除基本可能。比如,我捕获了很多RTP包,但我只想取出RTP的payload来分析数据是否正确,我可以这样做:首先导出packet byte格式的数据
2013-06-14 17:06:34 14050
原创 GBT28181中的RTP
国标中说h264数据按照RFC3984打包,但是国标的测试工具——SPVMN,却不支持RFC3984的打包方式。无奈之下直接用RFC3550的方式打包,其实就是分包,然后加上RTP头,对于一帧的结束,在RTP头中把MARK置1,并且在一帧的开始把时间戳增加而已。这种打包方式其实和RFC有冲突,打包处理的RTP数据用VLC播放解码不正常,但用SPVMN是可以播的。这种方式下没有测试音视频
2013-05-22 15:50:21 3540 1
原创 编译jrtp和jthread
jrtp和jthread中建议使用CMake来编译,尝试了下,确实简单方便。首先在http://www.cmake.org/cmake/resources/software.html下载Cmake,我需要的是windows版的库,所以使用的是windows版的Cmake如图,选择好jrtp或jthread的路径,Cmake会在该路径下搜索CmakeList.txt,/cc是我自己建
2013-05-14 08:45:04 1234
转载 SSL介绍
1引言 SSL是一种在客户端和服务器端之间建立安全通道的协议。SSL一经提出,就在Internet上得到广泛的应用。SSL最常用来保护Web的安全。为了保护存有敏感信息Web的服务器的安全,消除用户在Internet上数据传输的安全顾虑。OpenSSL是一个支持SSL认证的服务器.它是一个源码开放的自由软件,支持多种操作系统。OpenSSL软件 的目的是实现一个完整的、健壮的
2013-04-22 14:10:38 926
原创 一些面试可能会考到的问题
std::sort用法:std::sort的原型是这样template void sort( RandomAccessIterator _First, RandomAccessIterator _Last );template void sort( RandomAccessIterator _First, Rand
2013-03-18 15:21:19 987
原创 SDP的fmtp部分
之前做的SDP对于h264编码的视频没有做"a=fmtp"字段的解析,今天加上,主要是为了解析出视频的宽高信息。RFC3984的8.2节对field做了介绍,这里只介绍sprop-parameter-sets字段的解码方法,因为我的主要目的是解析出视频宽高信息该字段用BASE-64编码,因此,首先解码BASE-64,这里给出解码方法:long CBase64
2013-02-27 20:28:56 8127
原创 内存分配管理(一)
看jrtplib源码时,对其中的内存管理不理解,遂向高手请教,把所得记于此:主要的两个类:class RTPMemoryManager{public: RTPMemoryManager() { } virtual ~RTPMemoryManager() { } virtual void *AllocateBuffer(size_t numb
2012-10-09 19:31:02 1347
原创 程序员的路
程序员的路太多:无数的语言、无数的平台、加上无数的行业。虽然知识都是相通的,在语言、平台和行业间跳转未必不能成功,但是,在陌生的领域难免要比别人花更多的功夫、投入更多的时间和机会的成本,因此程序员被人认为是“吃青春饭”的行业,因此企业不大愿意培养新人。这就造成了大多数猿类的迷茫——未来的路怎么走? 程序员大多很聪明,这种聪明给我们带来更多的思考:哪种技术收益最大?哪个行业发展更好
2012-09-24 21:14:31 622
原创 STL之erase
今天发现有段STL::map的代码在windows下运行得好好的,但在linux下编不过:“no match for 'operator=' in 'iter = ”。其实就是一行简单的代码:iter = map.erase(iter)而MSDN上对map::erase的说明是这样的:iterator erase(iterator it);iterator erase(
2012-09-21 17:57:05 1346
原创 RTP时间戳相关
通过RTSP建立好会话之后,就可以开始传输RTP数据和RTCP SR包了(用来同步音视频)。这两者涉及到很重要的问题:时间戳。下面是《rtp_audio_and_video_for_the_internet》上的一个时间图。TimeStamp的初始值是随即生成的,然后每一帧数据固定增加一个增量,客户端在接收到数据时,根据这个时间戳就能以正确的时间恢复(其中被分包的视频桢是没有时间戳
2012-09-17 20:26:46 3690
原创 RTSP会话
首先说说程序的大体结构。这是个服务端程序,客户端用的是VLC,因此首先需要开个线程来不断监听客户端的请求,也就是RTSP的请求与应答了(其实就是监听554端口)。RTSP的指令格式很多,最小系统的指令支持做到这几个就差不多了:OPTIONS,DESCRIBE,SETUP,TEARDOWN,PALY。下面是实际的请求与应答:RTSPRecvData : OPTIONS rtsp://192.16
2012-09-14 14:02:36 4929 2
原创 创建和使用DLL
首先创建个DLL工程(win32控制台——DLL工程)添加头文件和CPP文件,如下:#ifndef __DLL_TEST_H__ #define __DLL_TEST_H__ class __declspec(dllexport)CTest {public: CTest(); ~CTest(); void print();protected:private:};
2012-07-12 17:08:14 796
原创 CPaintDC和CDC
今天在对话框上绘制图形时遇到了一个问题,直接上代码:下面是对话框重载的OnPaint函数: CRect rect; CDC *pDC = GetDC(); CDC memDC; GetClientRect(&rect); CBitmap memBitmap; memDC.CreateCompatibleDC(NULL); memBitmap.CreateCompatible
2012-06-30 11:24:31 9533 4
原创 对话框多国语言的支持
在实现对多国语言支持的时候,使用了一种根据选择不同语言,读取不同文件的方式,设置界面中的语言的方法。文件的格式如下:[Setting]Language=0[String]IDD_1=AAAIDD_2=BBBIDD_3=CCC其中Setting是"section name"用来区分关键字,language则是关键字,0是它的值通过不同的值,来区分不同的语言。
2012-06-28 19:48:42 1498
原创 Pictrue Control和TreeCtrl的拖动
Pictrue Control实际上就是CStatic,它的动态创建过程如下: m_Static.Create(_T(""), WS_VISIBLE|WS_CHILD|SS_BITMAP|SS_CENTERIMAGE, CRect(200,200,300,300), this); HBITMAP hBitMap = ::LoadBitmap(AfxGetInstanceHandle(),
2012-06-14 19:47:54 1263
原创 使用python输出pdf
第一种:直接输出PDF——使用reportlab库在https://www.reportlab.com/software/installation/上面有完整的说明首先,下载和安装python,推荐2.5/2.6/2.7然后下载和安装Python Image Library——http://www.pythonware.com/products/pil/,以便在PDF中使用bitmap
2012-06-10 22:13:08 10076 1
转载 构造函数初始化列表和函数内部赋值的区别
转自:http://www.cnblogs.com/BlueTzar/articles/1223169.html构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:class CExample {public: int a; float b; //构造函数初始化列表
2012-06-05 11:18:08 1205
转载 C++实现Singleton设计模式
这个设计模式主要目的是想在整个系统中只能出现一个类的实例。,比如你的软件的全局配置信息,或是一个主控类,等等。// Singleton.h// C++:最简单的方式实现Singleton设计模式#include #include using namespace std;class Singleton{private:
2012-05-29 14:37:14 731
原创 自写PNGButton类,实现透明按钮
主要通过GDIPlus的Image类来加载图片资源,使之支持bmp以外的图片。GDIPlus的初始化方式网上都是用的如下方法:1、在stdafx.h中添加以下声明://引入GDI+头文件 #include using namespace Gdiplus;#pragma comment(lib, "gdiplus.lib" )2、在应用程序类初始化的地方(最
2012-05-24 19:54:36 5961
原创 windows和linux获取文件夹内容的一种方法
windows:使用头文件:、关键函数:_findfirst、_findnext关键结构体:_finddata_t _finddata_t fileinfo; intptr_t hFile; string root; root.assign(Path);//文件夹绝对路径 int len = root.length(); if ( !IsEndObliqueLin
2012-05-21 19:29:48 12678 2
原创 MakeFile中使用linux命令和MakeFile函数
MakeFile的一些基本规则就不说了,一些makefile中混用了linux命令和函数,有时候让人摸不着头脑。下面是一个实际中用到的例子:例1(使用linux命令):#SDK MAKEFILE 1.0DIR:=../..OBJECT:=$(DIR)/lib/libui.a 这是输出的目标文件的路径和文件名-include $(DIR)/main/Comdef 包含
2012-05-16 20:29:25 2684
原创 一些常用的字符转换
最近做FTP相关的东西,遇到各种转换:1.utf-8与unicode的转换:Unicode是定长,而utf-8是变长。转换原理: U-00000000 - U-0000007F: 0xxxxxxx //以0开头的为ASCII码( U-00000080 - U-000007FF: 110xxxxx 10xxxxxx //开头两个“1”,表示有两个字
2012-05-15 20:14:51 968
转载 CListCtrl使用技巧(转)
以下未经说明,listctrl默认view 风格为report1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解
2012-05-02 20:31:26 489
原创 读书笔记
断断续续读完一本《我也能做CTO之程序员职业规划》,恰巧又读到一篇相似的文章——《禅道程序员的十条规则》,不忍想写点东西,反思反思前人的心得。也检讨一下上一篇记得流水账。 依旧不善于写“解决方案”性质的东西,一方面是因为解决问题的时候不会去想该问题要怎么写出来,也是因为自己觉得程序员的成长不是靠比解决了多少问题、掌握了多少技术,而是内在的修炼,所谓“态度决定高度,心态决定成败”,
2012-04-30 21:17:11 516
原创 C++学习笔记
从单片机的纯C转到C++还真是一段很长的学习路,记录一点比较生僻和比较重要的知识点,只是加深点印象罢了,也能知道自己哪些地方不足,读书百遍其义自见嘛....1.一个类的所有数据成员都是公有的,则它不需要提供构造函数(这样的类,不知道有什么存在的意义...)2.explicit只能被应用在构造函数上,防止隐式转换是很有必要的3.即使是一个const对象,当这个对象的数据成员被
2012-04-22 23:31:36 624
原创 程序人生
很早就有写点东西来总结、展望的想法,一直被肚子里的懒虫影响,无法付诸行动。有人说技术性的东西写出来只是整理的作用,帮助记忆而已。虽然也有点道理,不过个人还是更倾向于积极的一面:写出来是为了对自己更负责,重新思考、回味一遍,或许理解深了、思考透了,也更有动力和乐趣了。 突然想到程序人生,是因为觉得一个人很难认识自己,知道自己在这短短几十年究竟想达到什么境界,完成什么目标太难,必须尽
2012-04-16 22:57:03 677
PNGButton类
2012-05-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人