基于网络的嵌入式MPEG-2远程视频监控系统的实现( 二 )


三、系统软件设计
传统的应用程序都是单线程的,即在程序运行期间,由单个线程独占CPU的任务 。在这种情况下,程序在执行一些比较费时的任务时,负责执行所有任务时,就无法及时响应用户的操作,影响了应用程序的实时性能 。在监控系统,非凡是远程监控系统中,应用程序往往不但要及时把监控对象的最新信息反馈给监视客户(通过图形显示),还要处理本地机与远程机之间的通信以及对控制对象的实时控制等任务,这时,仅仅由单个线程来完成所有任务,显然无法满足监控系统的实时性要求 。为此,可引进多线程机制,主线程专门负责消息的响应,使程序能够响应命令和其他事件 。辅助线程可以用于完成其他比较费时的工作,如通信、图形显示和后台打印等,这样就不至于影响主线程的运行 。总之,把多线程机制引进通信,有利于提高应用程序的实时性,充分利用系统资源 。对于大型的工程应用来说,不同的线程完成不同的任务,也有利于提高程序的模块化,便于维护和扩展 。
软件结构采用了Client/Server结构,两端通过网络建立TCP/IP连接,按照自定义的数据通信协议交换数据,完成数据通信和系统控制的功能 。监控中心的客户端向服务器端申请建立连接,服务器监听到连接请求之后,和客户端建立SOCKET连接,客户端向服务器发送控制信号,服务器端向客户端发送视频码流 。
Server端软件运行在PC104上,编码部分由于采用了硬件压缩,不占用PC104的系统资源,所以合理设计PC104上运行的服务器软件的结构对于提高整个系统的工作效率有着重要的意义,系统性能也与它密切相关 。软件设计的主要思想如下:读取线程、发送线程和控制线程之间的同步,防止有限资源的浪费 。
在分析控制指令、码流读入、发送传输的处理过程中,可能会存在时间冗余 。以读取码流为例,系统从EPLD的FIFO中读取视频数据,假如CPU读取的速度比编码器的速度快,可能会处于等待的编码器硬件响应状态 。此时虽然CPU被占用,但是实际上系统没执行有效的任务,造成计算机系统资源的浪费,而嵌入式系统的资源本来就非常紧张 。为了充分利用CPU计算能力,提高系统的整体性能,在该系统中采用多线程技术实现任务的调度,现以远程现场数据处理过程为例分析 。
1.读取线程 。负责控制硬件,从编码器中读取图像数据到主机内存;
2.发送线程 。负责视频码流的传输;
3.控制线程 。负责云台/摄像头的控制以及编码器的参数设置 。
视频传输中,在服务器端要求码流读取和发送互不干扰,以避免读取和发送相互等待或者相互冲突的情况出现,同样在客户端解码和接收也存在这个关系 。本设计采用了一种基于环形缓冲区的多线程视频传输技术,较好地解决了这个问题 。主机的环形缓冲区除了达到数据分离互斥作用外,还可以起到平滑码流的作用 。读取线程和发送线程是互斥关系,读入的视频数据供传输线程处理,这是一个简单的消费者和生产者的关系问题,只要不进入临界区,两个线程可以同时工作,用环形缓冲区和互斥锁完全可以解决这两个线程度同步问题 。线程之间通过同步实现了CPU时间片的合理分配、硬件访问治理以及内存缓冲区的访问治理等等,大大的提高了该系统的处理性能 。
Client端提供用户的控制接口,用户通过它要求各种服务 。用户可以连接到服务主机,按照自己的要求改变系统的工作方式和工作状态 。最高权限可以调整Server端的工作方式,修改系统的治理信息,获取所有不同类型的服务 。

推荐阅读