一、概述
近年来,随着计算机、自动控制和通信技术的发展,人们的工作方式已经发生了深刻改变,极大地提高了企业的生产效率,为社会创造了巨大的财富。但是对于大幅度提高个人和家庭生活水平的作用却十分有限,传统的家居方式并没有因为信息时代的来临而发生很大变化。进入二十一世纪,社会信息化的进程在逐步深入,人们对家居环境的舒适性、便利性和安全性方面都有了更高的要求。如何有效地在家居环境中组建一个智能的家庭信息网络,并通过它对家电设备进行集中或异地的智能化控制与管理,而且能够与外界进行信息交流,并为人们提供实时家居环境的各类信息,开发集网络化、智能化、数字化于一体的新型住宅成为研究热点。这些研究开创了一个新的领域:智能家居系统。
美国麻省理工学院最初将智能家居定义为具有适应性、预测性的职能服务系统。实现的目标是“将家庭中各种与信息相关的通讯设备、家用电器和保安装置通过家庭总线技术连接到一个家庭智能化的系统上,进行集中的或异地的监视、控制家庭中各项工作,并保持着家庭设施与住宅环境的和谐与协调”。
目前的“智能家居"(smart home),又称智能住宅。它利用先进的计算机技术、嵌入式系统技术、网络通讯技术和传感器技术等,将家中的各种设备(照明系统、环境控制系统、安防系统、智能家电等)有机的连接到一起,实现信息设备、通信设备、娱乐设备、家用电器、自动化设备、照明设备、监控设备以及水、电、气表等设备和家庭求助报警设备的互联和管理,以及数据和多媒体信息共享的系统。将各种与家庭生活工作相关的子系统有机结合在~起组成一个舒适的环境,从而在最大程度上给用户提供高效、便利、舒适与安全的居住环境和工作环境。
二、智能家居在视频监控系统的应用
2.1系统需求分析
视频监控系统是家居安防系统中非常重要的组成部分,而与普通安防系统相比,在家居系统这个特殊的环境中,视频监控系统有着它特殊的限制:
1)视频采集端数字化
目前视频采集设备主要分为模拟视频采集和数字视频采集两类。前者技术发展非常成熟、性能稳定,并在实际工程应用中得到广泛应用,特别是在大、中型视频监控工程中应用广泛;后者是以计算机图像技术为基础,对计算机进行视频处理提供了良好的平台,并解决了模拟视频的弊端的技术。
一传统的模拟采集系统只适用于小范围的传输,模拟视频信号的传输工具主要是同轴电缆,而同轴电缆传输模拟视频信号的距离不大于1Km,双绞线的距离更短。而数字视频监控可以利用网络实现远距离高质量信号传输,不但克服了模拟视频系统只能在本地进行监控的局限性,传输信号理论上还可以做到无衰减,可大幅度提高图像品质和稳定性。
■传统的模拟采集系统获得的视频信号一般是提供给管理人员查看和留档的,无法进行自动化的处理。而数字视频则是以视频帧为基础,可以利用计算机图像处理技术,对其进行处理,以获得有价值的信息。
●模拟采集系统的扩展能力差。对于已经建好的系统,如要增加新的监控点,往往是牵一发而动全身,涉及到重新设计、部署设备等。新的设备也很难添加到原有的系统之中。
一模拟采集系统无法形成有效的报警机制。在模拟监控系统中,由于很难利用计算机自动处理技术,大多采用人眼监控机制,难免出现疏漏。
在智能家居环境中,视频采集数字化使用编码压缩和开放式协议,使监控系统与安防系统中其他子系统间实现无缝连接,并在统一的操作平台上实现管理与控制,使系统得到了集成,使用户能够进行远程监控的同时,通过图像处理技术获得更多有用的信息。
2)数据传输无线化
在智能家居环境中,摄像头的位置经常要根据需要进行移动,为了保证采集端的灵活性,摄像头不能直接与PC机相连,而是利用嵌入式技术将摄像头、处理器和操作系统紧密捆绑。嵌入式硬件系统是功能专一、专门设计的独立设备,不受通用计算机系统中其他软硬件的影响,性能上更稳定,且便于安装、维护,最后通过网络与服务器进行通信。
在传输介质的选择方面要遵循通信成本低、使用便利等要求。如果采用有线通信,不仅布线麻烦,成本较高,还可能影响家居环境的美观,而且功能升级不便;而采用无线传输则具有移动灵活、升级方便等优点。目前市场上流行的无线方式包括红外线、蓝牙、802.1lb等。如果采用红外方案,对方向性要求较高,无障碍物阻挡,并且距离近,一般通信距离为10米以内,速率低下;蓝牙技术尽管传输速率大,频率高,但是价格过高,若在家庭中均采用蓝牙设备,会很大程度的增加开发成本;而采用802.1 lbll2】在具有很多优点:首先,价格低廉,通过无线布网省略了布线的麻烦,节省了人力物力,降低了开发成本,并且不会破环家居布局;另外,无线通信方式受地理环境因素制约较小,适应性好;同时,家庭无线局域网具有扩展性好的优点,在WLAN增加一个节点,无需像有线网络
那样重新布线,只需将新增设备和无线设备建立连接即可;最后,无线传输数据非常灵活,几乎可以随时随地的传输数据。
采用无线介质传输尽管有众多的优势,但也存在着无线数据信号抗干扰性差、容易发生数据丢失、错误、传输距离短等情况。所以无线的传输方式只适合信息的室内传输,如果需要远程访问,则应该通过有线网络访问服务器端(即PC机)来进行家居视频监控,这种采用无线与有线相结合的系统解决方案比较好的弥补了单独使用有线或无线网络进行传输的不足。
3)整体设备低成本
对于普通家庭来说,视频监控和处理工作只能用普通的PC机和一般通用的数字摄像头来完成,而家用电脑存储设备的容量极其有限,并且作为安防系统往往所需要了解的并不是具体的图像,而是图像所包含的内容信息。为了在控制成本的同时并包存下最有效的信息,在服务器端引入入侵检测和运动目标跟踪模块,运用图像处理技术在海量的视频帧中获得有价值的信息。
2.2系统整体架构设计
一般的数字视频监控系统架构采用客户机/服务器模式,.服务器端包括摄像头、视频采集卡、视频服务器(负责编码与解码)、转发服务器等,视频服务器将采集处理得到的视频流保存在转发服务器。客户端通过网络访问转发服务器,获得实时现场监视图像。而一般的转发服务器都是与监控设备捆绑在一起,称为视频前端,其存储容量和处理能力都受到了很大的限制。如图2.1所示:

本文根据现有流媒体技术、无线网络技术和代理服务器技术的发展情况,提出了一种新的数字视频监控系统架构,使监控系统具有更高的移动性和通用性,进一步完善了视频监控系统的功能。这种监控系统增加了监控中心(家用电脑)作为中转服务器,视频前端将采集处理得到的音视频流采用标准码流传到监控中心。监控中心在对现场实时监控的同时,通过图像处理技术进行入侵检测,对可疑入侵进行报警,并保留影像证据以最有效的利用存储空间。客户端可以通过Intemet网络在任何地方观看实时现场图像。视频前端通过无线移动网络(80211b)与监控中心连接,客户端通过Internet访问监控中心。该架构拓展了前端和客户端的移动性,只要有网络,就可以在任何地方对现场进行监控。整个监控系统构建在无线局域网(WLAN)与Intemet网络之上,主要组成部分包括摄像头、视频服务器、无线网卡和监控中心(家用电脑)。系统蜘l图2-2所示:

圈2-2数字视频监控系统架构
各部分功能说明如下:
·摄像头:采集监控现场数据,通过USB口传输给嵌入式处理器处理。
·视频服务器(安装无线网卡):对采集到的数据进行解码或编码处理,并通过无线网络将处理好的数据输出到监控中心。
·监控中心:利用图像检测技术对传输来的数据进行分析、识别,当发现入侵时智能提醒小区保安和崩户。
[NextPage]
·客户端:为任何一个拥有验证密码的介入局域网的计算机,通过浏览器访问视频服务器及得到实时监控图像。
2.3系统硬件平台搭建
1.视频服务器
该视频服务器采用Intel公司的基于StrongARM嵌入式处理器芯片IntelXScale PXA255作为主体苍片,采用嵌入式Linux操作系统,采用USB摄像头捕捉视频.经MPEG一4算法压缩编码后,图像通过80211 b无线网卡通过局域网传输到宿主机.用户使用视频处理应用程序,对图像进行解压,即可查看远程视频影像。由于此视频服务器基于C/S模式无线传输,视频传感器可移动采集视频,并可实现多用户同时监控,因而可以使其作为独立的单元存在,并且具有体积小、处理能力强且功耗低的特点。
视频服务器系统硬件平台选用美国Crossbow公司的Stargate处理机。开发板由母板和子扳组成,外观特征及部分接口如图2-3所示:

图2-3嵌入式系统实验扳
该系统板主要由基本系统和其他的扩展部分组成。基本系统足一个构成计算机系统的最小系统,包括CPU、RAM、ROM等,其中具体元器件说明见表2-1,硬件结构图见图2-4:

CPU采用的是IntelPXA255 XScale芯片,Intel XScale微体系结构提供了一种全新的、高性价比、低功耗且基于StrongARM体系结构的解决方案,支持16位Thumb指令和DSP扩充。基于XScale技术开发的微处理器,可用于手机、便携式终端(PDA)、网络存储设备、骨干网(BackBone)路由器等。Intel XScale处理器的处理速度是Intel StrongARM处理速度的两倍,其内部结构也有了相应的变化:数据Cache的容量从8KB增加到32KB;指令Cache的容量从1 6KB增加到32KB;微小数据Cache的容量从512B增加到2KB;为了提高指令的执行速度,超级流水线结构由5级增至7级;新增乘/an法器MAC和特定的DSP型协处理器CPO,以提高对多媒体技术的支持;动态电源管理,使XScale处理器的时钟可达1GHz、功耗1.6W,并能达到1200MIPS。
XScale微处理器架构经过专门设计,核心采用了英特尔先进的0.18|I m工艺技术制造;具备低功耗特性,适用范围从O.1mW--一1.6W。同时,它的时钟工作频率将接近1GHz。XScale与StrongARM相比,可大幅降低工作电压并且获得更高的性能。具体来讲,在目前的StrongARM中,在1.55V下可以获得133MHz的工作频率,在2.0V下可以获得206MHz的工作频率;而采用XScale后,在
0.75V时工作频率达到150MHz,在1.0V时工作频率可以达到400MHz,在1.65V下工作频率则可高达800MHz。超低功率与高性能的组合使Intel XScale适用于广泛的互联网接入设备。
其中PXA255处理器是Intel第一代XScale处理器改进更名而来,主要特点就是采用了双总线方式使数据传输更快,并增加了低电压(1.3 V 400 MHz)和回写数据缓存功能。
2.摄像头
项目中摄像头选择的是中星微ZC0301芯片USB摄像头,USB接口的普通摄像头价格低廉,性能较好,常被应用在可视电话、视频聊天和普通的视频监控等方面。ZC0301是中星微电子设计的第一块PC摄像头微处理器,这款芯片利用USBI.1的端口来与PC主机进行沟通,同时芯片内建的图象处理功能包括图象信号处理0SP),图象数据压缩及数据传输等。ZC0301的封装是小巧的28.PINLQFP,并不需要外接DRAM。强大的内置图象处理功能和JPEG译码功能使这款芯片为用户创造出高质量的图象。这款摄像头的主要参数为:
●完全兼容USBl.1;
■轻巧的28.PIN LQFP封装;
_可通过外置的EEPROM来设定USB参数:
■支持来源于CMOS图象传感器的8.bit RGB原始图象数据;
·支持原始图象数据的输出以达到高质量的静态图象。
三、智能家居中视频监控系统的实现
由于智能家居视频监控系统受到数字化、网络化和低成本化的限制,视频服务器必须要以嵌入式系统为硬件开发平台。
3.1嵌入式终端环境支持
3.1.1嵌入式操作系统
1、嵌入式系统的概念及分类
嵌入式系统是以应用为中心,软硬件可裁减的,适应于对功能、可靠性、成本、体积等综合性严格要求的专用计算机系统,亦即为监控系统量体裁衣的专用计算机系统。
嵌入式系统集软硬件于一体,主要由嵌入式处理器、相关外围硬件设备、嵌入式操作系统及应用软件系统等组成。嵌入式操作系统是一种实时的,兼容微处理器的,支持嵌入式系统应用的操作系统软件,它是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等,嵌入式操作系统在系统实时高效性、硬件的相关依靠性、软件固态化及应用的专用性等方面具有较为突出的特点。
二十世纪七、八十年代,各种嵌入式操作系统得到了蓬勃的发展,随着Intemet的飞速发展,面向Intemet的嵌入式系操作系统已作为主流产品。特别随着系统级芯片SOC的发展,嵌入式操作系统已开始能像硬件IP模块那样,作为IP嵌入至芯片中。嵌入式操作系统按其应用对象不同,有以下几类:
■基于或与Windows兼容:
--WindowCE、嵌入式Linux、EPOC
一工业与通信(传统)类:
—jVxworks、PSOS、QNX、Neculeus、VRTX
一单片机类:
一iRMX、CMX、I.tC/OS
●面向工nternet类:
一Palm05、Visor、HoPen、PPSM
1、嵌入式linux系统的优势
随着集成电路规模的不断提高,涌现出大量价格低廉、结构小巧、功能强大的CPU,给嵌入式系统提供了丰富的硬件平台。目前限制嵌入式系统发展的瓶颈突出的表现在软件方面。从二十世纪八十年代开始,出现了一些嵌入式操作系统,这些操作系统经过不断的发展、逐渐成熟,在各个领域得到了广泛应用。比较著名的嵌入式操作系统有Vxwork、pSOS、Neculeus和WindowsCE等,但这些商业产品价格昂贵,并不适合中低端的嵌入式系统和家庭个人使用,嵌入式Linux正是在这样一种市场环境下诞生的。
[NextPage]
Linux内核支持多种处理器,包括Intel x86、ARM、MIPS、M68k、PowerPC、Alpha、IA64、S/390、SuperH等处理器体系结构,很多处理器都可以应用在嵌入式领域。Linux可以支持实时扩展,目前有数个版本的实时Linux系统,同时Linux还具有网络功能,满足嵌入式系统对网络越来越多的需求。相比较其它的嵌入式系统,嵌入式Linux具有以下的优势:
1.实时性高:
管理和驱动中断的机制必须保证实时要求。根据这个要求,大多数嵌入式系统并不具备严格的实时性,而Windows CE基本上不具备实时性的特点。但是,嵌入式Linux可以很好得满足实时性要求。对Intel x86处理器,实时扩充可以在Linux系统中很容易进行,RT-Linux就是很好的例子。它主要是把Linux的任务作为自己的一个任务,因此实时性要求很高的任务不受非实时的Linux的干扰,可以得到满足。另外还提供了实时任务和Linux的基本核心和其他任务间的接口。
2.适应与稳定性高:
和其他运行于PC的系统相比,因为Linux继承了Unix优点,在适应和稳定方面性能是非常突出的。而嵌入式的Linux也是如此,嵌入式Linux不仅支持x86芯片,而且是一个跨平台的系统,到目前为止可以支持二、三十种CPU。同时,嵌入式Linux内核的结构在网络方面是非常完整的。提供了包括十兆、百兆、千兆的以太网络以及无线网络、Token Ring(令牌环)、光纤甚至卫星的支持。所以Linux很适于做通信设备的开发。此外,高可靠性是嵌入式Linux领先于其他嵌入式操作系统最明显的地方。
3.开发便利:
Linux应用于嵌入式系统另外一个显著的优势是可以使用主机模拟的环境进行开发。一般嵌入式的目的平台不允许安装或者没有足够的资源运行需要编译器,通过交叉编译,就可以在一个平台上生成另一个平台上的可执行代码,这里所谓的平台包括两个概念:体系结构和操作系统,即所谓不同的平台既可以是同一个体系结构运行不同的操作系统,也可以使同一个操作系统运行在不同的体系
结构上。这对应用程序的开发提供了很大的便利。开发者可以在主机平台上编写和调试程序,测试完成后经过交叉编译生成可执行程序,之后直接将其放到嵌入式设备中,大大提高了开发效率,并且使得嵌入式系统的开发拥有大量的资源可以利用。并且,Linux作为开源软件的代表,在达到同样性能的前提下带来的成本的节省也是巨大的。
本系统的开发环境为:
■宿主机为普通PC:
硬件配置为:CPU--Celeron(R)3.6GHz、内存一512MB、硬盘--60GB;操作系统为:LinuxFedora7.0(内核2.6.22)
■
目标板为嵌入式系统:
硬件配置为:CPU—Intel XScale为内核的PXA255 400MHz、ROM--32MBFlash、RAM一64M SDRAM:操作系统为:嵌入式Linux(内核2.4.19)
■交叉编译工具为:
交叉编译器(arm.1inux.gcc)、交叉链接器(arm.1inux.1d)
3.1.2摄像头驱动的加载
和传统嵌入式开发一样加载过程也采取了宿主机和目标板的加载模式。由于Linux内核对本项目中使用的ZC0301摄像头并不支持,所以需要自行加载驱动模块。由于摄像头的厂商开发产品时驱动基本上是基于Windows平台的,在Linux下只能选择开源的驱动源码,本系统选择的是SPCA5xx摄像头通用驱动,在下面的驱动网址:http://mxhaard.flee.f.r可以下载到针对embeded环境的驱动源码而且,由于开发Stargate下的驱动应用程序需要配置和此Stargate相匹配的模拟环境,还对PC机的Linux内核做了~些更改。
●摄像头驱动编译环境的配置步骤
1.在linux平台下新建一个目录,用于配置环境及开发应用程序,比如在个人目录下建立armlinux目录(xxxx为个人用户名对应的目录)mkdir/home/xxxx//armlinux
2.将linux.2.4.19.tar.gz复$1]至iJ/home/xxxx//armlinux目录下,提取出源代码tar-xvzf linux-2.4.19.tar.gz
3.将patch.2.4.1 9-rink7.gz放入解压后的linux一2.4.19目录,解压gunzip patch-2.4.19一rmk7.gz
4.为linux.2.4.1 9打补丁patch—pl<>
6.为linux.2.4.19打补丁patch-pl
7.将patch.2.4.1 9.rmk7.pxa2.star7.2.tar放入解压后的iinux.2.4.19目录,解压tarxvfpatch一2.4.19一rmk7一pxa2一star7.2.tar
8.为linux.2.4.19打补丁patch—pl<>
至此,视频驱动开发编译环境已经配置完成,下面就可以编译适合Stargare平台下的驱动程序了。
摄像头驱动的编译与安装
下载驱动usb-2.4.31LE06.patch.tar.gz软件包,编译步骤如下:
1.修改配置文件:把usb-2.4.31LE06.patch.tar.gz复制到/armlinux/linux.2.4.19/driver/usb下,解压,执行如下操作。tar-xvzfusb-2.4.31.patch.gzpatch-pl
2.动态编译:
(1)进入armlinux/linux.2.4.19,执行下面命令makemenuconfig
(2)选择当前目录下Loadablemodulesupport,进而选择允许模块加载r]EnableLoadable modulesuppon
(3)退回到上以及目录,进入General setup,然后在Multimediadevice下选中[M]Videofor linux
(4)选中r】V4Linformation inproc filesystem
(5)然后USB support,选择
【M]suppoafor USB
(6)在USB Multimediadevices选项下应该有USB SPCA5XXSunplusVimicro Sonix Cameras把它配置成模块module。
(7)编译
makedep make modules
在/armlinux/linux.2.4.19/driver/usb/spca5xx中生成spca5xx.O,spcadecoder.o,spca cole.o,驱动就此生成。
(8)将三个.o文件拷贝到Stargate的以下目录下/lib/modules/2.4.19一rmk7一pxa2一star/kemel/dfivers/usb/或/lib/modules/linux/kemel/drivers/usb/目录下。
(9)加载这三个.0文件(可以不用加载spcadecoder.o)
insmod-f/lib/modules/2.4.19-rmk7-pxa2一star/kemel/drivers/usb/spca5xx.o
insmod·f/lib/modules/2.4.19一rmk7-pxa2一star/kemel/drivers/usb/spea_core.0
hasmod-f/lib/modules/2.4.19·rmk7-pxa2一star/kemel/drivers/usb/spcadeeoder.o
Oo)查看驱动模块是否挂载成功lsmod
在终端控制上查看是否有spca5xx.0,spcacore.o模块,有表明成功加载。
(11)开创字符设备入口,主设备号为8l,次设备号0mknod/dev/videoO c引0
(12)再查看一下设备/dev/videoO是否存在ls.1h/dev/videoO
(13)摄像头驱动就加载完成,用下面命令可以查看驱动能否使用(插上摄像头)
cat/dev/videoO>test.ppm
将test.ppm上传到PC机下用常用看图软件查看即可。
至此,开发板Stargate上嵌入式Linux系统的摄像头驱动加载成功。
3.2 C/S架构视频服务器的设计与实现
传统嵌入式系统都是单机运行的控制系统,而随着嵌入式系统的广泛应用和用户对数据处理及管理需求的不断提高,单机运行控制系统无论在处理速度和处理能力方面都已经远远达不到人们的需求。特别在本视频监控系统中,单一的嵌入式系统不能很好的完成基于图像处理技术的入侵检测、实时访问及证据缓存等功能模块。因此本文结合嵌入式系统的具体软硬件结构特点提出嵌入式系统中建立C/S软件体系结构户下面先对C/S软件体系结构做一个简单的介绍。C/S结构,即Client/Server(客户机/服务器)结构,是一种两层结构的系统。第一层是客户机系统,即用户界面(Client)结合业务逻辑,接受用户的请求,并向服务器提出请求;第二层是服务器系统,进行数据管理并根据客户机端请求提交给客户端。C/S结构主要技术特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、有利于处理大量数据。
[NextPage]
本文即是在视频服务器端运行Servfox服务器端程序,通过80211b无线网卡将视频信息发送到作为监控中心的PC机上,而Pc机上运行Spcaview客户机端程序,实现在客户机端定时、实时截图,保存视频信息等工作,从而在视频信息中技现可疑入侵,实现安防功能。系统C/S架构如图3-I所示:

3.2.1 Vide04Linux简介
Vide04Linux是Linux内核里支持影像设备的一组APIs,配合适当的视频采集设备和相应的驱动程序,可以实现影像采集、AM/FM广播、频道切换等功能,
在远程会议、可视电话、视频监控系统中有着广泛的应用。
在Linux下,所有外设都被看成是一种特殊的文件,称之为设各文件。系统调用是内核和应用程序之间的接口,而设备驱动程序则是内核和外设之间的接口,它完成设备的初始化和释放、对设备文件的各种操作和中断处理等功能,因为应用程序屏蔽了外设硬件的细节,使得应用程序可以像普通文件一样对外设进行操作。本系统中主要针对USB摄像头设备idev/videoO,进行视频图像采集方面的程序设计。
Linux下V4L视频采集,主要是调用V4L模块参数进行视频原始数据的采集。使用的一些主要参数和函数定义在系/include/iinux/videodev h文件中,这里就编程中经常使用的数据结构作出说明㈣。
●strucI video_capability包含设备的基本信息(设备名称、支持的最大摄小
分辨率、信号源信息等)
name Canonical name for this interface
type Hpe of imerface
channels Number of radioltv channelsifappropriate
audios Number of audio devices ifappropriate
maxwidth Maximumcapturewidth inpixels
maxheight Maximumcapture heightinpixels
minwidth Minimumcapturewidth inpixels
minheight Minimumcapture heightinpixels
·struct videopicture包含设备采集的图象的各种属性(亮度、色调、对比度、色度、深度等)
brigtness Picturebrightness
hue Picturehue(colour only)
colour Picturecolour(colour only)
contrast Picture contrast
whiteness Thewhiteness(greyscale only)
depth Thecapture depth(matchthe frame bufferdepth)
·structvideo channel包含关于各个信号源的属性(信号源个数、设备名称、标志位等)
channelne channel number
name The input name—preferably reflectingthe label on the card input it self
tuners Number of tunersforthis input
flags Propertiesthe tuner has
type Type VIDEO_TYPE_TVIIDEO_TYPE_CAMERA
norm The norm for this channelPALINSTCISECAMIAUTO
·truct video window包含关于视频捕获区域(capture area)的信息
x The X co-ordinate specifiedin X windows format
Y The Yco-ordinatespecifiedin X windows format
width The width oftheimage capture
height The heightofthe image captHie
chromakey A host order RGB32value forthe chromakey
flags Additionalcapture flags
clips list ofclipping rectangles.(Set only)
clipcount Thenumber ofclippingrectangles.(Set only)
·struct videombuf利用mmap进行映射的帧的信息
size he number ofbytestomap
frames The number of frames
ffsets The offset&each frame
·structvideommap用于mmap
在V4L编程中,与图像设备的交互主要是依靠系统调用Ioctl函数来实现的,Ioctl主要用来控制I/O通道。Ioctl0通常需要几个参数,一般情况下,第一个参数fd代表打开的文件/设备;第二个参数cmd为驱动程序的特殊命令;有的还有第3个或者更多的参数,根据不同的驱动程序而不同。在V4L中还定义了一些重要的宏,用来作为loctl函数的第二个参数,用来操纵设备,一些主要的宏定义说明如下:
·VIDIOCGCAP:Ioctl操作得到图像设备的基本信息,保存在videocapability结构体中。
·VIDIOCSCAP:Ioctl操作根据video结构体中的值来设置图像_capability设备初始参数。
·VIDIOCGPICT:Ioctl操作得到图像的基本信息,保存在video picture结构体中。
·IDIOCSPICT:Ioctl操作根据video picture结构体中的值来设置采集图像的初始参数。
[NextPage]
●VDIOCGCHAN:Ioctl操作得到信号源的基本信息,保存在video channel结构体中。
●VDIOCSCHAN:Ioctl操作根据video channel结构体中的值来设置信号源的初始参数。
●VIDIOCGWlN:loctl操作得到采集图像区域的基本信息,保存在video window结构体中。
·VIDIOCSWIN:loctl操作根据video window结构体中的值来设置采集图像区域大小等参数。
3.2.2 SDL简介
SDL全称是SimpleDirectMediaLayer,即简单的指导媒体层【201。SDL是一个跨平台的多媒体函数库,被用来设计成在低层访问音频、键盘、鼠标、游戏杆,基于OPENGL(一种3D图象开发函数库)的3D硬件,和2D图象帧缓冲区。它被广泛的用于基于MPEG的媒体播放软件,模拟器,和许多著名的游戏。SDL是一个跨平台的函数库,几乎支持现今所有平台:Linux,Windows,WindowsCE,BeOS,MacOS,MacOSX,FreeBSD,NetBSD,OpenBSD,BSD/OS,Solaris.IRIX.andQNX。
SDL用C语言写成,但是可以很容易在C++下面工作,并且SDL绑定了许多其它的语言,这其中就包括Ada,C撑,Eiffel,Erlang,Euphoria,Guile,Haskell,Java,Lisp,Lua,ML,Objective C,Pascal,Perl,PHP,Pike,Pliant,Python,Ruby,andSmalltalk。
3.2.3服务器端设计与实现
Servfox是流媒体服务器,可以进行视频的采集和传输,用来做监控服务器。
Servfox利用了前面介绍的Vide04Linux编程模块提供的接口从摄像头设备中提取图像帧。提取流程如图3-2所示。在服务程序开始时,初始化V4L模块,初始化包括设备名称、图像分辨率、图像格式和采集方法等。通过V4L模块对采集设备属性的提取,确定采集的参数。并启动两个线程,一个线程是图像采集线程,另一个是服务线程。

图像采集线程采用循环机制。通过V4L模块进行图像采集,并且对图像进行压缩,减小图像的体积。根据主线程变量videoln.signalquit判断是否结束采集。
服务线程主要提供网络数据传输和对图像采集的控制。通过监听serversocket,接受客户端的链接请求,并建立新的socket进行数据和控制消息的传输。根据客户端发来的控制信息来调整V4L采集模块的参数,从而调整采集的图像。调整包括图像的亮度、对比度和色彩等。数据传输是将图像采集线程获得的图像,发送给客户端。发送分为两个步骤,首先发送本次发送图像帧的一些基本信息,如消息、图像的帧序号、图像的各种属性等。然后再将图像的数据通过socket发送给客户端。
下面的数据结构是服务器端发给客户端的数据结构。其中包括消息、帧序号、顺序号、延迟时间等等属性
structframe_t{
charheader[5];
intnbframe;
doubleseqtimes;
intdeitatimes;
int w:
inth:
intsize;
intformat;
unsigned shortbright;
unsignedshortcontrast;
unsignedshortcolors;
unsignedshortexposure;
unsignedcharwakeup;
intacknowledge;
)
对应的,客户端发送给服务器的消息的数据结构如下,其中包括消息、采样率、亮度调整、对比度调整等信息。
,
struct client_t{
charmessage[4];
unsignedcharx;
unsignedchary;
unsignedcharfps;
unsignedcharupdobright;
unsignedcharupdocontrast;
unsignedcharupdocolors;
unsignedcharupdoexposure;
unsignedcharupdosize;
unsignedcharsleepon;
)
3.2.4客户端设计与实现
spcaview有三种工作模式,通过用户输入参数不同启动不同的工作模式。三种工作模式分别是:
_播放远程servfox传输的视频。这种工作模式下,spcaview作为客户端,servfox作为服务器端进行协同工作。spcaview通过TCP/IP连接服务器端,发送客户端用户的一些参数设定,并接受服务器端采集的图像数据,进行解码显示。
■通过本地的摄像头进行视频获取。通过本地摄像头获取视频图像,显示并存储到本地。在这个工作模式下,主要使用了V4L的视频截取功能和SDL的图像显示功能。
■播放本地的avi文件。播放本地磁盘上存储的采集视频文件。在三种工作模式中都通过对SDL的调用实现了图像的显示等功能。其中对SDL的调用过程如下:
1.调用SDL Init0动态的加载和初始化SDL库。该函数带有一组标记来表
示哪部分需要激活,SDL INIT AUDIO表示音频部分,SDL INIT VlDEO表示视频部分,SDL INIT CDROM表示光驱部分,SDL I-NITTIMER表示定时器部分。这几个部分可以任意搭配选择。
2.选择和设置视频模式,
SDLSetVideoMode(640,480,16,SDL SWSURFACE)。其中包括视频分辨率,色彩深度和模式。
3.设置定时器及回调函数,SDL SetTimer((Uint32)interval,callback。.timer)其中包括定时器的触发间隔时间和触发时的回调函数。
4.使用完毕最后调用SDL Quit(),对SDL库进行释放。
[NextPage]
在监控系统中,应用spcaview的“播放远程servfox传输的视频”这一功能可以实现远程监控的功能。但智能家居中需要进行无人监控,而spcaview不能实时进行远程视频图像的采集,仍不能满足需要。根据智能家居视频监控系统的需要,在系统中对spcaview进行了改进。改进主要有两点:一是对远程servfox传输的视频图像进行截图。二是对远程视频进行本地存储。

图3.3是改进后的spcaview的主流程图。对远程视频截图的方法是创建一个截图子线程,利用公用的变量pictFlag来控制是否截图。此外,创建一个定时器,定时器根据设定,会在一定的时间间隔后被触发。当定时器被触发,则将标志变量置为真。截图子线程采用轮询的方式,等待标志变量;当标志变量变为真是,进行截图,并复位标识变量,如图3.4所示:

原始的spcaview是命令行方式的.在使用时需要输入多个参数。对于普通用户来说,使用非常不便。本文实现的视频监控系统中采用fava语言,为客户端实现了一个用户界面。如图3—5所示,能够简便的对一些参数进行设置。

在IP地址和端口号处设置远程视频传感器的IP地址和端口号,如图服务器JP地址:I92 168¨0】,端口号:7070。
图片保存:选取“保存图片”单选框可以进行定间隔图片自动保存,在“时间间隔”处设定截取图片的时间间隔(以秒为单位,默认设置为1秒)。在进行视频监控的同时,按下键盘上“S”键可以实现在任意时刻对实时画面进行手动截图。
视频保存:选取“保存视频”单选框可以保存动态视频流,在“另存为”处设定保存位置与文件名称(默认设置为保存在根目录下的video.avi文件)。 |