




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1绪论视频监控是各行业重点部门或重要场所进行实时监控的物理基础,管理部门可通过它获得有效数据、图像或声音信息,对突发性异常事件的过程进行及时的监视和记忆,用以提供高效、及时地指挥和高度、布置警力、处理案件等。本系统采用directshow网络组播技术实现了视频捕获、视频压缩、网络传输、视频解码和实时回放,减小了网络带宽占用,高效的传输视频数据,独立于硬件。可扩展性好。完全利用现有1p数据网络传输数据不需要单独布线,显著降低了系统成本,缩短了系统开发周期,并且可以容易的实现远程监测2 windows服务一个windows服务程序是在windows操作系统下能完成特定功能的可执行的应用程序。win
2、dows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式。这些启动方式包括了自动启动和手动启动两种。对于自动启动的windows服务程序,它们在windows启动或是重启之后用户登录之前就开始执行了。而对于手动启动的windows服务程序,你可以通过命令行工具的net start 命令来启动它,或是通过控制面板中管理工具下的服务一项来启动相应的windows服务程序。同样,一个windows服务程序也不能像一般的应用程序那样被终止。因为windows服务程序一般是没有用户界面的,所以你也要通过命令行工具或是下面图中的工具来停止它,或是在系统关闭时
3、使得windows服务程序自动停止。因为windows服务程序没有用户界面,为了能使一个windows服务程序能够正常并有效的在系统环境下工作,程序员必须实现一系列的方法来完成其服务功能。windows服务程序的应用范围很广,典型的windows服务程序包含了硬件控制、应用程序监视、系统级应用、诊断、报告、web和文件系统服务等功能。2.1 添加文件监视服务将生成的服务名为webcamservice的服务添加视频监视功能: 首先,在c盘创建文件夹w 将程序生成的debug中的文件复制到w文件夹 在c/windows/搜索installutil.exe执行文件,将其复制到w文件夹 启动cmd,打
4、开命令提示符窗体键入如图2-1所示 图2-1 添加服务功能 用net start命令启动服务webcamservice如图2-2所示 图2-2启动webcamservice3项目的设计原理3.1 directshow技术采用网络摄像机的远程视频监控具有录像时间长、图像质量好、查询速度快等优点,目前应用非常广泛。对于网络摄像机传输的视频数据,需要专门的filter 来处理并在directshow 的框架下或回放,或保存。监控服务器通过internet/intranet 轮询网络摄像机获取视频。本文以视频数据接收filter 的设计过程介绍基于directshow 的视频数据流的传输以及通过自定义
5、的通讯协议的数据解析过程和filter 程序设计与实现过程。directshow1是微软公司在activemovie 和video for windows 的基础上推出的基于com 的流媒体处理的开发包,与directx 开发包一起发布。directshow 为多媒体流的捕捉和回放以及二次开发提供了强有力的支持。运用directshow,可以很方便地从支持wdm 驱动模型的采集卡上采集数据,并且调用其api 函数进行后期处理。它广泛地支持各种媒体格式,包括asf,mpeg,avi,dv,mp3,wave等等,使得多媒体数据的回放变得轻而易举。directshow 是一个开放的框架,因此只要有合
6、适的filter 来分析和解码,可以支持任何格式。3.2 tcp/ip协议在tcp/ip协议组分两种协议:网络层的协议,应用层的协议 网络层协议 网络层协议管理离散的计算机间的数据传输。这些协议是在系统表层以下工作的。比如,ip协议为用户和远程计算机提供了信息包的传输方法。它是在许多信息的基础上工作的,好比说是机器的ip地址。在机器ip地址和其它信息的基础上,ip确保信息包能正确地到达目的机器。通过这一过程,ip和其它网络层的协议共同用于数据传输。如果没有网络工具,用户就看不到在系统里工作的ip。 应用层协议相反地,应用层协议用户是可以看得到的。比如,文件传输协议(ftp)用户是看得到的。用户
7、为了传输一个文件请求一个和其它计算机的连接,连接建立后,就开始传输文件。在传输时,用户和远程计算机的交换的一部分是能看到的。 ipip层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-tcp或udp层;相反,ip层也把从tcp或udp层接收来的数据包传送到更低层。ip数据包是不可靠的,因为ip并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。ip数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。高层的tcp和udp服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,ip地址形成了许多服务的认证基础,这些服务相信
8、数据包是从一个有效的主机发送来的。 tcp如果ip数据包中有已经封好的tcp数据包,那么ip将把它们向上传送到tcp层。tcp将包排序并进行错误检查,同时实现虚电路间的连接。tcp数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。tcp将它的信息送到更高层的应用程序,例如telnet的服务程序和客户程序。应用程序轮流将信息送回tcp层,tcp层便将它们向下传送到ip层,设备驱动程序和物理介质,最后到接收方。3.3 c/s架构服务器客户端客户端 . . .在网络连接模式中除对等网外,还有另一种形式的网络,即客户机/服务器网,client/server。在客户机/服务
9、器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。 图3-1 c/s结构4程序流程图及设计4.1程序时序图与系统架构本系统采用面向连接的客户/服务模型,服务器必须首先启动,否则客户进程的connect()系统调用将返回错误代码表示连接失败。无连接的服务进程也必须首先启动以指定本地的套接字地址否则客户进程的数据服务请求传送不到服务器进程。面向连接的c/s时序图如图4-1所示accept()recv()send()close()listen()bind()socket()服务器发送数据-确认发送数据-请求建立连接recv(
10、)close()send()connect()socket()客户 图4-1 程序时序图系统由服务器终端采集传输系统和客户端接收系统两部分组,系统构架如图4-2所示摄像头采集卡服务器服务程序网络传输模块网络接收模块客户端程序解码显示视频流控制指令视频流控制指令 图4-2 系统架构4.2程序设计分析4.2.1任务目标服务器端程序目标:服务器服务器端服务程序进行数据采集(捕捉摄像头捕获数据),提供ip端口实现数据流的传输。客户端程序目标:客户端程序通过ip协议与服务器端通信,接收并回放服务器端采集的视频数据流。4.2.2程序描述socket类:socket之间的连接可以分为三种类型:客户端连接,监
11、听连接以及服务器端连接。 客户端连接是指由客户端的socket提出连接请求,要连接的目标是服务器端的socket。为此,客户端的socket必须首先描述它要连接的服务器端socket(主要是指服务器 端socket的地址和端口号),然后再定位所要连接的服务器端socket,找到以后,就向服务器端 socket请求连接。当然,服务器端的socket此时未必正好处于准备好状态,不过,服务器端的 socket会自动维护客户请求连接的队列,然后在它认为合适的时候向客户端socket发出允许连接 (accept)的信号,这时客户端socket与服务器端socket的连接就建立了。监听连接,服务器端 so
12、cket并不定位具体的客户端socket,而是处于等待连接的状态。当服务器端socket监听到或者说 接收到客户端socket的连接请求,它就响应客户端socket的请求建立一个新的socket句柄并与客户 端连接,而服务器端socket继续处于监听状态,还可以接收其它客户端socket的连接请求。服务器端连接,是指当服务器端socket接收到客户端socket的连接请求后,就把服务器端socket的描述发给客户端,一旦客户端确认了此描述,连接就建立了。在本文中的聊天程序用的就是监听连接,即服务器设置连接个数后进行监听,客户端进行对服务器端的连接,这样就可以进行相互通信了。tcpservice
13、类namespace tcp internal class tcpserver : idisposable / this is not the max number of connections you can have, its the number / that can queue up waiting for you to accept them. if more than maxconnection / more clients try to connect while you are servicing another, onconnect is / probably taking
14、too long. const int maxconnections = 3; #region member variables private arraylist m_aryclients; private socket m_socklistener; private volatile bool m_bshuttingdown; private manualresetevent shutdownready; #endregion / return an array of the ip addresses assigned to this pc public static ipaddress
15、getaddresses() ipaddress arylocaladdr = null; string strhostname = ; / note: dns lookups are nice and all but quite time consuming. strhostname = dns.gethostname();#if using_net11 iphostentry ipentry = dns.gethostbyname( strhostname );#else iphostentry ipentry = dns.gethostentry( strhostname );#endi
16、f arylocaladdr = ipentry.addresslist; / verify we got an ip address. if( arylocaladdr = null | arylocaladdr.length 0 ) if (datareceived != null) datareceived(this, ref s.obj, ref s.bybuff, nbytesrec); / restablish the callback asynccallback receivedata = new asynccallback( onreceiveddata ); s.client
17、.beginreceive( s.bybuff, 0, s.bybuff.length, socketflags.none, receivedata, s ); else / if no data was received then the connection is probably dead removeconnection(s); catch removeconnection(s); / remove a connection from the list of active connections private void removeconnection(sockwrapper s)
18、try s.client.shutdown( socketshutdown.both ); s.client.close(); catch / remove it from the array try m_aryclients.remove( s ); catch / fire the disconnected event if (disconnected != null) disconnected(this, ref s.obj); / wrapper for each client (stored in m_aryclients) internal class sockwrapper /
19、the buffer is used by receive public socket client; public byte bybuff; public object obj; public sockwrapper(socket client) client = client; bybuff = new byte256; obj = new object(); public delegate void tcpconnected(object sender, ref object o); public delegate void tcpsend(object sender, ref obje
20、ct o, ref bool b); public delegate void tcpreceive(object sender, ref object o, ref byte b, int bytecount);webcamservice 类:namespace webcamservice public class webcamservice : servicebase #region required service related methods private system.componentmodel.container components = null; public webca
21、mservice() initializecomponent(); private void initializecomponent() components = new system.componentmodel.container(); this.servicename = webcamservice; protected override void dispose( bool disposing ) if( disposing ) if (components != null) components.dispose(); base.dispose( disposing ); #endre
22、gion stathread public static void main(string args) thread.currentthread.name = main thread; webcamservice servicetorun = new webcamservice() ; if ( debugger.isattached ) servicetorun.run(); else servicetorun.canpauseandcontinue = false; servicebase.run(servicetorun); #region member variables privat
23、e const int maxoutstandingpackets = 3; / / the thread will run the job. / the job is the method run() below / protected thread thread = null; private manualresetevent connectionready; private volatile bool bshutdown; private volatile int iconnectioncount; #endregion / / set things in motion so your
24、service can do its work. / 为了服务器可以工作而设置的选项 / protected override void onstart(string args) threadstart starter = new threadstart(run);/实例化进程 thread = new thread(starter); thread.start(); / / stop this service. / 停止服务 / the run() method tests for this thread state each second / 每秒都为这个进程启动方法测试 / protec
25、ted override void onstop() / set exit condition /设置退出状态 bshutdown = true; / need to get out of wait /需要退出等待 connectionready.set(); public void run() const int videodevice = 0; / zero based index of video capture device to use const int framerate = 15; / depends on video device caps. generally 4-30.
26、const int videowidth = 640; / depends on video device caps const int videoheight = 480; / depends on video device caps const long jpegquality = 30; / 1-100 or 0 for default const int tcplistenport = 399; capture cam = null; tcpserver serv = null; imagecodecinfo myimagecodecinfo; encoderparameters myencoderparameters; / set up logging /建立日志记录 streamwriter sw = file.appendtext(d:webcam.log); try / set up member vars connectionready = new manualresetevent(false); bshutdown = false; / set up tcp server /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白银希望职业技术学院《大数据算法》2023-2024学年第二学期期末试卷
- 基于语义网的多模态文本理解与生成-洞察阐释
- 中国厨师上门O2O行业市场集中度、企业竞争格局分析报告-智研咨询发布
- 普速列车长高水平人员应知答练习试题及答案
- 课件保险公司综合业务实训(第二版)第四章 保险的投保和核保
- DB13T 2956-2019 空气净化用活性炭和活性炭包通 用技术要求
- 中级数据库考试试题及答案
- DB13T 3010-2018 冷链物流 冷库技术规范
- 巴音郭楞职业技术学院《专业技能与实践》2023-2024学年第二学期期末试卷
- 志工部笔试题目及答案
- 2025年道德与法治课程考试试卷及答案
- 天津2025年中国医学科学院放射医学研究所第一批招聘笔试历年参考题库附带答案详解
- 《小米印度发展路线》课件
- 互联网公司网络安全工程师入职培训
- 2025年中南出版传媒集团湖南教育出版社分公司招聘笔试参考题库含答案解析
- 2024-2025学年浙江省金华市第五中学七年级上学期期中考试英语试卷
- 青科综评面试真题及答案
- 广东惠州事业单位招聘医疗卫生岗考试模拟题带答案2025年
- 河北省2025年普通高中学业水平选择性考试·调研卷I历史+答案
- 2023年贵州省粮食储备集团有限公司面向社会公开招聘工作人员15人笔试参考题库附带答案详解
- 车辆抵顶合同协议
评论
0/150
提交评论