DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1384|回复: 0
打印 上一主题 下一主题

[安防] 基于DSP的远程网络视频监控系统的实现

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 20:18:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    摘 要:介绍了一种基于DSP的远程视频监控系统,简述了系统的硬件结构体系,重点介绍了基于TCP/IP协议的C/S软件结构的设计和实现方法
关键词:DSP;TCP/IP协议;远程监控;C/S
    本文提出了一种基于DSP的远程监控系统的设计,并给出了Windows环境下用Delphi实现远程控制的设计方法,克服了编写Winsock应用程序的复杂性。找到了一些方法能够很好地解决远程控制传输占有系统资源过多、实时性差、稳定性差等关键问题。
  本套远程控制系统主要针对实验室无人监管的发展要求,应用先进的计算机数字化技术,网络技术,多媒体技术,实施对图像、语音以及数据的远程实时监控。本系统选用TI公司的高速DSP完成编码工作,其中音频采用TLV320AIC23,视频采用MPEG压缩技术。针对不同的网络状况和运用需求,还可更换DSP的编码算法。

1 系统简介
  系统中可采用A/D,D/A,视频解码芯片,逻辑电路,内存,总线等基本部件。结构如图1所示。A/D的作用是将摄像头输出的标准的电视信号转换为标准格式的数字信号,然后在时序与逻辑电路的配合下送到视频压缩编码DSP中处理。DSP对接受的信号进行识别,编码等运算,由网络芯片进行D/A转换后,把经过压缩的视频信号无失真的通过网络传给远端用户。采用DSP来实现压缩和编码的优点在于他比采用专业压缩芯片的方法灵活性大,产品的升级或算法的更改极为方便。图像数据存储器和通信缓冲器都是大容量的存储器。他要存储压缩编码后的图像数据。并且要提供通信用的缓冲区。


500)this.style.width=500;" border=0>

    时序与控制逻辑电路是为了协调视频解码芯片和图 像处理DSP之间的工作而设置的,他根据视频解码芯片的输出信号和同步输出信号产生符合DSP的数据接口时序,以便DSP对于图像数据的实时存储和处理。

2 软件实现
  在软件设计中,采用典型的C/S结构,由客户端与服务端两部分构成。客户端主要是负责向服务端发出获取服务端屏幕图像数据的请求,把从服务端发送而来的屏幕图像在本地实时地显示出来;而服务端主要是负责响应客户端的请求并抓取与发送屏幕图像。由于服务端所抓取取的屏幕图像一般为位图格式,其数据量较大,若直接发送则会导致占用网络带宽过大、实时性差、占用系统资源过多、稳定性差等问题,因此需经过压缩后才能将其发送给客户端,而客户端相应地也要将接受到到屏幕图像数据进行解压缩后才能正确地将屏幕图像显示出来。
  WinSock是一组API,用于在网络上传输数据和交换信息。通过WinSock编程有更大的灵活性,因为他不需要关心网络连接的细节,然而用WinSock编程却很复杂。但因为TClientSocket元件和TServerSocket元件(在Internet页)封装了WinSock的大部分API,使得对WinSock的访问大大简化。
  程序原理:运行服务端开始侦听,再运行客户端,输入服务端IP地址建立连接,然后发一个字符通知服务端抓取屏幕。服务端调用自定义函数Cjt-GetScreen抓取屏幕存为BMP,把BMP转换成JPG,把JPG写入内存流中,然后把流发送给客户端。客户端接收到流后做相反操作,将流转换为JPG再转换为BMP然后显示出来。
    (1)服务端的程序
  在Internet面板上拖一个ServerSocket控件到窗口,该控件主要用于监听客户端,用来与客户端建立连接和通讯。设置好监听端口后调用方法Open或者Active:=True即开始工作。注意:当Socket开始监听后就不能再改变他的端口,要改变必须先调用Close或设置Active为False,否则将会产生异常。另外,如果该端口已经打开,就不能再用这个端口了。所以程序运行尚未退出就不能再运行这个程序,否则也会产生异常,即弹出出错窗口。实际应用中可以通过判断程序是否已经运行,如果已经运行就退出的方法来避免出错。
  当客户端有数据传入,将触发ServerSocket1ClientRead事件,就可以在这里对接收的数据进行处理。在本程序中,主要是接收客户端发送过来的字符信息并根据事先的约定来进行相应操作。
    服务器程序部分代码如下:


500)this.style.width=500;" border=0>
    (2)客户端程序
  添加Socket控件ClientSocket以及一些必要的控件。 ClientSocket的属性跟ServerSocket差不多,不过多了一 个Address属性,表示要连接的服务端IP地址。填上IP地址后点“连接”将与服务端程序建立连接,如果成功就可以进行通讯了。点击“抓屏”将发送字符给服务端。因为程序用到了JPEG图像单元,所以要在Uses中添加JPEG。
    客户端程序部分代码:


500)this.style.width=500;" border=0>
  程序有待改进的地方:可以加一个压缩单元,发送前先压缩再发送。注意:这里也是有技巧的,就是直接把BMP压缩而不要转换成JPG再压缩。实际上Delphi本身就自带了Zlib.pas和Zlibconst.pas两个单元文件来解决数据压缩问题,实现了很高的数据压缩比率。具体实现的思路如下:首先利用服务器捕捉到当前整个屏幕的图像,然后在内存中保存为BMP文件格式。在服务端进行压缩时,使用TCompressionStream对象对原始图像进行压缩并且保存在自定义的变量中;在客户端解压缩时,使用tdecompressionStream对象对被压缩的图像进行解压缩,还原为BMP格式的图像文件并随即显示出来。

3 结语
  在整个实现过程中,除了考虑屏幕获取和数据压缩、解压缩这两个核心问题外,还要注意选择好用于传输的网络协议以及服务端和客户端双方的协议等。利用上述技术和方法能够有效地对网络上的计算机、网络设备进行控制与管理,大大地提高了工作效率和减少了工作量。

参考文献
[1]Steve Teixeira Xavier Pacheco.Delphi5开发人员指南[M].北京:机械工业出版社,2000.
[2]张友生.远程控制编程技术[M].北京:电子工业出版社,2002. [1]
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-4-25 22:05 , 耗时 0.094426 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表