基于嵌入式Linux的图像监控系统
2016-03-14安徽财经大学东校区曹海涛
安徽财经大学(东校区) 卢 骞 曹海涛
基于嵌入式Linux的图像监控系统
安徽财经大学(东校区) 卢 骞 曹海涛
在Linux环境下实现图像监控,服务器使用多生产者多消费者模型,同步了采集端的图片传输与客户端的图片获取操作,保证了数据传输的正确性、有序性、与完整性。使用动态多缓冲机制解决了,消费者消费速度过慢而引起的数据丢失问题。多播技术提高了网络数据传输速率,明显改善画面的卡顿现象。
生产者-消费者;动态缓冲区;多播;数据采集;同步;互斥
在本次项目中通过使用摄像头做为采集端,装有linux系统的pc做为服务端,另有客户端软件,以供用户实时观察布设采集端区域的画面。
在本项目中采集端与客户端的关系,为一对多,即多个客户端可以同时获取同一采集端采集到的画面信息。两者具有明显的生产者与消费者的关系。
关系较为复杂,可以逐步分解后,利用生产者消费者模型,进行建模。
1.每个采集端代表一个进程,可以将多个生产者的情况,分解为只有一个采集端的,最后在汇总求得多个采集端与多个客户端之间的对应关系,并用代码实现其功能
2.一个采集端与多个客户端,即为一个生产者多个消费者模型。将采集端采集到的每一帧画面压缩后,通过网络传输至服务端,并将此帧画面通过“多播”的形式,发送给每个请求该采集端的客户。此过程可能会出现播放不流畅、丢帧等问题。主要原因在于,生产者提供帧信息的速度大于消费者消费帧信息的速度,使得生产者的帧信息发生数据丢失。同时,多个消费者均需要获取同一帧信息,导致了消费者平均等待时间较长、画面播放不流畅。
问题解决方案:
1.通过增设动态缓冲区,使得生产者不会因消费速度过慢导致数据丢失。
2.通过使用多播技术提高数据传输速率,解决画面卡顿问题。
生产者消费者介绍:
生产者-消费者模型是现代操作系统中典型的进程同步互斥问题,大量的多线(进)程通信系统应用都可以抽象为该系统的不同形式根据生产者、消费者以及缓冲区的数量,此问题可以分为8类[1]:
(1)单个生产者、单个消费者、单个缓冲区
(2)单个生产者、单个消费者、多个缓冲区
(3)单个生产者、多个消费者、单个缓冲区
(4)单个生产者、多个消费者、多个缓冲区
(5)多个生产者、单个消费者、单个缓冲区
(6)多个生产者、单个消费者、多个缓冲区
(7)多个生产者、多个消费者、单个缓冲区
(8)多个生产者、多个消费者、多个缓冲区
生产者消费者模型的选取:
本次项目选择多生产者—多消费者模型,并建立动态多缓冲机制。为解决服务端中生产者数据丢失问题,可在内存中动态开辟缓冲区,并将缓冲数据的节点按序链接形成链表,并提供首尾指针分别供消费者和生产者使用。在服务端的一个线程中创建节点接收采集端发送的帧信息,接收完成后将此节点链接至链表尾部。在另一个线程中不断的读取链表首部的节点,将节点从链表首部取下,将head指针指向下一待消费的节点。并取出节点中的帧信息以多播的方式发送给多播组成员。在生产者、消费者线程中,对链表以及链表首尾指针的操作作为临界资源,必须互斥访问,以避免任何情况的竞争条件。
struct {/* data shared by producers and consumers */
struct DATA_NODE *head;
struct DATA_NODE *tail;
Sem_t mutex, nstored; /* semaphores, not pointers */
} shared;
void *produce(void *), *consume(void *);
数据传输方式介绍:
网络中的数据传输方式分为单播、广播和多播。单播设计为发送信息至某一指定主机,广播将数据包发送给同一网络中的所有主机,而多播实现了把数据包发送给分散在各个子网的多播组成员
单播是一种点对点的传输方式,在向多个目标发送同一信息时,要将信息拷贝多次后分别发送至目标。单播的方式避免了发送数据给不需要的主机,但拷贝每份信息并经过网络传输,占用了很高的带宽和资源,效率极低。
广播能够传送一个单独的数据流到整个子网,路由器和接线器传播广播。广播方式对主机资源开销不比单播大,但对网络资源占用极大,并可能引起广播风暴使得网络瘫痪。广播传播的消息只能在子网范围内,不能跨越子网传输。
多播是一种传播信息到多个组成员的方法。组成员接收数据包,其它成员过滤掉硬件层的多播信息。多播组成员通常比全部接受者的数量少的多,动态的多播接受者组可以迅速的建立和解散。
传输方式的选取:
本次项目中需要将一个采集端采集到的信息,发送给每一个选择该采集端的客户。单播方式占用服务端内存资源,增加网络负担,效率较低,会出现画面卡顿的现象。实际使用中客户端分散在各个子网中,广播方式限制较大,并会占用大量网络资源,存在广播风暴的风险。多播可较好的解决此问题,多播可以将同一数据流发送给多播组内的每个成员,对主机资源占用较少,减轻了网络负担,并且没有网络位置的限制。在编程实现中,根据客户端的选择将客户端ip分入不同的多播组,采集到的图片帧通过多播方式发送给多播组成员。
结论:
生产者消费者模型使用广泛,在实际应用中,要根据具体的应用需求,选择合适的生消模型以系统中的同步问题。动态多缓冲机制可将效率较低的同步操作,转化为具有整体同步效果的异步操作,大大增加了实际通信效率。在网络编程中,发送相同数据包至多个目标主机,优先考虑多播技术。多播对主机资源占用较少,减轻了网络负担,并且没有网络位置的限制。
[1]李晓宇.操作系统中并发进程的生产者-消费者问题的研究[J].许昌学院学报,32(2):52-56.
项目来源:本文系安徽财经大学大学生科研创新基金项目研究成果,项目编号:XSKY1609ZD;安徽财经大学大学生创新创业计划项目研究成果,项目编号:201510378531。