基于嵌入式LINUX的网络视频监控系统设计与实现

时间:2022-05-30 10:28:24

基于嵌入式LINUX的网络视频监控系统设计与实现

摘 要:本文首先介绍了实现基于嵌入式LINUX系统的网络视频监控系统的实际意义和价值,其次进一步介绍了监控系统技术应用的现状。第二部分首先说明的本次设计需要搭建的硬件和软件平台,在选好软硬件平台的基础上逐步实现了USB视频设备的驱动、视频服务器、视频客户端。

关键词:S3C2410;网络监控系统;Linux

中图分类号:TP311.52

1 论文研究背景及意义

如今嵌入式系统在电子信息领域的发展已经越来越获得了国内外各类厂商和用户的一致关注,嵌入式系统已经越来越多的影响到人类的日常生活、工业自动化生产、高科技产业等诸多领域。嵌入式系统以其特有的专用性和便宜性大大冲击了传统以PC机位主导的电子信息产业,是的电子产业的发展出来了新的契机,在市场上获得了普遍的认可和追捧,其价格低廉,操作个性化、简易化,符合针对不同用户不同的需求,而且由于嵌入式系统这些年来的不断发展和成熟,尤其是微软公司专门针对嵌入式系统开发的Windows CE系统和目前普遍使用的开源的嵌入式Linux系统都在对硬件的支持和图形界面的应用方面取得丰厚的成果,使得嵌入式系统的竞争优势越来越突显出来。而本文之所以选择嵌入式Linux系统作为开发的软件系统平台,也是从其开放性的角度考虑的,嵌入式Linux系统基本上是免费的,所以大大降低了开发成本,搭建了一个更为可靠的、实用的、高效的管理平台,为后期的软件开发奠定了坚实的基础。

2 监控系统技术应用现状

视频监控系统在通信、医疗、金融、安保等诸多领域有着广泛的使用。视频监控系统在国内也获得了广泛的推广,国家以及企业、个人的投入越来越多,视频监控技术的发展对于金融安全、人身财产、社会治安等方面的贡献也越来越大。随着社会的发展视频监控系统也越来越多的获得厂商的青睐,在国内也出现很多具有国际竞争力的知名品牌,如海康威视、大华、天地伟业等,以其一流的技术占据着国内大部分市场。视频监控系统一般有两个部分组成,即视频服务器和视频客户端,在研究的过程中必须对这两部分进行软件的开发和管理,建立好通信机制,设计好正好工作流程。按照视频流的数模特性来划分,模拟视频监控系统和数字视频监控系统构成了视频监控系统目前最主要的两个技术方向。视频监控系统技术在未来的发展中得到更多功能方面的扩展,如无线视频网络、智能识别视频系统等方向。

2.1 平台选择

本论文的硬件平台选用s3c2410开发板,操作系统内核采用Linux2.6内核,本论文硬件平台采用的主要硬件是s3c2410开发板。该板是韩国三星公司已经比较成熟的产品,在硬件配置方面基本满足本文的需要。采用Linux2.6内核的主要原因是这个内核版本经过较长时间的推广和完善,无论是对本文所需的视频监控系统硬件驱动还是软件系统的开发,都会有很好的支持,而且运行稳定,符合视频监控系统的要求。

2.2 USB视频设备驱动的实现

本论文的USB视频设备驱动运行在嵌入式环境下,对视频图像处理能力有限,所以本驱动程序不支持V4L中VIDIOCGPICT和VIDIOCSPICT接口。原始的图像格式与摄像头采集到的格式是一致的。

2.2.1 USB视频设备驱动实现待需解决的问题

USB视频设备驱动的实现需要解决如下几个问题:对USB视频设备的端点类型和端点号、一副图片的结束等具体数据的判定。

(1)确定USB视频设备的端点类型和端点号

从开发板的硬件支持角度来分析,使用USB接口作为视频监控系统的数据接口是比较合适的选择,而Linux系统也为USB接口提供了强大的支持,通过视频监控系统的USB驱动对USB设备的操作实际就是对某一端点的操作,而端点又进一步的被定义为控制、中断、同步、块四个种类,每一个USB设备都具有特定数日的端点、特定类型的端点以及端点号确定的特点。因此在进行USB视频设备驱动开发之前,USB视频设备的端点类型、端点数日以及端点号需要在设计时设置。

(2)判断一副图片的结束

图像数据在于USB核心是连续的数据流,而一副图像的开始和结束并没有严格的界定出来,如果没有对这些数据进行标识,那么在系统看来这些数据就是一些单纯的数据流,是没有意义的数据,对图像就不能进行正确的识别和存储,因此需要利用缓存技术,工作的原理就是USB视频设备驱动从连续的数据流中获取图片信息,通过缓存保存起来。而保存在缓存中的数据流并没有提供图片信息的开始和结束的标识,这个时候摄像头的数据格式有对图像信息的开始和结束的定义和标识,虽然不同厂商的芯片对标志有不同的定义,导致没有一定的规律可循,但是在没有统一的标准的情况下,具体的定义可以由对应的驱动程序来代替,通过不同的数据格式的定义对标识过的图像信息逐一提取,就获得我们所需要的图像,如使用JPEG格式的图像,就可以从标示符Oxff Oxd8开始认定一副图片的起始。

(3)提高USB的数据传输速度

在Linux系统中urb来实现USB的数据通信。通过扩大urb的缓冲,提高速度,提高有效数据的传输速度。

2.2.2 USB视频设备驱动具体实现

视频设备驱动层处于上层应用和USB子系统之间,不同的USB设备在软件上的差异主要体现在该层。该层主要要完成两个方面的工作:上层应用所需接口函的调用、接口函数供USB子系统回调。在本视频设备驱动函数中,如open函数、read函数、close函数和ioctl函数,构成了USB子系统主要的数据传输,而probe函数和isoc irq函数实现了子系统的回调。上层应用和USB子系统的通过函数调用接口的关系如图1所示。

图1 接日函数的调用关系

图2 接日函数关系图

图2是这几个接口函数的关系图,参数信息,如分辨率、帧速度、图像格式等数据存在全局内存空间1中。而图像数据的相关内存空间则保存在全局内存空间2中。同时以环形缓冲区的方式保存图像的存储空间,环大小为两帧图片大小。

2.3 网络视频监控系统的软件设计

本文主要通过Linux的多线程机制和Socket机制实现了视频服务器。视频压缩采用了H.263压缩标准,压缩以后的数据以AVI文件格式保存。视频服务器主要向USB视频驱动发出读取数据的请求,数据发被服务器送给需要数据的客户端。主要体现出处理多个客户端的同步和共享的问题,而采用Linux的多线程机制就可以解决这儿问题,在Linux的多线程机制中一个主线程、一个读取视频数据子线程、其他客户端通信子线程构成了视频服务器主要组成部分。

2.3.1 主线程逻辑

首先通过主线程对摄像头进行初始化,同时读取视频数据子线程将被启动,进一步打开服务器端Socket,等待客户端的连接,客户端发送请求并由服务端接收,这样客户端通信子线程就生成了,用于和客户通通信的线程就生成了。

2.3.2 两类子线程序通信逻辑

视频服务器包括了两类子线程:读取视频数据子线程、客户端通信子线程。就像正常的程序的读写功能一样,视频服务器对数据的读写分别依靠读取视频数据子线程和客户端通信子线程,两类子线程的通信逻辑是读写功能的扩展,读取视频数据子线程完成写的功能,户端通信子线程执行读的功能,这样在视频服务器中就完整的体现了读写的逻辑功能。

2.3.3 读取视频数据的子线程

读取视频数据的子线程的主要功能是从设备驱动中用read方法读取一幅图片的数据,并把数据拷贝到环形共享缓冲区当中。

2.3.4 客户端通信的子线程序

首先把视频数据看作是一幅幅图片数据的重复,为了在客户端能够定位一幅图片的结束和下一幅图片的开始,在每幅图片数据的开始前插入定长的picwe header结构,其中的size字段告诉客户端当前图片数据的长度。从设计的角度来看我们希望客户端能够随时、方便的控制服务器端,控制摄像头的方位、摄像头的焦距、图片的分辨率等因素,只要在客户端到服务器端的方向上定义一个数据流,负责两端的通信和数据的控制,而从数据流的结构来看,我们可以认为这个数据流是message结构的重复。

2.4 视频客户端的实现

2.4.1 视频客户端功能需求

由于C/S架构的一些特性,如C/S架构管理模式更加规范和高效比较适合视屏监控系统的应用,所以本论文选择了C/S架构作为客户端的实现方法。视频的播放、视频的压缩存储的功能就是在采取C/S架构的客户端下实现的。在windwos下有两种类型的线程:窗口线程和工作线程。窗口线程有自己的消息队列,而工作线程在系统看来就是调用执行函数的过程,系统为线程提供接口、缓存等系统资源,线程在执行函数的结束后就自动释放占用的系统资源。

2.4.2 图像的显示

本论文选择VFW作为客户端的视频开发技术,VFW在微软公司的不断开发下,已经成为一个很强大的软件开发包,能为视频监控系统提供一整套的功能服务,其功能模块主要包括AVICAP,MCIAVI,MSVIDEO,AVIFILE,ICM,ACM等6个模块,在VFW的支持下,包括视频图像的捕捉、播放、压缩和存储等功能都可以逐一实现。客户端利用AVICAP模块执行捕获视频的函数为AVI文件输入输出和视频设备驱动程序提供一个编程接口,AVICAP模块获取到屏幕上的视频操作以后需要通过MSVIDEO模块来处理,而MSVIDEO模块主要调用的函数是DrawDib函数,而MSVIDEO模块把通过网络接收到的图像数据以特定格式进行显示。MCIAVI包含对VFW的MCI命令的解释器。AVI文件则通过AVIFILE支持标准多媒体I/O函数所提供的更高的命令来访问。ICM管理用于视频压缩、解压缩的编解码器。ACM功能模块用于波形音频压缩、解压的编解码器的管理。DrawDib可以把DIB画在屏幕上,使用了BITMAPINFO数据结构。

2.4.3 图像的压缩

图像的压缩采用H.263标准,H.263压缩算法的核心函数包括了对帧内压缩的CodeOneIntra函数和对帧间压缩的CodeOneOrTwo函数。CodeOneIntra函数实现了图像像素宏块的划分。CodeOneOrTwo函数一首先定义了一个二维数组MV,其变量类型为MotionVecto:结构体,用来保存每一宏块的运动矢量。

参考文献:

[1]刘富弧.数字视频监控系统开发与应用[M].北京:机械工业出版社,2003.

[2]康军,戴冠中.基于Internet的工业以太网远程监控系统设计[J].控制工程,2004.

[3]FERRAIOLO D F,SANDHU R S,GAVRILA S,et al.Proposed NIST standard for role-based access control[J].ACM Press,2001.

[4]Jerry D,Gibson,Toby Berger.多媒体数字压缩原理与标准[M].北京:电子工业出版社,2000.

[5]ITU-T.H.263 Video coding for low bit rate communication[J/OL],1996.

作者简介:金磊(1981.11-),男,湖南人,硕士,专业组长,工程师,研究方向:临床医学工程,医院信息化建设;马明瑞(1980.07-),男,回族,新疆人,硕士研究生,科员,工程师,研究方向:医院信息化研究。

作者单位:新疆医科大学附属肿瘤医院医学工程部,乌鲁木齐 830000

上一篇:分布式环境监控节点的设计与实现 下一篇:“挽救”老公,妻子伪造绝症悲情收场