李賢軍
安徽四創(chuàng)電子股份有限公司,安徽合肥 230088
基于信號量的視頻監(jiān)控API設(shè)計與實現(xiàn)
李賢軍
安徽四創(chuàng)電子股份有限公司,安徽合肥 230088
隨著平安城市不斷推進(jìn),視頻監(jiān)控成為國家建設(shè)的重點。在視頻監(jiān)控中,監(jiān)控客戶端為重要的組成部分,所有視頻、錄像都要通過客戶端進(jìn)行調(diào)閱查看,可見穩(wěn)定高效的視頻監(jiān)控客戶端的接口(API)設(shè)計是比較重要的。從目前來看,各視頻廠家提供視頻API各不相同,或多或少都存在著一些問題,使用不習(xí)慣;而且,由于國內(nèi)專業(yè)技術(shù)封閉不公開,對于視頻監(jiān)控API的設(shè)計也沒有太多相關(guān)關(guān)鍵的資料可循。本文以信號量技術(shù)為核心基礎(chǔ),提供了一套視頻監(jiān)控API設(shè)計方案,并予以實現(xiàn),以促進(jìn)視頻監(jiān)控客戶端穩(wěn)定性和高效性。
信號量;視頻監(jiān)控;API;多線程
在軟件開發(fā)中,我們常用到計算機(jī)的各種技術(shù),其中一種就是多線程(或進(jìn)程)互斥與同步。對于不同的操作系統(tǒng),線程的互斥與同步實現(xiàn)方式各不相同,對于windows和Linux系統(tǒng)都有如下方式:消息隊列、信號量和共享內(nèi)存,其中信號量是在控制多線程同步中使用比較多一種方式。信號量是一個整數(shù):大于或等于0時代表可供并發(fā)進(jìn)程使用的資源實體數(shù);小于0時代表正在等待使用臨界區(qū)的進(jìn)程數(shù);用于互斥的信號量初始值應(yīng)大于0。在視頻監(jiān)控API開發(fā)中,我們經(jīng)常需要同時操作、或者快速操作某一功能(如視頻播放、視頻控制、云臺控制等),此時會在短時間內(nèi)進(jìn)行很多次操作,并且所有的操作都需要通過網(wǎng)絡(luò)與服務(wù)器進(jìn)行交互。將信號量結(jié)合到視頻API設(shè)計實現(xiàn)中,利用信號量特點,控制多線程并發(fā)將操作指令按操作順序發(fā)送出去,并異步等待接收操作結(jié)果。
通用的視頻監(jiān)控客戶端API設(shè)計的基本邏輯組成,包括:對外接口、視頻管理、視頻設(shè)備管理服務(wù)器和視頻服務(wù)器。對外接口,是直接面向用戶使用的接口,如登陸、退出、實時視頻播放與停止、云臺控制、錄像查閱與點播控制等;視頻設(shè)備管理服務(wù)器,是負(fù)責(zé)所有設(shè)備管理和與客戶端交互的服務(wù)端,處理一切客戶的請求;視頻服務(wù)器,為流媒體服務(wù)器,負(fù)責(zé)監(jiān)控攝像頭的視頻流轉(zhuǎn)發(fā),以供客戶端點播;視頻管理模塊,為視頻監(jiān)控API設(shè)計中最為核心部分,負(fù)責(zé)對外接口、視頻設(shè)備管理服務(wù)器以及視頻服務(wù)器之間的一切邏輯管理,包括有多線程控制、網(wǎng)絡(luò)通信、服務(wù)連接管理、視頻連接管理、事務(wù)管理等。
對外接口和視頻管理模塊為本文視頻監(jiān)控API主要部分,尤其對于視頻管理部分設(shè)計是非常重要的,該部分設(shè)計的優(yōu)良,關(guān)乎整個視頻監(jiān)控API穩(wěn)定性與高效性。以下內(nèi)容著重結(jié)合使用信號量技術(shù),來設(shè)計實現(xiàn)視頻管理模塊。

圖1
信號量為視頻管理模塊設(shè)計中重要應(yīng)用部分,是同步各個線程的關(guān)鍵。如圖1所示,在視頻監(jiān)控API設(shè)計中,將所有客戶端每一個請求的指令轉(zhuǎn)為標(biāo)準(zhǔn)的事務(wù),再結(jié)合信號量的變量,在這里我們將結(jié)合信號量的事務(wù)為一個任務(wù)。在請求時,生成的任何一個任務(wù)都有一個唯一的遞增的編號ID,同時也是一個操作序列號,表示操作的先后順序,請求通常在一個線程中,在通過網(wǎng)絡(luò)向服務(wù)器發(fā)送信息之前,初始化信號量為無信號狀態(tài),此時調(diào)用任務(wù)發(fā)送信息并同時置信號量為定時等待狀態(tài)。在等待服務(wù)器返回過程中,利用信號量特點,控制線程間安全,可以同時并發(fā)多個請求,此時各個接口的調(diào)
用是線程安全的,客戶端可以同時調(diào)用當(dāng)前接口或其他接口,以快速完成其他指令的調(diào)用,避免了客戶端由于網(wǎng)絡(luò)原因,或服務(wù)器處理慢等原因出現(xiàn)時間上累積等待響應(yīng)問題,最終導(dǎo)致客戶端崩潰。
在客戶端發(fā)出信息以后,為避免由于各種異常請求無法返回原因,信號量統(tǒng)一采用的是定時等待,在固定的時間內(nèi)如果服務(wù)器對于請求依然沒有反饋,信號量會自動產(chǎn)生信號,讓等待以超時的形式觸發(fā),終止客戶端的等待狀態(tài),相應(yīng)的任務(wù)也會終止移除;如果,服務(wù)器對于客戶的請求在指定的時間內(nèi)返回,此時在返回的線程中,會根據(jù)返回信息的編號ID找到對應(yīng)的任務(wù),賦予反饋信息,并觸發(fā)等待線程的信號量,讓請求返回,終止并移除 任務(wù)。
在視頻監(jiān)控API設(shè)計中,為了完善整個API的設(shè)計,一般還需要:認(rèn)證授權(quán)、視頻協(xié)議、視頻播放連接管理、加解密、網(wǎng)絡(luò)通信、以及多線程和日志記錄等模塊相互協(xié)作。
為視頻監(jiān)控API 各個模塊相互關(guān)系圖,在圖中虛線部分為信號量的應(yīng)用組成,連接著所有模塊,為關(guān)鍵的樞紐,負(fù)責(zé)完成了指令傳送與接收、保持服務(wù)連接、和重建視頻連接等重要功能。
本文提供了一種基于信號量的視頻監(jiān)控客戶端API設(shè)計實現(xiàn)的解決方案,詳細(xì)講述了信號量在API中應(yīng)用的方法,并設(shè)計了整個API邏輯框架,實現(xiàn)了視頻監(jiān)控客戶端API多線程多并發(fā)的穩(wěn)定 調(diào)用。
[1]王楊,朱朝霞.基于信號量的Linux多線程同步研究[J].計算機(jī)與數(shù)字工程,2004.
[2]劉曉平,等.基于信號量的生產(chǎn)者一消費者問題設(shè)計與分析[J].合肥工業(yè)大學(xué)學(xué)報,2008(10).
[3]百度文庫.http://wenku.baidu.com.
G2
A
2096-0360(2015)14-0023-01
李賢軍,工作單位為安徽四創(chuàng)電子股份有限公司。