在远程监控系统的应用中,往往要求监控中心的主机可以同时接收一路或多路监控数据,并且可以同时发送一路或多路的控制指令。因此,如何在有限带宽的前提条件下,将多个现场的监控数据方便、高效地通过计算机网络传送到监控主机上,是该类系统要解决的主要问题。
系统整体结构
为了实现一个基于TCP/IP网络的嵌入式远程数字视频监控系统。
摄像机通过RS-232接口受外界控制,控制命令为一系列的ASCII码,可以调整摄像头的焦距和控制云台的转动。嵌入式硬编码板也有一个RS-232接口,可通过它设置信源制式(PAL/NTSC)、编码亮度、编码色度、音频速率、编码音量和编码速率。编码板与网络服务器集成到一个机箱里,编码板通过PCI接口向网络服务器输出数据。网络服务器有多个RS-232接口,分别与摄像机和硬编码板上的RS-232接口相连。
播放设备由嵌入式硬解码板和电视机组成。解码板采用速率自适应方式设计,解码速率自动匹配远端编码器的编码速率。解码板和网络服务器同样集成在一个机箱里。该系统还实现了软解码方式,在这种方式中,播放设备由一台安装了视频采集卡的PC机构成,其上运行解码软件和媒体播放器,通过PC机的显示器和音箱输出图像和声音。
系统的记录设备由硬盘录像机构成,安放于显示点一侧,用来存储系统图像。
控制台由一台运行Windows2000操作系统的PC机实现,PC机上运行客户端的控制软件。管理服务器也由一台运行Windows2000操作系统的PC机实现,PC机上运行系统管理软件。在简化的系统实现中,管理服务器和控制台可以在同一台PC机上实现,在这种情况下,管理软件和控制软件运行在同一台主机上,但仍然通过网络接口通信。
系统硬件设计
网络服务器是系统硬件的核心部件,它由运行嵌入式操作系统的嵌入式计算机构成,在嵌入式操作系统之上运行着系统的核心软件。
网络服务器采用的是基于ARM 内核的CPU——S3C44B0X。该芯片是一款基于ARM 7TDMI RISC芯片。它一方面具有ARM处理器的:低功耗、高性能等优点;同时又具有丰富的片上资源,非常适合嵌入式产品的开发。
MPEG-4多媒体编码芯片则采用韩国INTIME公司生产的IME6400,该芯片提供了丰富的外围硬件接口:支持CCIR601建议的16Bit视频解码器接口、32Bit数据、81MHz的SDRAM数据总线接口、I2C总线接口、I2S外部音频/PCM编码器/DSP接口以及灵活的主机接口,可以支持多种类型的CPU。
MPEG-4硬件视频压缩处理的结构和网络接口。MPEG-4视频采集压缩模块以IME6400芯片为核心,完成对标准视频信号(PAL或NTSC信号)的A/D转换、MPEG-4压缩以及与S3C44B0X之间的通信功能。图2中视频解码ADC把从摄像头输入的模拟视频信号转化为数字视频信号,然后进行编码预处理,即把视频解码输出的CCIR601格式的信号转化为编码器可以处理的CIF或QCIF格式,然后再进行MPEG-4压缩编码。S3C44B0X上的软件则通过总线接口单元来控制编码器的参数设置和读取编码压缩后的码流数据。视频数据处理模块包括以下功能单元:以BT829为核心的视频ADC单元;以IME6400为核心的MPEG-4视频压缩单元;以S3C44B0X 为核心构成的控制逻辑和总线接口单元。总线接口单元是视频数据处理模块与S3C44B0X进行交互的通道,可以和主机进行视频码流和控制数据的交换。控制逻辑是视频采集压缩模块的核心,它控制并协调各模块工作,提供控制信号,通过指令实现系统各模块所需要的选通、缓冲、读/写使能、数据总线和地址总线的切换等等。
镜头云台控制是通过S3C44B0X上的RS-232口进行的,允许用户根据自己的要求调节系统。用户可以通过调节镜头的景深、焦距以及光圈来调整图像质量,还可以通过云台的上下左右调节来获取不同角度的图像。由监控中心的客户机端软件通过SOCKET网络接口,把调整信息发送给服务器端,服务器接收到控制指令后,进行指令识别,然后向对应的RS-232口发送指令去控制云台,完成调整任务。
视频数据发送、指令控制模块的设计与实现
监控现场主机通过视频数据发送模块,将现场采集到的视频流数据经过编码后,以IP 组播的形式通过计算机网络发送出去。对于发送来的视频数据,运行在监控中心主机端的视频数据接收播放模块一方面可以将其保存起来,作为资料库便于以后查询及回放;另一方面还可以实时播放出来。
本系统的软件结构采用了客户机服务器结构,两端通过网络建立TCP/IP连接,按照自定义的数据通信协议交换数据,完成数据通信和系统控制功能。监控中心的客户端向服务器端申请建立连接,服务器监听到连接请求之后,和客户端建立SOCKET连接,客户端向服务器发送控制信号,服务器端向客户端发送视频码流。
服务器端软件运行在S3C44B0X上,软件设计的主要思想如下:读取线程、发送线程和控制线程之间的同步,防止有限资源的浪费。
为了充分利用CPU计算能力,提高系统的整体性能,在该系统中采用多线程技术实现任务的调度。
考虑到监控中心主机要同时监控多个现场,需要加入多个组播组的情况。我们在设计系统时要求监控中心端在接收视频数据前应向相应的监控现场发送数据请求。为此,我们要建立两个通讯通道:一个是控制通道,一个为数据通道。控制通道用来在发送端和接收端之间建立会话,包括发送一些数据请求和确认控制等信息。接收端在接收视频流数据前先向相应的发送端发送数据请求,发送端在接收到数据请求后向接收端发回相应的IP 组播地址和端口,接收端则加入该组接收视频流数据。为了保证这些控制信息准确无误地到达对方,对于控制通道我们选择可靠性较高的TCP 协议。数据通道用于视频流数据的通信,我们选用VxWorks IP组播组来实现。这两个通讯通道互不相关,各自执行自己的任务。
视频数据发送模块的设计
在视频传输中,服务器端要求码流读取和发送互不干扰,避免读取和发送相互等待或者相互冲突的情况出现。同样,在客户端解码和接收也存在这个关系,我们可以采用任务间的通信功能来协调多个独立任务间的活动。VxWorks提供了一套丰富的任务间通信机制,包括共享内存、信号量、消息队列和管道等等。任务间通信最直接、最明显的方法是访问共享数据结构。由于所有VxWorks任务共存单一的线性地址空间,在多个任务间共享数据结构是非常容易的,任一程序中定义的各种类型的全局变量,都可以被所有任务直接访问。
由于实时组播的视频流来自于MPEG-4编码器,所以首先要从编码器中获得视频数据,这主要通过访问编码器所提供的I/O端口来完成。本设计采用了一种基于环形缓冲区的多任务视频传输技术,较好的解决了码流读取和发送互不干扰的问题。系统的环形缓冲区除了达到数据分离互斥作用外,还可以起到平滑码流的作用。读取任务和发送任务是互斥的关系,读取任务一次从编码模块中读入4K的视频数据供发送任务处理。在读取时为了避免竞争,使用信号量对该环形缓冲区进行上锁,以保证访问的互斥进行。发送任务的访问环形缓冲区的情况也类似。通过利用环形缓冲区和互斥锁完全可以解决这两个任务的同步问题。
指令控制模块的设计
系统定义了自己的指令系统和指令传输协议。指令可以分为以下几类:工作控制(传输开始、传输停止、存储控制等);镜头云台控制(焦距、光圈、自动转动等);系统设置(用户管理、通信参数设置等),每条指令前面都有其唯一的识别标志,服务器接收到后可以用来和其它指令进行区分。
多路复用的输入/输出模型Select函数可以实现高效的管理套接字。使用工作在无阻塞方式的套接字,在一定程度上提高了程序的效率(与阻塞套接字相比)。但是,程序需要不断的轮询各个套接字描述符的情况,这浪费了大量的CPU时间。如果进程不是主动地轮询套接字的情况,而是将希望监视的套接字向系统进行登记,而后采取被动的态度等待,当套接字上发生了某些事件后,系统再以某种方式通知进程,接着进程去检测套接字的情况,发现对应的事件并进行处理。在这种工作方式下,进程是在已经知道在套接字上发生了事件时,才对套接字进行检测,而在没有事件的情况下,进程将睡眠,所以这种工作方式节省了大量的CPU时间,对于资源本来就非常紧张的系统,可以大大提高系统的整体性能。
MPEG-4
|