摘要:文章主要对数字视频监控系统中的软件设计方案进行了分析,并提出了解决方案。
关键词:数字视频监控;软件设计;C/S模型
我国视频监控行业最初是由闭路电视监控逐渐发展起来的,已近二十年的历史,但总的来讲,由于起步晚,技术较落后,使该行业中的我国企业既有广阔的发展空间,又面临着来自国外大企业的强大挑战。就目前先进的数字视频监控系统而言,在视频压缩、分析、传输、存储和分级控制等方面仍有待提高和完善。本文主要对数字视频监控系统中的软件设计方案进行了分析,并提出了解决方案。
一、系统软件结构特点
(一)系统模块化,具有较好的扩展性、可重用性和可维护性
系统按照功能划分模块,模块之间具有相对的独立性。可以通过增加或替换模块,对系统进行扩展;另外,利用关键模块可以开发新的视频应用系统,避免了重复开发的麻烦,使系统具有良好的可重用性。
(二)集中管理,具有较高的可靠性、统一性和安全性
设置管理服务器对所有成员进行集中式管理:组成员加入或退出监控组的行为必需通过组管理服务器进行认证或登记。采取集中式管理有利于提高系统的统一性、可靠性和安全性。
(三)提供灵活监控方式
授权用户可随时随地加入监控系统进行实时监控,增加了用户进行监控的灵活性。
二、系统软件的C/S模型
随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机-服务器(Client/Server)模型,即客户机向服务器提出请求,服务器对请求做相应的处理并执行被请求的任务,然后将结果返回给客户机。
基于以上的分析,监控软件的设计采用了客户机一服务器模型。如图1所示,在服务器端对请求做出回应并执行相应的任务,如给客户端发送组播地址、视音频图像、控制指令等。客户机向服务器发送请求,并接收视音频图像,译码播放及一定权限下的控制指令。服务器则根据要求向当前设备状态发出控制指令,从而实现远程监控。
三、系统软件模块
本系统主要由视音频数据处理模块、视音频录像播放模块、云镜控制模块、系统参数设置模块、视音频数据发送模块、视音频数据接收模块六个部分组成。如图2所示。其中,前五个模块运行于监控服务器端,视音频数据接收模块运行于远程客户端,另外,远程客户端也有负责视音频播放的模块,但同服务器端的视音频数据处理模块实现方式差不多,所以不再赘述。各模块的主要功能见图2:
视音频数据处理模块该模块主要通过视音频压缩卡厂商提供的SDK开发包,完成对视音频信号进行实时采集、动态存储、实时播放等处理工作;视音频录像播放模块该模块主要对存储在硬盘上的视音频档进行按条件查询播放;云镜控制模块该模块负责根据译码器协议及命令码,通过串口通信控制云台的转动、镜头的焦距和光圈的调整等;系统参数设置模块该模块主要对系统的一些参数进行设置,如增加用户、删除用户、存储设置、视频采集参数设置等;视音频数据发送模块该模块负责将视音频数据流实时的以组播的方式发送给远程监控端;视音频数据接收模块该模块运行于远程客户端,负责接收监控服务器发送来的视音频数据流。
四、系统软件主要功能模块实现
(一)视频采集模块
视频采集模块将视频采集卡采集到的视频图像置入内存,系统读取内存中的视频图像后才能作后续处理.图像采集时以帧方式采集,在内存中以场方式存储。
由于采集卡在不断地向采集缓冲区写入数据,读取视频数据时需要涉及到临界区访问的问题.系统首先要查询哪块采集缓冲区已就绪,然后锁定要采集的采集缓冲区,接着读取视频资料,最后对视频数据进行显示,或者交给压缩模块处理。
在视频服务器中,一个服务器需要同时连接多个摄像头,因此视频信号的采集、处理应该同步执行。本系统使用了多线程技术,分别为每一路视频信号的处理启动单独的线程。此外,考虑到监控系统实时性要求较高,本系统以多媒体定时器方式启动线程,多媒体定时器可以精确到毫秒级。以下是启动函数及其参数介绍:
MMRESULT timeSetEvent(UINT uDeiay,UINT uResolution,LPTIMECALL-BACK IpTimeProc,DWORD-PTR dwUser,DINT fuEvent)
uDelay:以毫秒指定事件的周期.
uResolution:以毫秒指定延迟的精度,数值越小,定时器越精确,在Windows中缺省值为lms.
IpTimeProc:回调函数,为用户自定义函数(本例中应为视频图像处理函数)。
dwUser:用户参数.
fuEvent:指定定时器事件类型. TIME_ ONESHOT:执行一次.TIME _ PERIODIC:周期性执行(显然本例中应取后者)
(二)视频处理模块
对视频信号压缩,我们采用MPEG-4标准,视频信号的回放,运用DirectDraw技术直接写屏,以满足25f/s的视频回放要求。
以下是视频信号压缩一帧图像的函数,nID为采集设备编号,pBuf In为采集到的图像数据,PBufOut为压缩后的图像数据,pOutSize为压缩后的图像大小,pKeyFrame表明当前图像是否为关键帧。
BOOL C_CompressFrame ( int nID, char * pBufIn,char * * pBufOut, unsigned int * pOutSize,
BOOL * pKeyFrame)
{
SCompressInfo * pCmprssInfo=&g_-CmprssInfo[nID];
* pBufOut=(char*)ICSeqCompress-Frame( &pCmprssInfo?>cv , 0 , pBufIn,
pKeyFrame, ( long*)pOutSize );
return TRUE
}
(三)网络传输模块
在网络通信中能否恰当地使用协议对整个系统而言非常关键。本系统采用TCP/IP来完成网络通信和数据传输。TCP具有保证数据包发送到所需目标系统并按恰当顺序发送与重新装配数据的能力如果数据包有问题,TCP就要确保重新发送出现传输问题的数据。因此,TCP为了确保数据的正确接收,要产生额外的网络信息量并降低整个网络的性能。用户数据包协议(UDP)与TCP类似,但UDP能够不用校验或不要求应答数据包的发送,因此UDP主要应用在对网络延迟敏感但可承受数据损失,以及一对多等场合考虑到视频信号的传送和控制信号的传送对数据可靠性的要求不同。数据量不同,我们用UDP实现视频数据传送,用TCP实现控制信号传送。当然,使用UDP协议在网络流量大的情况下会对图像质量产生一定的影响。
下面为本模块使用的用于网络监听的CListeningSockct对象。
class CListeningSocket:public Csocket
}
//对象属性
public:
//对象方法
public:
CListeningSocket(CMainFrame } pMainFrame
virtual一CListeningSocket();
//重载
public:
CMainFrame * m_pMainFrame; //虚函数重载
//{{AFX_VIRTUAL(CListeningSocket)
public:
virtual void OnAccept(int nErrorCode);
//}}AFX_VIRTUAL
//产生消息映像
//{{AFX_MSG(CListeningSocket)
//可以在此增减成员函数
//}}AFX_MSG
//具体实现
protected:
};
该对象每当监听到一个连接请求时,即建立一个新的CSocket与其通信,并将其连到链表上,原对象本身继续保持监听。具体实现过程如下:
void CListeningSocket::OnAccept(int nErrorCode)
{
// TODO:Add your specialized code here and/or call the base class
CSockct:OnAcccpt( nErrorCode );
CCIientSocket*pSocket=new CClientSocket(m_pMainFrame);
if ( pSocket==NULL)
return;
if(m_pMainFrame->m_ListeningSocket->Accept(* pSocket))
{m_pMainFrame->m_ConnectionList. Add
Tail( pSocket );
}
else
delete pSocket;
文章提出了本数字视频监控系统中软件设计的C/S模型,根据模型具体划分系统模块,分析介绍系统主要模块的设计思想并对软件开发过程中的问题提出了解决方法。
参考文献:
1、韦锦山.网络视频监控系统的新发展.通讯世界[J].2002(5):65-68.
2、刘富强.数字视频监控系统开发及应用[M].机械工业出版社,2003.
3、余兆明,李晓飞等.“MPEG标准及其应用”[M].北京邮电大学出版社,2002.
(作者单位:武汉理工大学)