安徽財(cái)經(jīng)大學(xué)(東校區(qū)) 盧 騫 曹海濤
基于嵌入式Linux的圖像監(jiān)控系統(tǒng)
安徽財(cái)經(jīng)大學(xué)(東校區(qū)) 盧 騫 曹海濤
在Linux環(huán)境下實(shí)現(xiàn)圖像監(jiān)控,服務(wù)器使用多生產(chǎn)者多消費(fèi)者模型,同步了采集端的圖片傳輸與客戶端的圖片獲取操作,保證了數(shù)據(jù)傳輸?shù)恼_性、有序性、與完整性。使用動(dòng)態(tài)多緩沖機(jī)制解決了,消費(fèi)者消費(fèi)速度過(guò)慢而引起的數(shù)據(jù)丟失問(wèn)題。多播技術(shù)提高了網(wǎng)絡(luò)數(shù)據(jù)傳輸速率,明顯改善畫面的卡頓現(xiàn)象。
生產(chǎn)者-消費(fèi)者;動(dòng)態(tài)緩沖區(qū);多播;數(shù)據(jù)采集;同步;互斥
在本次項(xiàng)目中通過(guò)使用攝像頭做為采集端,裝有l(wèi)inux系統(tǒng)的pc做為服務(wù)端,另有客戶端軟件,以供用戶實(shí)時(shí)觀察布設(shè)采集端區(qū)域的畫面。
在本項(xiàng)目中采集端與客戶端的關(guān)系,為一對(duì)多,即多個(gè)客戶端可以同時(shí)獲取同一采集端采集到的畫面信息。兩者具有明顯的生產(chǎn)者與消費(fèi)者的關(guān)系。
關(guān)系較為復(fù)雜,可以逐步分解后,利用生產(chǎn)者消費(fèi)者模型,進(jìn)行建模。
1.每個(gè)采集端代表一個(gè)進(jìn)程,可以將多個(gè)生產(chǎn)者的情況,分解為只有一個(gè)采集端的,最后在匯總求得多個(gè)采集端與多個(gè)客戶端之間的對(duì)應(yīng)關(guān)系,并用代碼實(shí)現(xiàn)其功能
2.一個(gè)采集端與多個(gè)客戶端,即為一個(gè)生產(chǎn)者多個(gè)消費(fèi)者模型。將采集端采集到的每一幀畫面壓縮后,通過(guò)網(wǎng)絡(luò)傳輸至服務(wù)端,并將此幀畫面通過(guò)“多播”的形式,發(fā)送給每個(gè)請(qǐng)求該采集端的客戶。此過(guò)程可能會(huì)出現(xiàn)播放不流暢、丟幀等問(wèn)題。主要原因在于,生產(chǎn)者提供幀信息的速度大于消費(fèi)者消費(fèi)幀信息的速度,使得生產(chǎn)者的幀信息發(fā)生數(shù)據(jù)丟失。同時(shí),多個(gè)消費(fèi)者均需要獲取同一幀信息,導(dǎo)致了消費(fèi)者平均等待時(shí)間較長(zhǎng)、畫面播放不流暢。
問(wèn)題解決方案:
1.通過(guò)增設(shè)動(dòng)態(tài)緩沖區(qū),使得生產(chǎn)者不會(huì)因消費(fèi)速度過(guò)慢導(dǎo)致數(shù)據(jù)丟失。
2.通過(guò)使用多播技術(shù)提高數(shù)據(jù)傳輸速率,解決畫面卡頓問(wèn)題。
生產(chǎn)者消費(fèi)者介紹:
生產(chǎn)者-消費(fèi)者模型是現(xiàn)代操作系統(tǒng)中典型的進(jìn)程同步互斥問(wèn)題,大量的多線(進(jìn))程通信系統(tǒng)應(yīng)用都可以抽象為該系統(tǒng)的不同形式根據(jù)生產(chǎn)者、消費(fèi)者以及緩沖區(qū)的數(shù)量,此問(wèn)題可以分為8類[1]:
(1)單個(gè)生產(chǎn)者、單個(gè)消費(fèi)者、單個(gè)緩沖區(qū)
(2)單個(gè)生產(chǎn)者、單個(gè)消費(fèi)者、多個(gè)緩沖區(qū)
(3)單個(gè)生產(chǎn)者、多個(gè)消費(fèi)者、單個(gè)緩沖區(qū)
(4)單個(gè)生產(chǎn)者、多個(gè)消費(fèi)者、多個(gè)緩沖區(qū)
(5)多個(gè)生產(chǎn)者、單個(gè)消費(fèi)者、單個(gè)緩沖區(qū)
(6)多個(gè)生產(chǎn)者、單個(gè)消費(fèi)者、多個(gè)緩沖區(qū)
(7)多個(gè)生產(chǎn)者、多個(gè)消費(fèi)者、單個(gè)緩沖區(qū)
(8)多個(gè)生產(chǎn)者、多個(gè)消費(fèi)者、多個(gè)緩沖區(qū)
生產(chǎn)者消費(fèi)者模型的選?。?/p>
本次項(xiàng)目選擇多生產(chǎn)者—多消費(fèi)者模型,并建立動(dòng)態(tài)多緩沖機(jī)制。為解決服務(wù)端中生產(chǎn)者數(shù)據(jù)丟失問(wèn)題,可在內(nèi)存中動(dòng)態(tài)開(kāi)辟緩沖區(qū),并將緩沖數(shù)據(jù)的節(jié)點(diǎn)按序鏈接形成鏈表,并提供首尾指針?lè)謩e供消費(fèi)者和生產(chǎn)者使用。在服務(wù)端的一個(gè)線程中創(chuàng)建節(jié)點(diǎn)接收采集端發(fā)送的幀信息,接收完成后將此節(jié)點(diǎn)鏈接至鏈表尾部。在另一個(gè)線程中不斷的讀取鏈表首部的節(jié)點(diǎn),將節(jié)點(diǎn)從鏈表首部取下,將head指針指向下一待消費(fèi)的節(jié)點(diǎn)。并取出節(jié)點(diǎn)中的幀信息以多播的方式發(fā)送給多播組成員。在生產(chǎn)者、消費(fèi)者線程中,對(duì)鏈表以及鏈表首尾指針的操作作為臨界資源,必須互斥訪問(wèn),以避免任何情況的競(jìng)爭(zhēng)條件。
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 *);
數(shù)據(jù)傳輸方式介紹:
網(wǎng)絡(luò)中的數(shù)據(jù)傳輸方式分為單播、廣播和多播。單播設(shè)計(jì)為發(fā)送信息至某一指定主機(jī),廣播將數(shù)據(jù)包發(fā)送給同一網(wǎng)絡(luò)中的所有主機(jī),而多播實(shí)現(xiàn)了把數(shù)據(jù)包發(fā)送給分散在各個(gè)子網(wǎng)的多播組成員
單播是一種點(diǎn)對(duì)點(diǎn)的傳輸方式,在向多個(gè)目標(biāo)發(fā)送同一信息時(shí),要將信息拷貝多次后分別發(fā)送至目標(biāo)。單播的方式避免了發(fā)送數(shù)據(jù)給不需要的主機(jī),但拷貝每份信息并經(jīng)過(guò)網(wǎng)絡(luò)傳輸,占用了很高的帶寬和資源,效率極低。
廣播能夠傳送一個(gè)單獨(dú)的數(shù)據(jù)流到整個(gè)子網(wǎng),路由器和接線器傳播廣播。廣播方式對(duì)主機(jī)資源開(kāi)銷不比單播大,但對(duì)網(wǎng)絡(luò)資源占用極大,并可能引起廣播風(fēng)暴使得網(wǎng)絡(luò)癱瘓。廣播傳播的消息只能在子網(wǎng)范圍內(nèi),不能跨越子網(wǎng)傳輸。
多播是一種傳播信息到多個(gè)組成員的方法。組成員接收數(shù)據(jù)包,其它成員過(guò)濾掉硬件層的多播信息。多播組成員通常比全部接受者的數(shù)量少的多,動(dòng)態(tài)的多播接受者組可以迅速的建立和解散。
傳輸方式的選?。?/p>
本次項(xiàng)目中需要將一個(gè)采集端采集到的信息,發(fā)送給每一個(gè)選擇該采集端的客戶。單播方式占用服務(wù)端內(nèi)存資源,增加網(wǎng)絡(luò)負(fù)擔(dān),效率較低,會(huì)出現(xiàn)畫面卡頓的現(xiàn)象。實(shí)際使用中客戶端分散在各個(gè)子網(wǎng)中,廣播方式限制較大,并會(huì)占用大量網(wǎng)絡(luò)資源,存在廣播風(fēng)暴的風(fēng)險(xiǎn)。多播可較好的解決此問(wèn)題,多播可以將同一數(shù)據(jù)流發(fā)送給多播組內(nèi)的每個(gè)成員,對(duì)主機(jī)資源占用較少,減輕了網(wǎng)絡(luò)負(fù)擔(dān),并且沒(méi)有網(wǎng)絡(luò)位置的限制。在編程實(shí)現(xiàn)中,根據(jù)客戶端的選擇將客戶端ip分入不同的多播組,采集到的圖片幀通過(guò)多播方式發(fā)送給多播組成員。
結(jié)論:
生產(chǎn)者消費(fèi)者模型使用廣泛,在實(shí)際應(yīng)用中,要根據(jù)具體的應(yīng)用需求,選擇合適的生消模型以系統(tǒng)中的同步問(wèn)題。動(dòng)態(tài)多緩沖機(jī)制可將效率較低的同步操作,轉(zhuǎn)化為具有整體同步效果的異步操作,大大增加了實(shí)際通信效率。在網(wǎng)絡(luò)編程中,發(fā)送相同數(shù)據(jù)包至多個(gè)目標(biāo)主機(jī),優(yōu)先考慮多播技術(shù)。多播對(duì)主機(jī)資源占用較少,減輕了網(wǎng)絡(luò)負(fù)擔(dān),并且沒(méi)有網(wǎng)絡(luò)位置的限制。
[1]李曉宇.操作系統(tǒng)中并發(fā)進(jìn)程的生產(chǎn)者-消費(fèi)者問(wèn)題的研究[J].許昌學(xué)院學(xué)報(bào),32(2):52-56.
項(xiàng)目來(lái)源:本文系安徽財(cái)經(jīng)大學(xué)大學(xué)生科研創(chuàng)新基金項(xiàng)目研究成果,項(xiàng)目編號(hào):XSKY1609ZD;安徽財(cái)經(jīng)大學(xué)大學(xué)生創(chuàng)新創(chuàng)業(yè)計(jì)劃項(xiàng)目研究成果,項(xiàng)目編號(hào):201510378531。