- 博客(35)
- 资源 (11)
- 收藏
- 关注
转载 C++中引用(&)的用法和应用实例
对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。在c++学习提高篇(3)---隐式指针的文章中我详细介绍了在隐式指针&的用法,其实这两个概念是统一的。引用是C++引入的新语言特性,是C++常用的一个重要内容之
2014-04-09 08:46:20
500
原创 MFC多个控件在对话框上的大小变化
对话框中多个控件随窗体大小变化:在类中加成员函数和成员变量: void SetControlInfo(WORD CtrlId); protected: int m_nCx, m_nCy; CDWordArray m_ctlInfo; 构造函数中初始化:
2014-03-14 22:41:07
1062
转载 MFC 多线程总结
(一) MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外 的用户输入,响应用户及系
2014-02-11 09:47:30
679
原创 UDP协议及包格式
UDP协议的主要特点UDP是一种无连接的、不可靠的传输层协议;在完成进程到进程的通信中提供了有限的差错检验功能;设计比较简单的UDP协议的目的是希望以最小的开销来达到网络环境中的进程通信目的;进程发送的报文较短,同时对报文的可靠性要求不高,那么可以使用UDP协议。UDP的基本工作过程UDP用户数据报传输过程中的封装与拆封 UDP报文传输队列UDP的复
2014-01-02 13:47:46
923
转载 __declspec(dllexport) & __declspec(dllimport)
__declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中 省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类__declspec(dllimport)声明一个导入函数,是说这个函数
2013-11-16 10:39:55
682
原创 CreateProcess执行一个控制台程序,隐藏窗口
STARTUPINFO StartupInfo;//创建进程所需的信息结构变量 PROCESS_INFORMATION ProcessInfo; GetStartupInfo(&StartupInfo); StartupInfo.lpReserved=NULL; StartupInfo.lpDesktop=NULL; StartupIn
2013-11-15 15:24:26
3328
原创 心跳包
用来判断对方(设备,进程或其它网元)是否正常运行,采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经离线。用于检测TCP的异常断开。基本原因是服务器端不能有效的判断客户端是否在线,也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一
2013-11-13 17:23:36
823
转载 MFC获取本机IP地址
获取本机IP地址 CString sLoginUser;CString sLocalIP;WORD wVersionRequested;WSADATA wsaData;wVersionRequested = MAKEWORD( 2, 0 ); if ( WSAStartup( wVersionRequested, &wsaData ) == 0 ){ sLoginUse
2013-11-11 17:25:19
1592
原创 全屏方案
void CDemoPlay::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CRect rect; for (int i = 0; i { plans[i].GetWindowRect(rec
2013-11-04 19:33:36
588
转载 流媒体方案
首先看下项目需求: 1.最多同时支持16路音视频同时显示。 2.窗口模式,全屏,1窗口,4窗口,9窗口,16窗口。 3.播放控制,开始播放,停止播放,开启音频,停止音频,云台控制,Camera管理。 下面谈谈设计方案: 1.总体设计,按照码流数据流向,可以将系统分成三层: 网络层,负责码流的接收,数据的解包,以及网络故障的处理。 解码
2013-11-04 19:32:13
782
原创 在VC++中读写INI文件
在VC++中读写INI文件 在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:一.将信息写入.INI文件中. 1.所用的WINAPI函数原型为:BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR
2013-10-24 08:43:31
509
原创 CString的多种初始化
1.直接将字符串赋值给CString对象代码如下:CString str1=“songxiwei”;2.通过构造函数初始化代码如下:CString str2(' ',100);预分配100字节,填充空格3.加载工程中字符串资源代码如下:CString str3;sr3.LoadString(IDS_STR);4.使用CString类的成员函数Format初始
2013-10-23 15:43:03
3961
转载 Windows服务编写原理及探讨(四)
(四)一些问题的讨论 前面几章的内容都是服务的一些通用的编写原理,但里面隐含着一些问题,编写简单的服务时看不出来,但遇到复杂的应用就会出现一些问题,所以本章就是用来分析、解决这些问题的,适用于高级应用的开发人员。我这一章的内容都是经过实验得到的,很有实际意义。 我在第一章里面就说过,是由一个服务的主线程执行CtrlHandler函数,它将收到各种控制命令,但是真正处理命令,执
2013-10-21 17:32:39
809
转载 Windows服务编写原理及探讨(三)
(三)对服务的深入讨论之下 现在我们还剩下一个函数可以在细节上讨论,那就是服务的CtrlHandler函数。 当调用RegisterServiceCtrlHandler函数时,SCM得到并保存这个回调函数的地址。一个SCP调一个告诉SCM如何去控制服务的Win32函数,现在已经有10个预定义的控制请求:Control codeMeaning
2013-10-21 17:31:42
748
转载 Windows服务编写原理及探讨(二)
(二)对服务的深入讨论之上 上一章其实只是概括性的介绍,下面开始才是真正的细节所在。在进入点函数里面要完成ServiceMain的初始化,准确点说是初始化一个 SERVICE_TABLE_ENTRY结构数组,这个结构记录了这个服务程序里面所包含的所有服务的名称和服务的进入点函数,下面是一个 SERVICE_TABLE_ENTRY的例子:SERVICE_TABLE_ENTRY se
2013-10-21 17:30:34
954
转载 Windows服务编写原理及探讨(一)
有那么一类应用程序,是能够为各种用户(包括本地用户和远程用户)所用的,拥有用户授权级进行管理的能力,并且不论用户是否物理的与正在运行该应用程序的计算机相连都能正常执行,这就是所谓的服务了。(一)服务的基础知识Question 1. 什么是服务?它的特征是什么? 在NT/2000中,服务是一类受到操作系统优待的程序。一个服务首先是一个Win32可执行程序,如果要写一个功能完备且强大的服
2013-10-21 17:28:18
1077
转载 基于live555的流媒体代理转发服务器
对于并发量并不大而且对性能要求不是很高的流媒体传输模块,live555还是很好的选择,下面说一下我所实现的流媒体代理服务器(目前只能实现对H264单视频的转发)代理转发主要分为对RTSP的转发与对RTP的转发(没有实现对rtcp的转发),尽量做到不破坏原有程序框架,所以还是要将整个代理过程融合于ServerMediaSubsession、Source、Sink的循环中,按照流程,RTSP OP
2013-10-19 15:25:53
1165
转载 AVI文件格式
AVI(Audio Video Interleaved的缩写)是一种RIFF(Resource Interchange File Format的缩写)文件格式,多用于音视频捕捉、编辑、回放等应用程序中。通常情况下,一个AVI文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个视频流),不过含有单一音频流或单一视频流的AVI文件也是合法的。AVI可以算是Windows操作系统上最基本的、
2013-10-19 09:53:57
454
转载 LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突
以前经常遇到这个警告信息,因为运行并没有什么问题,所以也没深究。但是耿耿于怀那个“ 0 个错误,0 个警告”的成功提示,在网上搜了一下。原来问题出在默认库的引用选择上。VS2008,项目——属性——配置属性——C/C++——代码生成:他有/MT,/MTd,/Md,/MDd四个选项,你必须让所有使用的库都使用相同的配置,否则就会有相应的提示,甚至可能会出现无法解析的函数。有时我们使用的库不是
2013-10-16 16:04:29
1907
转载 live555学习笔记17-H264VideoStreamParser详解
十七:H264VideoStreamParser详解很多人要做实时H264 RTP传输,那么如何充分利用live555来做呢?大家可以看到现有的H264VideoFileServerMediaSubsession中,sink使用了H264VideoRTPSink,source使用了H264VideoStreamFramer,然而这个连接是很复杂的,在这两个节点间要插入了很多其它的节点,其实
2013-10-11 14:35:47
786
转载 live555学习笔记16-几个重要对象的生命期
十六 几个重要对象的生命期live555中很多类,类与类之间的关系复杂,从属关系不明显,层次上看起来也有些乱.所以源代码读起来比较困难,对于一些对象生命的来龙去脉也很难厘清.但这并不能说明live555的架构不好,最适合的才是最好的,对于流媒体的处理来说,live555架构已是相当精巧,当然,这是在你深入了解它的基础上才会有的体会.live555作为服务器,大家都很关心
2013-10-11 14:32:42
615
转载 live555学习笔记15-RTCPInstance类小结
十五:RTCPInstance类小结RTCPInstance是对rtcp通信的封装.RTCP主要是功能是统计包的收发为流量控制提供依据.RTCPInstance统计数据的取得仅依赖于RTPSink的一些函数(因为RTPSink发送RTP包),所以RTCPInstance与其它类(GroupSock,RTPInterface等基础类除外)基本关系不大,封装的比较完整.RTCP
2013-10-11 14:26:32
778
转载 Live555学习笔记14-live555多线程论
十四:live555多线程论江湖传闻:live555如果不改为多线程,在多核心机器上效率会降低.虽然我没做过测试,但比较相信此传闻的真实性 .所以在我试论述一下live555如何对多核进行支持,其实就是改为多线程,嘿嘿.先看此文:http://www.live555.com/liveMedia/faq.html#threads跟据它的说法,liv
2013-10-11 14:23:40
789
转载 live555学习笔记13-RTPInterface详解
十三:RTPInterface详解好几天没写blog了。看源码真累啊,还要把理解的写到纸上,还要组织混乱的思想,令人头痛,所以这需要激情。不过,今天激情又来了。大家应该已理解了GroupSocket这个类。理论上讲那些需要操作udp socket 的类应保存GroupSocket的实例。但事实并不是这样,可以看一下RTPSink,RTPSource,RTCPInstance
2013-10-11 14:21:27
665
转载 live555学习笔记12-h264 rtp包的时间戳
十二 h264 rtp包的时间戳这次我们一起来分析一下live555中是怎样为rtp包打时间戳的.就以h264为例吧.void H264VideoRTPSink::doSpecialFrameHandling(unsigned /*fragmentationOffset*/, unsigned char* /*frameStart*/, unsigned /*numBytesInF
2013-10-11 14:17:16
1570
转载 live555学习笔记11-h264 RTP传输详解(3)
十一 h264 RTP传输详解(3)书接上回:H264FUAFragmenter又对数据做了什么呢?void H264FUAFragmenter::doGetNextFrame(){ if (fNumValidDataBytes == 1) { // We have no NAL unit data currently in the buffer. Read a new
2013-10-11 14:13:55
826
转载 live555学习笔记10-h264 RTP传输详解(2)
十 h264 RTP传输详解(2)上一章并没有把打开文件分析文件的代码找到,因为发现它隐藏得比较深,而且H264的Source又有多个,形成了连环计。所以此章中就将文件处理与H264的Source们并在一起分析吧。从哪里开始呢?从source开始吧!为什么要从它开始呢?我就想从这里开始,行了吧?FramedSource* H264VideoFileServerMediaSubs
2013-10-11 14:09:19
866
转载 live555学习笔记9-h264 RTP传输详解(1)
九 h264 RTP传输详解(1)前几章对Server端的介绍中有个比较重要的问题没有仔细探究:如何打开文件并获得其SDP信息。我们就从这里入手吧。当RTSPServer收到对某个媒体的DESCRIBE请求时,它会找到对应的ServerMediaSession,调用ServerMediaSession::generateSDPDescription()。generateSD
2013-10-11 14:04:51
965
转载 live555学习笔记8-RTSPClient分析
八 RTSPClient分析有RTSPServer,当然就要有RTSPClient。如果按照Server端的架构,想一下Client端各部分的组成可能是这样:因为要连接RTSP server,所以RTSPClient要有TCP socket。当获取到server端的DESCRIBE后,应建立一个对应于ServerMediaSession的ClientMediaSession。对应每个T
2013-10-11 14:00:48
859
转载 live555学习笔记7-RTP打包与发送
七 RTP打包与发送rtp传送开始于函数:MediaSink::startPlaying()。想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当于directshow的拉模式)。看一下这个函数:Boolean MediaSink::startPlaying(MediaSource& source, afterPl
2013-10-11 13:54:48
582
转载 live555学习笔记6-建立RTP会话
六 建立RTP会话首先更正一个概念:ServerMediaSession原先说代表一个流,其实是不准确的。它代表的是server端的一个媒体的名字,而说ServerMediaSubsession代表一个Track是准确的。以后流指的是那些有数据流动的组合。RTP的建立:RTP的建立过程无非是这样:client告诉server自己的rtp/rtcp端口号,server
2013-10-11 13:45:38
982
转载 live555学习笔记5-RTSP服务运作
五 RTSP服务运作基础基本搞明白了,那么RTSP,RTP等这些协议又是如何利用这些基础机制运作的呢?首先来看RTSP.RTSP首先需建立TCP侦听socket。可见于此函数:DynamicRTSPServer* DynamicRTSPServer::createNew(UsageEnvironment& env, Port ourPort,UserAuthent
2013-10-11 12:03:52
809
转载 live555学习笔记4-计划任务(TaskScheduler)深入探讨
四 计划任务(TaskScheduler)深入探讨我们且把三种任务命名为:socket handler,event handler,delay task。这三种任务的特点是,前两个加入执行队列后会一直存在,而delay task在执行完一次后会立即弃掉。socket handler保存在队列BasicTaskScheduler0::HandlerSet* fHandlers中;
2013-10-11 12:00:14
627
转载 live555学习笔记3-消息循环
三 消息循环看服端的主体:live555MediaServer.cpp中的main()函数,可见其创建一个RTSPServer类实例后,即进入一个函数env->taskScheduler().doEventLoop()中,看名字很明显是一个消息循坏,执行到里面后不停地转圈,生名不息,转圈不止。那么在这个人生的圈圈中如何实现RTSP服务和RTP传输呢?别想那么远了,还是先看这个圈圈中实现了什么功
2013-10-11 11:53:00
750
转载 live555学习笔记2-基础类
二 基础类讲几个重要的基础类:BasicUsageEnvironment和UsageEnvironment中的类都是用于整个系统的基础功能类.比如UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误,就需要保存UsageEnvironment的指针.而TaskScheduler则提供了任务调度功能.整个程序的运行发动机就是它,它
2013-10-11 11:49:57
672
Visual_Assist_X_V10.5.17.15
2014-03-31
wireshark源码
2014-03-29
poco-1.4.6p2
2014-03-08
vs2008下的live555工程
2013-10-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人