Vol.27No.5
基于嵌入式网络视频监控系统的设计
王 刚1,2,赵跃龙1
(1.中南大学信息与工程学院,湖南长沙 410083;2.湘南学院计算机系,湖南郴州 423000)
摘 要:介绍了一个基于嵌入式Linux的网络视频监控系统的设计与实现,阐述其嵌入式服务器软硬件部分的设计思想和体系架构,然后重点介绍了系统前端软件的设计,包括嵌入式Linux的设计和应用程序的设计.关键词:嵌入式系统;Linux;Video4Linux;S3C2410;网络视频监控
中图分类号:TP368.1,TP393 文献标识码:A 文章编号:1672-8173(2006)05-0098-04
1 引言
随着计算机多媒体应用技术及网络技术的发展,在银行、商场监控、城市交通管理、酒店等安全保卫方面,
视频监控系统的市场需求量大幅度的上升,市场上已经出现了多种图像采集和传输的产品.视频监控系统的发展趋势必然是全面数字化、网络化,即采用嵌入式网络摄像机,利用网络进行传输,利用嵌入式监控设备体积小巧、性能稳定、通讯便利等特点.目前在我国基于嵌入式技术的网络视频监控系统的研发刚刚起步,而且主要是针对一些大、中型视频监控工程所开发的.对于小型厂矿、企业、学校和家庭而言,其成本高,系统功能复杂而显冗余.所以针对上述用户群,设计并研究一种简便、廉价、新型的基于嵌入式系统的网络视频监控系统具有很大的工程实际意义.
针对网络视频监控设备的实际应用需求,结合图像采集压缩编码、嵌入式系统和网络技术等几方面的新技术,设计了一套嵌入式网络视频监控系统,用以实现视频数据的采集、压缩与网络传输.该系统基于S3C2410的ARM920T芯片和嵌入式Linux操作系统,采用USB摄像头捕捉视频,经MPG-440芯片压缩编码,系统直接与网络相连,用户使用标准的网络浏览器和流媒体播放程序即可查看远程视频影像.
2 系统总体设计
系统总体设计包括硬件设计和软件设计两部分.硬件设计模块主要包括微控制器模块、压缩编码模块、网络接口模块3部分.微控制器模块主要由主控芯片、DataFlash和SDRAM(1)组成.其中,主控芯片是整个控制系统的核心,它负责整个系统的调度工作.DataFlash里固化了嵌入式Linux内核、及其文件系统、应用软件和系统配置文件.SDRAM(1)作为内存供系统运行使用.压缩编码模块由视频数据采集芯片、MPEG-4压缩编码芯片、SDRAM(2)组成,负责将视频流转化为MPEG-4码流.网络接口模块主要是配合主控芯片传送MPEG-4码流.当系统启动时,微控制器将Linux内核转入SDRAM(1)中,系统从SDRAM(1)中启动.系统启动后,微控制器控制MPEG-4编码模块.
软件设计部分主要包括嵌入式Linux移植、视频采集与MPEG-4压缩编码模块、JRTPLIB网络传输模块和MPEG-4解码程序四部分.嵌入式Linux系统存放到由S3C2410控制的DataFlash里,它负责整个系统软件的调度工作.MPEG-4压缩编码模块主要负责将采集到的视频流压缩为MPEG-4数据流.JRTPLIB网络传输模块
收稿日期:2006-05-11
作者简介:王 刚(1975-),男,湖南郴州人,湘南学院计算机系助教,中南大学在读硕士,研究方向:计算机硬件,计算机网络.
赵跃龙(1958-),男,中南大学教授,博导,研究方向:计算机硬件,计算机智能存储.
・98・
本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2007,版权所有,仅供试用。主要负责MPEG-4视频流传输与控制的相关设置.MPEG-4解码程序主要负责对通过网络得到的MPEG-4
数据流的解码工作.
3 硬件系统设计
系统的硬件平台采用Samsung公司的处理器S3C2410.该处理器内部集成了ARM公司ARM920T处理器核的32位微控制器,资源丰富,带独立的16KB的指令Cache和16KB数据Cache,LCD控制器、RAM控制器、NAND闪存控制器、3路UART、4路DMA、4路带PWM的Timer、并行I/O口、8路10位ADC、Touch
图1 硬件系统结构框图
Screen接口、I2C接口、I2S接口、2个USB接口控制器、2路SPI,主频最高可达203MHz.在处理器丰富资源的基
础上,还进行了相关的配置和扩展,平台配置了16MB16位的Flash和64MB32位的SDRAM.通过以太网控制器芯片DM9000扩展了一个网口,另外引出了一个HOSTUSB接口,通过在USB接口上外接一个带USB接口的摄像头.硬件系统结构如图1所示.
4 软件系统设计
Linux具有内核小,效率高,源代码开放,内核直接提供网络支持等优点.但嵌入式系统的硬件资源毕竟有限,因此不能直接把Linux作为操作系统,要针对具体的应用通过配置内核、裁减shell和嵌入式C库对系统进行定制,使整个系统能够存放到容量较小的Flash中.Linux的动态模块加载,使Linux的裁减极为方便,高度模块化的部件使添加非常容易.嵌入式Linux系统主要由4个部分组成:引导内核启动的文件(bootloader)、Linux内核文件(kernel)、虚拟磁盘文件(ramdisk)、用户空间文件(user).它们分别被放在DataFlash内的4个分区模块中.根据不同模块的具体功能采用不同的文件系统:bootloader、kernel、ramdisk,移植完成后不需要动态改变,使用较节省空间的ROMFS只读文件系统;user模块内放置一些可以动态更新的配置文件等,需要进行较多的读写操作,所以使用支持动态擦写保存的JFFS2文件系统.基于Linux的上述优点,实现的平台使用的操作系统是μclinux.嵌入式系统软件开发通常采用交叉编译调试的方式.宿主机通常为Intel处理器,而目标板如图1所示为S3C2410,因此程序需要使用针对处理器特点的编译器才能生成在相应平台上可运行的代码.对于嵌入式Linux,宿主机PC上应安装Linux系统,之后,在宿主机上建立交叉编译调试的开发环境.采用移植性很强的C
语言在宿主机上编写视频采集程序,再利用交叉编译调试工具编译链接生成可执行代码,最后向目标平台移植.
Linux移植技术已经成熟,不作详细的阐述.下文主要介绍USB摄像头驱动、基于V4L设计的视频采集模
块和JRTPLIB网络传输模块的程序设计.4.1 USB摄像头驱动
搭建好嵌入式Linux的开发环境后,第一步工作就是USB摄像头的安装与驱动.
在Linux下,设备驱动程序可以看成Linux内核与外部设备之间的接口.设备驱动程序向应用程序屏蔽了硬件实现的细节,使得应用程序可以像操作普通文件一样来操作外部设备,可以使用和操作文件中相同的、标准的系统调用接口函数来完成对硬件设备的打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数.
Video4Linux(V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数.对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open,read,write,close的实现.当应用程序对设备文件进行系统调用操作时,Linux内核将通过file-operations结构访问驱动程序提供的函数.在系统平台上对USB口数码摄像头进行驱动,首先把USB控制器驱动模块静态编译进内核,使平台中支持USB接口,再在需要使用摄像头采集时,使用insmode动态加载其驱动模块,这样摄像头就可正常工作了.
确定USB摄像头被正常驱动后,下一步就是使用Video4Linux提供的API函数集来编写视频采集程序.
・99・
4.2 基于V4L设计的视频采集模块
本页已使用福昕阅读器进行编辑。
福昕软件(C)2005-2007,版权所有,仅供试用。
在Linux下,所有外设都被看成是一种特殊的文件,称为设备文件.系统调用是内核和应用程序之间的接口,而设备驱动程序则是内核和外设之间的接口.他完成设备的初始化和释放、对设备文件的各种操作和中断处理等功能,为应用程序屏蔽了外设硬件的细节,使得应用程序可以像普通文件一样对外设进行操作.Linux下的视频采集过程如图2所示.
Linux系统中的视频子系统Video4Linux为视频应用程序提供了一套统一的API,视频应用程序通过标准的系统调用即可操作各种不同的视频捕获设备.Video4Linux向虚拟文件系统注册视频设备文件,应用程序通过操作视频设备文件实现对视频设备的访问.
主要针对设备文件/dev/video进行视频捕捉方面的程序设计.
其中用到的主要函数有:
Cameraopen():用来开启视频设备文件,使用前需要首先声明一个videodevice类型的设备文件.
Cameragetcapability():通过调用ioctl()函数取得设备文件的相关信息,并存放到videocapability结构里.
Cameragetpicture():通过调用ioctl()函数取得图像的相关信息,并且存放到videopicture结构里.
Cameraclose():用来关闭设备文件.
Camera
grab
图2 Linux下的视频采集过程image():用来抓取图像,采用mmap方式,直接将设备文件/dev/video0映射到内存,加速文
件I/O操作,还可以使多个线程共享数据.剩下的还有设备初始化、参数设备等相关函数,这里不再详述.
4.3 视频压缩编码模块获取图像数据后,可以直接输出到FrameBuffer进行显示,由于本系统要将采集到的视频影响通过网络传输出去,所以在传输之前要对原始的图像数据进行压缩编码,在此选用映佳公司的MPG440芯片来实现MPEG-4视频编解码方案.和其他标准相比,MPEG-4压缩比更高,节省存储空间,图像质量更好,特别适合在低带宽条件下传输视频,并能保持图像的质量.对视频流进行压缩编码以后,接下来就要实现网络传输部分的功能.
4.4 JRTPLIB网络传输模块
流媒体指的是在网络中使用流技术传输的连续时基媒体,RTP是目前解决流媒体实时传输问题的最好办法,JRTPLIB是一个面向对象的RTP库,他完全遵循RFC1889设计,下面讲述如何在Linux平台上运用RTP协议进行实时流媒体编程.4.4.1 初始化
在使用JRTPLIB进行实时流媒体数据传输之前,首先应该生成RTPSession类的一个实例来表示此次RTP会话,然后调用Create()方法来对其进行初始化操作.RTPSession类的Create()方法只有一个参数,用来指明此次RTP会话所采用的端口号.4.4.2 数据发送
当RTP会话成功建立起来之后,接下来就可以开始进行流媒体数据的实时传输了.首先需要设置好数据发送的目标地址,RTP协议允许同一会话存在多个目标地址,这可以通过调用RTPSession类的AddDestination()、DeleteDestination()和ClearDestinations()方法来完成.目标地址全部指定之后,接着就可以调用RTPSession类的SendPacket()方法,向所有的目标地址发送流媒体数据.4.4.3 数据接收
对于流媒体数据的接收端,首先需要调用PollData()方法来接收发送过来的RTP或者RTCP数据报.由于
・100・
同一个RTP会话中允许有多个参与者(源),因此既可以通过调用GotoFirstSource()和GotoNextSource()方法来遍历所有的源,也可以通过调用GotoFisstSourceWithDat()和GotoNextSourceWithData()方法来遍历那些携带有数据的源.在从RTP会话中检测出有效的数据源之后,接下去就可以调用RTPSession类的GetNextPacket()方法从中抽取RTP数据报,当接收到的RTP数据报处理完之后,要及时释放.
JRTPLIB为RTP数据报定义了3种接收模块,通过调用RTPSession类的SetReceiveMode()方法可以设置下列这些接收模式:
RECEIVEMODEALL:缺省的接收模式,所有到达的RTP数据报都将被接受;RECEIVEMODEIGNORESOME:除了某些特定的发送者之外,所有到达的RTP数据报都将被接受,而被拒绝的发送者列表可以通过调用AddToIgnoreList(),DeleteFromIgnoreList()和ClearIgnoreList()方法来进行设置;RECEIVEMODEACCEPTSOME:除了某些特定的发送者之外,所有到达的RTP数据报都将被拒绝,而被接受的发送者列表可以通过调用AddToAcceptList(),DeleteFromAcceptList和ClearAcceptList()方法来进行设置.4.4.4 控制信息
JRTPLIB是一个高度封装后的RTP库,只要PollData()或者SendPacket()方法被成功调用,JRTPLIB就能够
自动对达到的RTCP数据报进行处理,并且还会需在要的时候发送RTCP数据报,从而能够确保整个RTP会话过程的正确性.
在本系统中,使用RTPSessionJRTPLIB类库提供的方法来实现底层的RTP/RTCP操作,并且把他封装在CrtpTransmitter类中,该类从MediaSink类继承而来,接收到相应的媒体帧数据,使用RTPSession类库的操作把数据发送到网络上.
5 结语
本系统基于S3C2410平台和Linux操作系统,利用Video4Linux设计采集程序,使用MPEG-4压缩编码,通过实时流媒体传输技术实现了网络传输,整个系统具有稳定可靠、安装简便、成本低廉等特点,监控距离随网络延伸而不断加长,具有良好的发展应用前景.可扩展应用在工业控制、视频会议系统、可视电话、远程监控系统等诸多领域.参考文献:
[1]许海燕,付 炎.嵌入式系统技术与应用[M].机械工业出版社,2002.[2]邹思轶.嵌入式Linux设计与应用[M].清华大学出版社,2002.[3]Linux内核文档主页:http://www.kernel.org/
[4]刘富强.数字视频监控系统开发及应用[M].北京:机械工业出版社,2003.
[5]王英杰,陈祥献,耿晨歌.嵌入式网络化多媒体视频监控系统的设计与实现[J].工业控制计算机,2003,5(16):24-25.
TheDesignofVideoMonitoringSystemBasedonEmedded
WANGGang1,2,ZHAOYue2long1
(1.CollegeofInformationScienceandEngineering,CentralSouthUniversity,Changsha410083,China;
2.DepartmentofXiangnanuniversity,Chenzhou423000,China)
Abstract:ThedesignandrealizationofnetworkvideomonitorsystembasedonembeddedLinuxisintroduced,theinvolvedkeytechnologyisdetailed.Thenthedesignofthefront-end’ssoftwareisgivenindetail,embeddedLinuxandapplicationincluded.
Keywords:embeddedsystem;Linux;Video4Linux;S3C2410;networkvideomonitor
・101・
因篇幅问题不能全部显示,请点此查看更多更全内容