1 基于IPv6摄像机的需求
随着IPV6网络技术、多媒体技术的迅速发展和嵌入式设备的广泛应用,嵌入式设备接入IPV6网络的要求日益增强,使得数字网络视频得到了飞速发展。尤其在监控、远程教学领域,提出了将传统的模拟视频信号转换为数字视频信号,并且利用IPV6网络设计一个不受距离限制的廉价的通用网络视频设备要求。
1.1 嵌入式系统的广泛应用。
传统摄像机的视频图像如果要在网络中传送,首先需要采集、压缩,然后再用视频服务器传送,过程比较烦琐、复杂。嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。几乎没有哪一个系统在设计的时候不考虑如何与其他系统进行互连。例如基于网络的远程教育、远程监控、远程数据采集、自动报警、上传下载数据文件、自动发送Email等功能。网络专家预测,将来在Internet上传输的信息中,有70%来自小型嵌入式系统,嵌入式Internet将会产生比PC机时代多成百上千倍的瘦服务器和超级嵌入式瘦服务器。网络摄像机就是一种能直接再网络上传送视频信息的摄像机,具有一个简单的视频服务器。与传统摄像机相比,它具有设备小巧,能直接上网的优点。
1.2 IPv6网络的发展趋势。
TCP/IP起源于 60年代末美国政府资助的一个分组交换网络研究项目,到现今已发展成为计算机之间最基本的组网协议。现在Internet上出现的重大变化就是从目前的IPv4协议转变为IPv6协议。同现在广泛使用的IPV4相比,IPv6在功能和性能方面都有所增强,可分为路由增强和主机增强。路由增强包括包的优先级、流标签、隧道机制等。主机增强包括地址自动配置、认证、加密、多播报文的传送和实时应用的支持。
尽管IPv4支持大约40亿个地址,同时人们还想出了一些办法,在“私有”网络中开辟额外的地址空间。但仍然出现了地址危机,而IPv6支持 3.4×1038个地址,也就是说足可以为地球上每平方毫米提供6.70×1017个地址。随着IPv6的逐步普及,很多设备需要能够同时支持IPv4 和IPv6的通信。为了解决目前IPv4地址严重匮乏,满足未来网络对地址的巨大需求,IPv6采用128位的地址取代了IPv4的32位地址,它所能容纳的地址大到足以让每个人都可单独拥有目前Internet规模的网络。同时IPv6地址的多层次结构在很大程度上提高了路由器的选径效率。IPv6在地址方案上还增加了地址的自动配置机制,减轻了网络地址管理的开销。在IPv6的地址类型中,新增了群集地址Anycast地址,可用于IP报文的组播。
2嵌入式IPV6的实现方法
根据不同的情况,嵌入式IPV6有不同的实现方法,每种方法都有自己各自的优缺点。下面就简要介绍各种方法。
2.1自己编程实现
按照RFC文档的规范,根据自己的需要,开发相应的协议,包括核心协议,ICMPV6,NDP等。其缺点是非常明显的,开发的技术难度大,周期长,容易出错,花费的人力、物力、财力巨大。这种方式的优点主要有:(1) 可以使代码较少,对嵌入系统的内存要求低,代码可以做到不超过100k byte,满足嵌入式系统要求。(2)提供方便的用户接口,使用户方便的使用协议栈。(3)可裁减性,按照自己的需要,实现自己需要的部分协议。(4)可扩展性,可以方便的扩展协议功能,加入其他协议。
2.2购买现成的产品
现成的产品具有功能强大,较好的售后服务的特点。如瑞典的Interpeak公司,它为嵌入式系统引入嵌入式IPv6协议栈,为路由和交换设备专门裁减IPv6/Ipv4双路由栈。首家提出Interpeak双栈,它既可将IPv6 Ready Logo作为主机栈进行接收,也可作为路由栈进行接收。这个网络栈具有IPv6的全部功能以及其他特征,包括IPSec、NAT-PT、传输机制、QOS、Diffserv、VLAN、多播转发和代理、虚拟路由以及其他许多特性。还提供包括IKEv2、MPLS forwarding、完整的移动IP组件、Firewall、RADIUS、SSH、Web Sever、SNTP和SNMP在内的其他产品,进一步加强了IPv6。这些产品计遵循模块化、高效、可扩展性的思想。但缺点是价格较高,做产品时将受到许可证、版权的限制等。
2.3利用开源Linux
利用开放源代码的Linux实现,它作为嵌入式操作系统的优势主要有以下几点:
可应用于多种硬件平台。
Linux已经被移植到多种硬件平台,这对于经费,时间受限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发后移植到具体的硬件上,加快了软件与硬件的开发过程。Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件(包括X86,Alpha、ARM和Motorola等现有的大部分芯片)等特性的一种通用操作系统,已经被成功的移植到了数十种硬件平台上,它也可以在没有MMU(内存管理单元)的处理器上运行,这就使得在嵌入式领域这种没有MMU的处理器的情形下得到相当广泛的应用。
Linux带有强大的网络功能和完善的开发工具
几乎所有的Unix系统的应用软件都已移植到了Linux上。Linux还提供了强大的网络功能,有多种可选择窗口管理器(X Windows)。Linux的一个显著优势就是强大的网络功能,优秀的网络功能,这在Internet时代尤其重要。 Linux的发展过程本身就是随着网络发展起来的,Linux上有一套成熟的网络协议堆栈,从2.4开始就支持IPV6了。对于TCP/IP协议,Linux有着最完备的支持,这使得Linux在网络方面有很大的优势。此外,在其下也有大量的自由的优秀的开发工具和软件资源,和大量的应用软件可用,其中大部分都遵从GPL,是开放源代码和免费的。这样在Linux下开发应用程序时,往往不需要从头做起,而是直接进行二次开发,大大减少了工作量,缩短了开发周期,提高了开发的效率。它也具有强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。
开放源代码的免费软件,适合裁剪
Linux遵从 GPL,因此我们只要遵循GPL相关规定就可以获得其拷贝, 无须为每例应用交纳许可证费, 人们可以任意修改,以满足自己的应用,由于嵌入式系统是面对特定功能的专用计算机系统, 往往就需要针对具体系统进行裁剪和优化, Linux内核小巧,适合裁剪, Linux的内核采用模块化设计,模块可以根据需要加载和卸除。这就使得开发人员可以针对自己的系统来编译自己的内核,运行所需资源少,十分适合嵌入式应用。此外,Linux内核与用户界面完全独立,各部分的可定制性很强,这有利于节约系统资源,非常适合于嵌入式系统的开发。其程序源码全部公开,任何人可以修改。这样,开发人员可以对操作系统进行定制,适应其特殊需要。
性能高效、稳定
Linux本身具备的一个很大优点就是稳定,曾有人做过实验,24小时不间断运行的情况下,Linux三年内只出现过5次死机现象,而Windows死机次数则有150次之多,嵌入式系统一般要求在环境恶劣的情况下依然能够稳定正常的工作,正是由于Linux的稳定性,才使得嵌入式系统得到高可靠性的保证。
通过以上比较,我们决定采用最后一种方案。
3 方案的实施
我们做设计的目标是用Sitsang开发平台实现一个具有实时视频采集压缩及传输功能的可以直接接入IPV6网的网络摄像机。
3.1 硬件系统简介
因本文主要介绍软件系统的设计,所以只简单介绍其硬件系统。整个系统除摄像头部分外都是在基于Intel PXA255 的Sitsang开发板上实现的。Sitsang板的核心为PXA255,配备了大量的硬件资源,其中通信接口中的以太网控制器和USB Host控制器在本系统中是关键部件。Sitsang开发板上采用了Standard Microsystems LAN91C96以太网控制器,它通过U52与网络相连,支持IEEE802.3的10Mb/s模式。Sitsang开发板上采用了Philips的 ISP1161作为USB Host控制器,使用USB Host接口可以使Sitsang板与视频采集摄像头相连。以太网控制器和USB Host控制器通过数据总线收发器(74LVCH32245)以及地址、数据总线驱动器(74LVCH32244)与PXA255相连接,使用ov511芯片的USB摄像头。
3.2 软件系统的实现
软件系统的设计与实现是本系统的关键,主要分以下几个步骤:
3.2.1. 编译支持IPv6的Linux内核
我们采用的内核是Linux 2.6.12,该内核扩展多嵌入式平台支持的一个主要途径就是把uCLinux的大部分并入主流内核功能中。要向该CPU移植Linux,首先要准备交叉编译环境,以便在PC机上编译可运行于PXA255核CPU的目标代码。实验选用的Linux内核源码包是Linux最新版内核(Kernel),版本号2.6.12.ar.bz2,以下是编译支持IPv6的Linux内核的过程。首先是下载内核源代码,其地址是:
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.12.tar.gz,下载后将其放置到 /usr/src/下,然后用命令tar zxvf linux-2.6.12.tar.gz解压,再执行以下命令 #cd linux-2.6.12 ,#make menuconfig配置内核,一定要选开发板的网卡驱动。在执行make menuconfig命令的时候,注意把Network Options下有关IPv6和隧道(tunnel)的模块选为内核模式,以便得到所需要的内核文件。因为现在得到的Linux内核版本虽然是支持IPv6的,但是支持IPv6的模块默认并不会编译入内核的。其他选项根据实际需要更改,使内核满足需要即可以便得到较小的内核。最后是编译内核,需要执行以下命令:#make dep;#make zImage;#make modules。编译无误后,就有了支持IPv6的内核,接下来的工作是把启动程序和内核文件外加一个精简的文件系统烧录到开发板上去,开发板就可以启动了。
3.2.2.基于嵌入式Linux视频采集模块的设计
在嵌入式Linux的内核定制和编译阶段,已经加入了对Video4Linux模块以及OV511设备的支持,所以运行在Linux下的视频图像采集程序,可以通过Video4Linux模块提供的编译接口(API)从OV511设备中获取图像帧。首先加载USB及OV511设备驱动模块,同时加载Video4Linux模块。分别使用命令:modprobe usbcor、modprobe usb-uhci、modprobe vodeodev和modprobe ov511。加载后将生成视频设备文件/dev/video0,为了和Video4Linux模块相协调,使用ln-s/dev/video0/dev/video为Video4Linux模块的默认视频设备voideo与物理视频设备video0建立连接。Video4Linux模块的视频采集接口设备为/dev/video,采集程序打开此接口设备并扫描 它以寻找自己所需要的数据。
视频图像压缩模块的设计
由视频采集模块获取的视频图像需要在以太网上传输,为了提高传输效率从而提高视频图像质量,则需要将原始的视频图像进行压缩编码。本系统采用先进的MPEG-4标准对视频图像进行压缩编码,在几种开放源代码的MPEG-4编码软件中,选择xvidcore作为本系统中视频图像压缩模块中的核心算法。对xvidcore-1.0.1进行交叉编译比较简单,有以下主要步骤。首先解压缩xvidcore源代码:tar-zxvf xvidcore-1.0.1.tar,其次是设置环境变量:export xvidcore="the path of xvidcore";cd $xvidcore/build/generic;再次是生成makefile:./configure-host=localhostbuild=arm-linux-gcc;然后编译源代码:make;make install;最后将交叉编译生成的库文件libxvidcore.so.*拷贝到交叉编译器工作目录的lib子目录中,该库文件为系统的其它模块提供了编程接口。
3.2.3.基于嵌入式Linux的网络视频流服务模块设计
在本设计中,数据在整个系统中是以流数据的形式存在的,Linux内核为流数据提供了一个标准的编程接口,这种接口为数据从外部设备经内核到达用户进程提供了一个全双工通道。在这个通道中,数据的处理模块是作为可选的中间件由用户动态加载的,上面设计的视频压缩模块就是这样的一个中间件。本系统主要是用于实时视频应用,所以需要系统提供对流式文件格式的支持,这样在接收方利用标准的流视频播放软件,如MMedia Player就可以观看实时传输的视频.在本系统中采用了开放的ASF流格式.压缩后的视频数据在传输前需要对其进行ASF编码。流视频协议是为了在客户机和视频服务器之间进行通信而设计和标准化的。根据它们的功能,与网络上流视频相关的协议分为三类。网络层协议:网络层协议提供了基本的网络服务支持。IP就是网络上流视频使用的网络协议。传输协议:传输协议为流服务提供端对端的网络传输功能。TCP、UDP、RTP和RTCP就是网络上流视频使用的传输协议。话路控制协议:话路控制协议定义消息和程序。RTSP就是一种话路控制协议。
在发送方的数据面,压缩且经过ASF编码的视频数据被读出并在RTP/RTCP/RTSP层上打包,以提供定时和同步信息以及包的序列号。然后把这些打包的RTP数据流发送到UDP/TCP层和IP层,得到的IP包在网络上传输。在接收方则按照相反的方向处理。在控制面,RTCP包和RTSP包在UDP/TCP层上复用,并且被送到IP层,以便通过网络传输。
4 应用的价值
本网络摄像机的设计方案,由于采用了MPEG-4编码标准,得到了较高的压缩比。经测试,在50Kbps~100Kbps的带宽下,对CIF(352×288,30fps)格式的视频有较好的表现能力,如果在进行实用化开发时,可以采用硬件压缩技术,压缩的性能将会更好。完全能够满足在目前宽带环境中的远程教学、网络视频会议以及视频监控的要求,特别是支持IPV6协议,在下一代网络中将会有十分广泛的应用。