APP下载

基于嵌入式Linux的图像监控系统

2016-03-14安徽财经大学东校区曹海涛

电子世界 2016年17期
关键词:多播链表发送给

安徽财经大学(东校区) 卢 骞 曹海涛

基于嵌入式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。

猜你喜欢

多播链表发送给
胖树拓扑中高效实用的定制多播路由算法
用于超大Infiniband网络的负载均衡多播路由
InfiniBand中面向有限多播表条目数的多播路由算法
基于二进制链表的粗糙集属性约简
【微信小课堂】:如何向好友发送语音
跟麦咭学编程
网络编码与家族体系下的可靠多播方案
基于MTF规则的非阻塞自组织链表
你说我说大家说
C++的基于函数模板实现单向链表