基于嵌入式Linux视频的网络监控系统设计
随着计算机技术及网络技术的迅猛发展,公安、安防行业的发展趋势必然是全面数字化、网络化。传统的模拟闭路电视监控系统有很多局限性:传输距离有限、无法联网,而且模拟视频信号数据的存储会耗费大量的存储介质(如录像带),查询取证时十分烦琐。基于个人计算机的视频监控系统终端功能较强,但稳定性不好,视频前端 ( 如电压耦合元件等视频信号的采集、压缩、通讯) 较为复杂,可靠性不高。基于嵌入式Linux视频的网络监控系统不需要用于处理模拟视频信号的个人计算机,而是把视频服务器内置一个嵌入式Web服务器,采用嵌入式实时多任务操作系统。由于把视频压缩和Web功能集中到一个体积很小的设备内,可以直接连入局域网,即插即看,省掉复杂的电缆,安装方便(仅需设置一个IP地址),用户也无需安装任何硬件设备,仅用浏览器即可观看。
基于嵌入式Linux的视频网络监控系统将嵌入式Linux系统连接上Web,即视频服务器内置一个嵌入式Web服务器, 摄像机传送来的视频信号数字化后由高效压缩芯片压缩, 通过内部总线传送到内置的Web 服务器上。
1 系统总体框架
嵌入式Linux视频网络监控系统是电工电子装置、计算机软硬件以及网络、通信等多方面的有机组合体,它以智能化、网络化、交互性为特征,结构比较复杂。如果利用OSI七层模型的内容和形式,把相应的数据采集控制模块硬件和应用软件以及应用环境等有机组合,可以形成一个统一的系统总体框架,其系统总体框架示意图如图1所示。
摄像机传送来的视频信号数字化后,经过压缩,通过RS-232/RS485将数据送到内置的Web服务器,嵌入式Linux系统的10/100M以太网口实现接入Internet网络,将现场信号送到客户端。整个系统的核心是嵌入式Linux系统。监控系统启动后,嵌入式Linux系统启动Web Server服务程序,接收授权客户端浏览器的请求,Web Server将根据通信协议完成相应的监测。
2 系统实现
2.1 硬件平台设计
本系统以公开的嵌入式Linux源代码为基础,根据设计的嵌入式目标板编写相应的Bootloader程序,然后裁剪出合适的内核和文件系统。目标平台CPU采用Motorola公司生产的ColdFire嵌入式处理器MFC5272。 MFC5272采用ColdFire V2可变长RISC处理器核心和DigitalDNA技术,在66MHz时钟下能够达到63Dhrystone2.1MIPS的优良处理能力。内部SIM(System Integrated Module)单元集成了丰富的通用模块,只需很少的外围芯片就可以实现两个RS-232串行口和一个USB Slave接口。MFC5272还内嵌一个FEC(快速以太网控制器),片外扩展一片LXT971,方便地实现了一个100/10 Base T的以太网接口。能够与常用的外围设备(如SDRAM、ISDN收发器)实现无缝连接,从而简化了外围电路的设计,降低了产品成本、体积和功耗。
2.2 软件设计与实现
视频监控系统软件结构采用的是浏览器/服务器(B/S)网络模型,即由客户端通过Web向服务器提出请求,服务器对请求做出确认响应并执行相应的任务(如向客户端发送组播地址、图像格式、压缩格式等),建立连接后就可以在客户端监控被控点,从而实现远程网络监控。服务器(Web Server)端即现场监控点的软件结构包括采集模块、压缩编码模块、网络通信模块、控制模块等,如图2所示。
2.2.1 视频采集模块设计
由于摄像机得到的是模拟的视频信号,不能直接为计算机使用,因此要使视频在网上传输,必须首先对其数字化。本系统选用的视频采集卡为Conexant公司的Bt848卡,该卡不需要任何本地缓存来存储视频像素数据,还能够充分利用基于PCI总线系统的高带宽和固有的多媒体功能,并且能够与其他多媒体设备实现互操作。在整个系统中由于视频采集的速度通常高于应用软件取得数据并进行处理的速度,因此为了保证视频数据的连续性,采用了三缓存结构,缓存A是Bt848视频采集的目标地址,在RISC指令的直接控制下,采集的数据都先存放在这个缓存中;B和C组成乒乓式结构循环往复使用,当某一帧数据采集完毕后,产生中断,在中断服务程序中将缓存A的数据复制到缓存B(或C)中,然后采集下一帧,当下一帧数据采集完后,再将缓存A中的数据复制到缓存C(或B)中,当应用程序需要数据时就从缓存B或C中读取最新的一帧图像。缓存B和C交替使用,能够保证应用程序从缓存读数据的操作和驱动程序向缓存写数据的操作不会发生冲突,避免了数据的损坏和迟延。
2.2.2 视频压缩编码的设计
本设计选用了基于对象的MPEG-4视频编码技术,首先对输入的任意形状的VOP序列,用基于块的混合编码技术编码。处理顺序是先帧内VOP,后帧间VOP和双向预测VOP。在对VOP的形状信息编码之后,取得任意形状VOP的采样,每个VOP用宏块栅格划分成不相交的宏块,每个宏块含有四个8×8的像素块,以进行运动估计和补偿及纹理编码。已编码的VOP帧保存在VOP帧存储器中。运动向量在当前VOP帧和已编码VOP帧之间计算。对将被编码的块或宏块,计算其运动补偿预测误差。运动补偿预测后的I-VOP及误差用8×8块DCT编码,并进行DCT系数的量化,然后是行程编码和熵编码。最后,形状、运动和纹理信息复合成VOL位流输出。这种编码方法可以允许用户修改、增加或重定位一个视频场景中的对象,甚至可以转换场景中对象的行为。对于不同的带宽和计算复杂性需求,不必针对每种情况分别编码,可以使用同一个视频位流,而采用不同的参数以选择不同的层以获得灵活性。在出现网络拥塞、丢包等现象时仍能提供连贯性较好的视频图像。视频压缩编码进程将编码后的的视频存放到已编码视频缓冲队列中,同时激活或等待直播进程和存储管理进程的相应处理。
2.2.3 网络通信模块设计
网络通信模块是系统的主体部分,它包含三个数据通道:监听通道、控制通道和视频数据通道。监听通道用来传输控制前端设备的命令数据;视频数据通道用来传输各个组的视频数据。三个通道采用不同的通信端口,所以各个通道传输数据彼此独立。网络通信模块设计开发是通过网络编程接口(Windows Socket,简称Winsock)来实现的。按照系统浏览器/服务器的网络传输模型,在服务器端建立了以SOCKET为类型的监听套接字、控制套接字;在客户端建立了SOCKET类型的请求套接字、控制套接字,这些都是采用TCP协议封装传输数据的。
另外,在服务器和客户机两端都用到了一个组播类(CMulticast),它是专门为视频传输而封装的类,由CObject派生而来,其中定义了以SOCKET类型的收发视频数据的套接字和组套接字,从而实现了用组播通信方式来传输UDP协议封装的视频数据包。系统中IP网络数据通信流程如图3所示。
下面给出在服务器端建立监听套接字和控制套接字的程序。
……
int ret=0;
BOOL bFlag=TRUE: //设置套接字为可重用端口地址
ret=setsockopt(lInfo.listenSocket,SOL_SOCKET,SO_REUSE ADDR,(char)*&bFlag,sizeof(bFlag));
SOCKADDR_IN sockAddr;
char* addr =severaddr.GetBuffer(0); //定义监听套接字的地址
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.S_un.S_addr =inet_addr(addr);
sockAddr.sin_port = htons(PORT);
if(bind(lInfo.listenSocket,(LPSOCKADDR)&sockAddr, sizeof(sockAddr))==SOCKET_ERROR) //监听套接字绑定到指定的地址和端口上
{……//出错处理}
if(listen(lInfo.listenSocket,5)= = SOCKET_ERROR //监听套接字开始监听
{……//出错处理}
ret=WSAAsyncSelect(lInfo.listenSocket,Af
xGetMainWnd()->m-hWnd,
WM_LISTENSOCKETEVENT,FD_READ-FD_WRITE-FD_CLOSE); //为监听套接字设置消息回调机制
…… //建立控制套接字原理同监听套接字一样
2.2.4 控制模块设计开发
控制模块实现了用户对前端设备如镜头、云台和画面切换的控制。服务器在接收到由客户中心监控终端发送过来的控制信息帧后,对其进行判断解析,并送入各个相应的控制部件接口,以实现相应的控制。
Browser Server结构 嵌入式Web服务器 Linux 相关文章:
- 嵌入式Web服务器移植与测试(03-03)
- 一种实用的嵌入式Web服务器设计(01-15)
- 一种嵌入式Web服务器的设计方案(01-08)
- SMT车间温湿度分布式远程监控系统的设计(10-08)
- 基于uIP与AJAX的动态Web服务器设计(11-07)
- REDIce-Linux--灵活的实时Linux内核(11-12)