国内外市场上主要推出的是数字控制的模拟视频监控和数字视频监控两类产品。前者的技术发展已经非常成熟, 产品性能稳定, 在实际工程中得到了广泛应用。
后者是新近崛起的以计算机技术及图像视频压缩技术为核心的新型视频监控系统, 该系统在解决模拟视频监控系统的部分弊端的基础上迅速崛起。在互联网的普遍推广和网络带宽逐渐提高的背景下, 视频监控技术飞速发展, 出现了集多媒体技术、网络通信技术、嵌入式技术于一体的嵌入式网络视频监控系统。
目前国内嵌入式视频监控系统的研究有了很大的发展, 但是国内对嵌入式无线视频监控系统的研究还比较少。本文介绍了自主开发的基于ARM 的嵌入式无线视频采集系统设计方案。该方案采用S3C2410嵌入式处理器和ARMLinux 操作系统, 利用通过自行开发的视频服务器软件, 通过3G 无线上网卡完成客户端与视频服务器的通信。介绍了系统的硬件结构、服务器端软件的总体结构、驱动程序的构建、图像的采集和压缩以及传输模块的设计, 并进行了测试。实验结果表明, 系统采用H.264 编码技术在保证视频传输质量的同时具有良好的带宽适应能力。
1 系统总体结构
本系统由监控现场摄像头、嵌入式视频服务器、客户端三部分组成。监控现场的摄像头实现图像的采集,并把采集的图像信息通过内部总线传送给嵌入式视频服务器。嵌入式远程视频监控系统是一个基于S3C2410处理器、H.264 压缩、Web 服务器和Linux 操作系统的嵌入式系统, 它的主要功能是对摄像头采集到的图像进行H.264 压缩编码, 并对编码后的图像通过3G 无线网络进行传输。客户端主要完成图像的接收和解压缩, 用户可以通过Web 浏览器访问嵌入式视频服务器来观看摄像头采集到的图像, 从而实现远程视频监控。嵌入式远程视频监控系统总体结构如图1 所示。
图1 嵌入式远程视频监控系统总体结构
2 系统硬件结构
系统硬件由图像传感器MI360、3G无线模块MC8630、图像压缩芯片ZC0301、微处理器芯片S3C2410 、以太网控制芯片、SDRAM等芯片组成。S3C2410 具有低功耗、精简而出色的全静态设计等特点, 具备MMU存储器管理功能, 拥有独立的16 KB 指令和16 KB 数据缓存,在高性能和低功耗特性方面提供了可靠的性能。无线模块选用中兴3G 模块MC8630, 数据速率为前向:3.1 Mb/smax,反向:1.8 Mb/s max 。
为了降低成本, 简化设计, 本方案选用中星微的ZC0301 作为视频压缩编码芯片,Vimicro ZC0301 主要由系统控制、图像信号处理、次取样和水平扫描、JPEG 编码器和USB 设备控制五大功能模块组成。CMOS图像传感器选择美光的MI360 , 它采用VGA 标准(30 万像素) ,感光面积为1/4 英寸, 有效像素649H ×489H, 采用低噪声技术, 噪声等级达到CCD 标准。MI360 和ZC0301 压缩编码芯片完成视频数据的采集、压缩和编码。系统硬件结构如图2 所示。
图2 嵌入式监控系统硬件结构
3 系统软件结构
本嵌入式远程视频监控系统软件由摄像头驱动模块、图像采集模块、H.264 图像压缩模块、嵌入式Web 服务器组成。摄像头驱动模块实现摄像头在Linux 操作系统下的正常工作, 并为应用程序提供接口。图像采集程序获取摄像头传送过来的图像信息并进行暂存。H.264压缩模块完成对原始图像的编码处理。嵌入式Web 服务器实现图像数据处理与网络传输。嵌入式Web 服务器一般由5 个主要模块组成: 嵌入式HTTP 引擎、安全模块、应用程序接口、文件系统和配置模块[ 2]。由于开发平台采用的嵌入式操作系统为ARMLinux , 具有成熟的文件系统, 提供文件访问的接口, 可以直接使用文件系统提供的读写接口访问嵌入式Web 资源文件, 不需要另外设计文件系统。嵌入式视频监控系统软件体系结构如图3 所示。
图3 嵌入式视频监控系统软件体系结构
3.1 摄像头驱动程序设计
图像的采集工作由图像传感器MI360 和视频压缩芯片ZC0301 完成,ZC0301 通过USB 接口和S3C2410 相连,因此驱动程序主要是对Linux 下USB 驱动程序的开发,ZC0301 的驱动独立开发难度较大, 主要是既要考虑图像采集芯片的驱动, 还要考虑USB 的驱动, 且Vimicro 没有公布ZC0301 的详细技术资料。Linux 下ZC0301 的驱动程序有开源代码, 根据本系统的开发平台进行修改、移植、重新编译内核等操作可以完成ZC0301 的驱动程序。
3.2 图像采集模块设计
Video4linux(V4L) 是Linux 的影像串流系统与嵌入式影像系统的基础,是Linux Kernel 中支持影像设备的一组APIs , 配合适当的视频采集卡与视频采集卡驱动程序,可以实现影像采集、AM/FM 无线广播、影像CODEC、视频切换等功能。Video4linux 为二层式架构, 上层为Video4linux 驱动程序本身, 下层架构则是影像设备的驱动程序。这里用到的是Video4linux 的上层驱动程序, 即Video4linux 本身所提供给程序开发人员的APIs 。
Video4linux 视频图像采集流程如图4 所示。
图4 Video4linux 视频图像采集流程图
3.3 H.264 图像压缩模块设计
H.264 是ITU-T 视频编码专家组(VCEG) 和ISO/IEC活动图像编码专家组(MPEG) 的联合视频组(JVT) 开发的一个新的数字视频编码标准。在技术上,H.264 标准有很多优势,如统一的VLC 符号编码,高精度、多模式的位移估计,基于4×4 块的整数变换、分层的编码语法等。这些措施使得H.264 算法具有很高的编码效率, 在相同的重建图像质量下能够比H.263 降低50%左右的码率。
H.264 的码流结构网络适应性强, 增加了差错恢复能力, 能够很好地适应IP 和无线网络。H.264 能以较低的数据速率传送基于IP 的视频流, 在视频质量、压缩效率和数据包恢复丢失等方面, 超越了现有的MPEG-2、MPEG-4 和H.26x 视频通信标准, 更适合窄带传输,是目前监控系统最为理想的信源压缩编码标准。
相对于有线网络而言,无线网络状况更不稳定,除去网络流量所造成的传输速率的波动外, 设备的移动速度和所在位置也会严重地影响到传输速率。其次, 无线信道的环境也要比有线信道恶劣得多, 数据的误码率也要高许多,而高压缩的码流对传输错误非常敏感, 还会造成错误向后面的图像扩散, 因此无线流媒体在信源和信道编码上需要很好的容错技术。错误恢复的工具随着视频压缩编码技术的提高在不断改进。旧的标准(H.261、H.263、MPEG-2 的第二部分)中,使用片和宏块组的划分、帧内编码宏块、帧内编码片和帧内编码图像来防止错误的扩散。之后改进的标准(H.263+,MPEG-4)中,使用多帧参考和数据分割技术来恢复错误。H.264 标准在以前的基础上提出了三种关键技术来进行错误的恢复, 分别是参数集合、灵活的宏块次序(FMO)和冗余片(RS)。FMO 是H.264 的一大特色,可以是一帧中的宏块顺序分割,使分割后的片的尺寸小于无线网络的MTU 尺寸,避免在网络层再进行一次数据分割,降低了数据传输的额外开销。
3.4 嵌入式Web 服务器设计
本系统选用适合嵌入式系统的Boa 服务器, 它是单任务HTTP 服务器, 占用空间小, 另外支持动态Web 技术的CGI 技术, 源代码开放, 性能高。嵌入式Boa 服务器移植到Linux 系统中的网上相关资料很多, 不再赘述。
下面重点介绍应用程序接口CGI 程序设计。
公共网关接口CGI 是HTTP 服务器与其他机器上的程序进行“ 交谈” 的一种工具, 其程序须运行在网络服务器上。CGI 是一个用于Web 服务器与外部程序之间通信方式的标准, 使得外部程序能生成HTML、图像或其他内容, 而服务器处理的方式与那些非外部程序生成的HTML、图像或其他内容的处理方式是相同的。使用CGI的原因在于它是一个定义良好并被广泛支持的标准, 没有CGI 就不可能实现动态的Web 页面, 除非使用一些服务器中提供的特殊方法。
CGI 程序入口为main () 函数, 函数首先执行初始化用到的变量, 然后根据提供的环境变量Environmentv 获取当前访问用户的用户名, 判断用户的访问权限, 然后根据REQUESM 得到用户的请求方法。如果是POST, 则根据Contentl 获取用户请求内容并分析; 如果是GET, 则根据Querys 获取信息并分析请求内容, 最后根据用户权限做出相应的处理; 如果是其他的请求方法, 则返回错误, 不支持该请求方法。流程图如图5 所示。
图5 CGI 程序处理流程
S3C2410 凭借其高性价比、丰富的接口以及对网络的强大支持, 使其非常适合做网络视频监控系统的Web视频服务器的处理器。H.264 算法具有很高的编码效率, 在相同的重建图像质量下, 能够比H.263 降低50%左右的码率。H.264 的码流结构网络适应性强, 增加了差错恢复能力, 能够很好地适应IP 和无线网络。本系统支持动态IP, 可以直接连入以太网, 能够即插即看。通过局域网(100 Mb/s 以太网) 内部测试, 可以达到25 帧/秒CIF 图像(320×240) 要求, 传输延迟0.6 s 以内, 编码后的码率150 Kbit/s , 由客户端软件解码恢复后的视频图像清晰、流畅、没有抖动现象, 能获得较好的视频质量。