摘 要: 研究了一种基于ARM11的视频采集无线传输系统,实现了主体家庭网关通过摄像头对各个分散房间的有效监控。系统选用ARM11内核的S3C6410作为系统处理器,CMOS摄像头OV9650作为采集端,在自主设计的硬件平台上搭建Linux软件系统,利用系统内部的V4L2提供的数据结构、应用函数等完成摄像头的采集;在传输系统方面,采用传输速度较快的WIFI-Ad-Hoc模式(端对端传输),依靠TCP/IP协议的传输方式使采集端与家庭网关之间建立连接,成功实现家庭网关对各个分散采集点视频信息的接收。
关键词: 视频;采集;传输;无线网络;ARM11
在信息、通信不断发展的今天,人们对生活环境的安全性越来越重视,有效的视频监控系统为人们解决了这个问题。随着电子信息技术、网络技术和多媒体技术的迅速发展,嵌入式的无线视频监控随即出现并且飞速发展,整个视频监控市场朝着集成化、网络化、数字化和实时化的方向发展,而家庭视频监控中对采集传输的要求越来越高[1]。由于视频数据信息量大、实时传输要求高,因此视频监控技术中视频的采集和传输显得尤为重要。而ARM嵌入式系统的小型化、成本低廉、结构紧凑、占用空间小、可裁减性好、支持无线网络等特点,使得利用ARM11+Linux构成的采集传输系统在现实中具有很大的实用价值。
本文针对网络视频采集传输的实际应用需求,结合图像采集、无线传输和嵌入式系统等新技术,设计了基于ARM11内核S3C6410微处理器的无线视频传输系统,在Linux系统平台上实现通过远程控制家庭网关来对各个分散房间环境的有效监控。
1 系统的整体结构
家居视频采集传输系统的整体结构可以分为视频采集系统和视频传输系统两个部分。其中家庭网关是视频采集与传输的关键,是家庭监控系统的主节点核心设备,视频采集传输的各项命令都需要家庭网关下达。整个系统构成如图1所示。
家庭网关的中央处理器的选择方案比较多,考虑到家庭网关的功能和成本,选择S3C6410微处理器作为基本的中央处理单元完成视频信息的存储及传输。为了方便采集模块摄像头视频信息的采集处理,选择功能强大的S3C6410处理器作为采集端的核心,方便家庭网关与采集模块同时扩展WIFI模块来建立Ad-Hoc点对点的无线网络连接,实现视频的快速、平稳、流畅的传输。
整个系统的工作流程如下:
(1)整个系统上电,使房间各个设备处于待机状态,室内每个房间安装带有摄像头的采集模块,并且在采集模块上集成WIFI模块,家庭主节点(家庭网关)也扩展相同的WIFI模块,每块WIFI模块都设置成Ad-Hoc工作模式;
(2)处于待机状态的家庭网关接收到用户的命令,判断用户需要哪个房间的具体信息,使家庭网关与所需房间所在摄像头采集模块建立连接(两者通过Ad-Hoc网络建立连接)。家庭网关发送采集视频指令给某个房间的采集模块,相应的采集端接收采集指令使处于待机状态的采集模块分析指令,从而开启摄像头采集存储房间的视频信息;
(3)采集模块采集视频信息,根据命令将采集的视频信息通过TCP/IP的传输方式发送到家庭网关,家庭网关根据用户命令检测采集是否完成,选择是否关闭会话,使房间设备处于待机状态,等待下次采集命令。
2 视频采集系统的实现
2.1 采集系统硬件设计
采集系统硬件部分设计主要包括微处理器单元S3C6410、电源模块、CMOS摄像头采集模块、SD-WIFI无线网络模块、NAND Flash和SDRAM、SD卡等外围电路模块等。本系统利用S3C6410处理器控制接收CMOS摄像头的视频信号,利用其内部集成的Video4Linux2提供的数据结构、应用函数等完成摄像头的采集;SD-WIFI模块建立Ad-hoc端对端网络连接,通过TCP/IP协议的传输方式使采集端与家庭网关之间建立连接,成功实现家庭网关对各个分散采集点视频信息的接收;在此基础上,配置了1 GB的NAND Flash,用于存放嵌入式Linux操作系统、应用程序和数据,128 MB的SDRAM内存,用于存放运行程序及摄像头采集的数据; SD卡用于程序的下载和简易安装;整个硬件系统设计统一的电源模块供电。
整个视频采集终端中,除了核心处理器S3C6410外,最重要的就是CMOS摄像头,其中摄像头的选择与硬件电路连接是系统硬件设计的关键。
CMOS摄像头是一种采用CMOS图像传感器的摄像头,是数码设备用来感光成像的部件,集成在被称做金属氧化物的半导体材料上。CMOS图像传感器可通过CMOS技术将像素阵列与外围支持电路(如图像传感器核心、单一时钟、所有的时序逻辑、可编程功能和A/D转换器)集成在同一块芯片上,具有体积小、重量轻、功耗低、成本低、编程方便、易于控制等优点[2],因此,CMOS图像传感器的应用已经变得越来越广泛。
本设计选用传感器芯片OV9650。OV9650传感器具有130万像素的配置,分辨率可达1 280×1 024,具有标准的SSCB接口和10 bit数据接口,由于S3C6410片内有摄像头接口外设,所以将OV9650摄像头芯片直接与处理器摄像头接口引脚相连,图像并行传输,图像数据速度明显提高,CMOS摄像头电路原理图如图2所示。
该芯片支持RGB(4:2:2)、YUV(4:2:2)、YCrCb(4:2:2)三种数据输出格式,内置138个设备控制寄存器,地址范围0x00~0x8A,通过SCCB接口可以方便地设置传感器视窗大小、增益、白平衡校正、曝光控制、饱和度、色调等参数。
2.2 采集模块软件实现
系统软件可以控制实现硬件设备CMOS摄像头对房间视频信息的采集、存储,这里选择Linux作为操作系统。Linux系统下,对视频设备的各种操作是通过Video4Linux2(简称V4L2)实现的。Video4Linux2是Linux内核中支持影像设备的一组APIs,配合适当的视频采集设备和相应的驱动程序,可以实现影像采集、AM/FM广播、频道切换等功能,在远程会议、可视电话、视频监控系统中有着广泛的应用。V4L2在Linux下进行视频采集的接口函数主要有open、read、write、select、mmap以及ioctl等,这与普通字符设备的驱动接口形式上都是一致的,但是V4L2为设备控制接口函数ioctl提供了丰富的控制字来实现对设备的管理,管理的内容包括对设备信息的查询、帧缓冲的设置、图像属性的设置、视频的捕捉等。
在Linux下,所有的外设均被看成是一种特殊文件进行处理,称之为设备文件。系统调用和各种函数库直接或间接地提供了内核及应用程序之间的接口,而设备的驱动程序则是内核及外设之间的接口,它完成设备的初始化和释放、对设备文件的各种操作和对中断进行处理等各项功能。由于应用程序屏蔽了外设硬件的细节,使得应用程序可以像普通文件一样对外进行操作而无需关注具体细节[3]。因此,在进行视频图像采集之前,必须先加载Video4Linux2模块为视频采集设备提供函数接口。同时在内核中,加载采用OV9650接口芯片的CMOS摄像头的驱动,通过OV9650芯片就可以采集视频数据并保存在Linux系统中进行数据处理。
Video4Linux2分两层式架构,最上层为Video4Linux2驱动程序本身,最下层架构则是影像设备的驱动程序。本系统中则是使用V4L2的最上层驱动程序,即V4L2本身所提供给程序开发人员的APIs。Linux系统中把设备看成设备文件,在用户空间可以通过标准的I/O系统调用函数操作此设备文件,从而达到与设备通信交互的目的。
采集端在接收到家庭网关的采集指令之后开始视频采集,整个视频数据采集的流程如图3所示。
3 视频传输系统的实现
3.1 视频传输模块设计
3.1.1 传输方式选择
相较于有线网络的繁琐,无线网络渐渐成为家庭网络的首选。在流行的无线网络产品中,最为熟悉的网络标准主要有WIFI、BlueTooth、ZigBee、3G等[4],具体详见表1。
连接ARM与WIFI模块常用的硬件接口有SPI、SDIO和USB,其中SPI是大多数微处理器都集成的一种接口,具有硬件连接方便、软件设计简单、节省系统资源等特点。本系统采用的WIFI模块支持SPI和SDIO连接。本系统中采用SPI接口来连接S3C6410处理器,通过CON11针脚引出,它是一个2.0间距的20Pin插针脚,为了配合SDIO使用,该接口还包含1路SPI、2个GPIO。
3.2 视频数据传输的实现
3.2.1 无线传输模式的搭建
传输模式的搭建可分为两个部分,一是内核模块的加载,二是工作模式的设置。内核加载WIFI模块,通过insmod命令来实现,这里需要加载相应的运行文件,这两个文件可以在Marvel官方网站下载;设定工作模式之前要先使用ifconfig命令设定目标板的IP地址,然后通过iwconfig命令设置模块的工作模式和用户名,为增加安全性,也可以设置相应的密码。
3.2.2 TCP/IP协议的视频数据传输
TCP(传输控制协议)是TCP/IP体系中面向连接的传输层协议,它可以保证数据可靠地传输。Linux作为一个通用的操作系统,支持所有的网络协议包括TCP/IP协议。首先,Linux的TCP/IP协议的实现是基于Linux的一整套内核控制机制,如进程调度机制、进程通信机制、软中断机制等,一个基于TCP/IP应用程序的执行是一个进程,所以操作系统的支持是显然的,同时也是必须在操作系统的上述机制的控制下才能得以实现。
应用程序使用传输层的TCP协议来完成视频数据的可靠传输,是因为TCP协议能够保证数据准确完整地、按正确的序列在网络上传送到目标地址。TCP协议的特性是能够提供可靠的、面向连接、字节流传送服务,TCP 协议能够在两个通信的主机之间建立点到点的逻辑连接。TCP实现传送的过程为:首先在通信双方-客户端与服务器之间提供连接,一个TCP客户与某个给定的服务器建立连接,通过建立的连接与服务器交换数据信息,最后结束连接。本文将采集发送端、接收端看做相应的服务器、客户端。
在Linux系统中,如果希望通过网络和其他程序进行通信,就只能通过套接口socket()实现。套接口是一种使用操作系统中的文件描述符和系统进程进行通信的一种方法。Linux支持多种类型的套接口,每种类型的套接口都有自己的寻址方法,这里支持TCP/IP协议的套接口类型是INET。一旦申请了一个套接口以后,就可以利用Linux提供的网络函数进行网络编辑[7]。具体传输过程如图5所示。
套接口通信的进程使用的是采集端/家庭网关模式,服务器采集端用来提供服务,家庭网关端则可以使用服务器采集端提供的服务。这里采集端首先创建一个套接口,然后给它指定一个名字。名字的形式取决于套接口的地址簇,事实上也就是采集端的本地地址,系统使用数据结构sockaddr来指定套接口的名字和IP地址。当采集端指定套接口以后,它将监听与此地址有关的连接请求,而请求的发起者(家庭网关)将会创建一个套接口,然后再创建连接请求并指定采集端的目的地址,对于一个套接口来说,采集端的地址就是它的IP地址和端口号[8],当然,对于不同的采集端所分配的IP地址是在一个网段的不同地址。通信过程中的连接请求必须通过各种协议层,然后等待采集端的监听套接口,一旦采集端收到了连接请求,它可以接受或者拒绝这个请求。当接受连接请求后,采集端通过accept()响应接受连接,建立起数据连接之后,双方就会进入传输状态,数据传输完毕之后,数据连接有选择地循环继续传输或者撤销,如此循环反复,直到会话结束,从而实现将视频文件从采集端传送到家庭网关。
以往的嵌入式视频采集传输系统都是在ARM9开发平台上的,视频的处理要采用相应多媒体处理设备。而本文采用的ARM11内核自身集成了视频的采集处理功能,简化了开发难度,节约了成本。相较于以往有线家居视频监控系统,本设计采用了比较新颖的无线WIFI监控,传输速度快捷,满足了大视频数据传输的要求。本系统构建了低成本、低功耗、实时性强的无线视频监控平台,除应用于家居监控外,还可以用于搭建各种各样的应用,具有可观的实用价值。
参考文献
[1] 郝东东,纪珂.基于S3C2440_Linux的视频传输系统设计[J].计算机光盘软件与应用,2012(1):141-142.
[2] 丁昊杰,刘敬彪,盛庆华.基于CMOS图像传感器的视频采集系统设计[J].现代电子技术,2012,35(14):178-188.
[3] 郝俊,孟传良.基于V4L2的ARM11 USB视频采集终端的设计与实现[J].贵州大学学报,2011,28(4):74-78.
[4] 陈玉坤,李波.基于嵌入式Linux的Ad-Hoc网络视频传输研究[J].测控技术,2011,30(1):83-86.
[5] 曾磊,张海峰,侯维岩.基于WIFI的无线测控系统的设计与实现[J].电测与仪表,2011,48(7):81-83.
[6] 郑晓东,王建.基于WIFI技术的无线传感器网络节点设计[J].科技研究,2011(7):61-62.
[7] 何劲,谢松巍.基于Socket的TCP/IP网络通讯模式研究[J].计算机应用与研究,2001,18(8):134-135.
[8] 王凤纯,鲁静.基于RTP/RTCP的音视频同步方法研究[J].软件,2011,32(6):78-80.