李賢軍
安徽四創(chuàng)電子股份有限公司,安徽合肥 230088
基于信號(hào)量的視頻監(jiān)控API設(shè)計(jì)與實(shí)現(xiàn)
李賢軍
安徽四創(chuàng)電子股份有限公司,安徽合肥 230088
隨著平安城市不斷推進(jìn),視頻監(jiān)控成為國(guó)家建設(shè)的重點(diǎn)。在視頻監(jiān)控中,監(jiān)控客戶端為重要的組成部分,所有視頻、錄像都要通過(guò)客戶端進(jìn)行調(diào)閱查看,可見穩(wěn)定高效的視頻監(jiān)控客戶端的接口(API)設(shè)計(jì)是比較重要的。從目前來(lái)看,各視頻廠家提供視頻API各不相同,或多或少都存在著一些問(wèn)題,使用不習(xí)慣;而且,由于國(guó)內(nèi)專業(yè)技術(shù)封閉不公開,對(duì)于視頻監(jiān)控API的設(shè)計(jì)也沒有太多相關(guān)關(guān)鍵的資料可循。本文以信號(hào)量技術(shù)為核心基礎(chǔ),提供了一套視頻監(jiān)控API設(shè)計(jì)方案,并予以實(shí)現(xiàn),以促進(jìn)視頻監(jiān)控客戶端穩(wěn)定性和高效性。
信號(hào)量;視頻監(jiān)控;API;多線程
在軟件開發(fā)中,我們常用到計(jì)算機(jī)的各種技術(shù),其中一種就是多線程(或進(jìn)程)互斥與同步。對(duì)于不同的操作系統(tǒng),線程的互斥與同步實(shí)現(xiàn)方式各不相同,對(duì)于windows和Linux系統(tǒng)都有如下方式:消息隊(duì)列、信號(hào)量和共享內(nèi)存,其中信號(hào)量是在控制多線程同步中使用比較多一種方式。信號(hào)量是一個(gè)整數(shù):大于或等于0時(shí)代表可供并發(fā)進(jìn)程使用的資源實(shí)體數(shù);小于0時(shí)代表正在等待使用臨界區(qū)的進(jìn)程數(shù);用于互斥的信號(hào)量初始值應(yīng)大于0。在視頻監(jiān)控API開發(fā)中,我們經(jīng)常需要同時(shí)操作、或者快速操作某一功能(如視頻播放、視頻控制、云臺(tái)控制等),此時(shí)會(huì)在短時(shí)間內(nèi)進(jìn)行很多次操作,并且所有的操作都需要通過(guò)網(wǎng)絡(luò)與服務(wù)器進(jìn)行交互。將信號(hào)量結(jié)合到視頻API設(shè)計(jì)實(shí)現(xiàn)中,利用信號(hào)量特點(diǎn),控制多線程并發(fā)將操作指令按操作順序發(fā)送出去,并異步等待接收操作結(jié)果。
通用的視頻監(jiān)控客戶端API設(shè)計(jì)的基本邏輯組成,包括:對(duì)外接口、視頻管理、視頻設(shè)備管理服務(wù)器和視頻服務(wù)器。對(duì)外接口,是直接面向用戶使用的接口,如登陸、退出、實(shí)時(shí)視頻播放與停止、云臺(tái)控制、錄像查閱與點(diǎn)播控制等;視頻設(shè)備管理服務(wù)器,是負(fù)責(zé)所有設(shè)備管理和與客戶端交互的服務(wù)端,處理一切客戶的請(qǐng)求;視頻服務(wù)器,為流媒體服務(wù)器,負(fù)責(zé)監(jiān)控?cái)z像頭的視頻流轉(zhuǎn)發(fā),以供客戶端點(diǎn)播;視頻管理模塊,為視頻監(jiān)控API設(shè)計(jì)中最為核心部分,負(fù)責(zé)對(duì)外接口、視頻設(shè)備管理服務(wù)器以及視頻服務(wù)器之間的一切邏輯管理,包括有多線程控制、網(wǎng)絡(luò)通信、服務(wù)連接管理、視頻連接管理、事務(wù)管理等。
對(duì)外接口和視頻管理模塊為本文視頻監(jiān)控API主要部分,尤其對(duì)于視頻管理部分設(shè)計(jì)是非常重要的,該部分設(shè)計(jì)的優(yōu)良,關(guān)乎整個(gè)視頻監(jiān)控API穩(wěn)定性與高效性。以下內(nèi)容著重結(jié)合使用信號(hào)量技術(shù),來(lái)設(shè)計(jì)實(shí)現(xiàn)視頻管理模塊。
圖1
信號(hào)量為視頻管理模塊設(shè)計(jì)中重要應(yīng)用部分,是同步各個(gè)線程的關(guān)鍵。如圖1所示,在視頻監(jiān)控API設(shè)計(jì)中,將所有客戶端每一個(gè)請(qǐng)求的指令轉(zhuǎn)為標(biāo)準(zhǔn)的事務(wù),再結(jié)合信號(hào)量的變量,在這里我們將結(jié)合信號(hào)量的事務(wù)為一個(gè)任務(wù)。在請(qǐng)求時(shí),生成的任何一個(gè)任務(wù)都有一個(gè)唯一的遞增的編號(hào)ID,同時(shí)也是一個(gè)操作序列號(hào),表示操作的先后順序,請(qǐng)求通常在一個(gè)線程中,在通過(guò)網(wǎng)絡(luò)向服務(wù)器發(fā)送信息之前,初始化信號(hào)量為無(wú)信號(hào)狀態(tài),此時(shí)調(diào)用任務(wù)發(fā)送信息并同時(shí)置信號(hào)量為定時(shí)等待狀態(tài)。在等待服務(wù)器返回過(guò)程中,利用信號(hào)量特點(diǎn),控制線程間安全,可以同時(shí)并發(fā)多個(gè)請(qǐng)求,此時(shí)各個(gè)接口的調(diào)
用是線程安全的,客戶端可以同時(shí)調(diào)用當(dāng)前接口或其他接口,以快速完成其他指令的調(diào)用,避免了客戶端由于網(wǎng)絡(luò)原因,或服務(wù)器處理慢等原因出現(xiàn)時(shí)間上累積等待響應(yīng)問(wèn)題,最終導(dǎo)致客戶端崩潰。
在客戶端發(fā)出信息以后,為避免由于各種異常請(qǐng)求無(wú)法返回原因,信號(hào)量統(tǒng)一采用的是定時(shí)等待,在固定的時(shí)間內(nèi)如果服務(wù)器對(duì)于請(qǐng)求依然沒有反饋,信號(hào)量會(huì)自動(dòng)產(chǎn)生信號(hào),讓等待以超時(shí)的形式觸發(fā),終止客戶端的等待狀態(tài),相應(yīng)的任務(wù)也會(huì)終止移除;如果,服務(wù)器對(duì)于客戶的請(qǐng)求在指定的時(shí)間內(nèi)返回,此時(shí)在返回的線程中,會(huì)根據(jù)返回信息的編號(hào)ID找到對(duì)應(yīng)的任務(wù),賦予反饋信息,并觸發(fā)等待線程的信號(hào)量,讓請(qǐng)求返回,終止并移除 任務(wù)。
在視頻監(jiān)控API設(shè)計(jì)中,為了完善整個(gè)API的設(shè)計(jì),一般還需要:認(rèn)證授權(quán)、視頻協(xié)議、視頻播放連接管理、加解密、網(wǎng)絡(luò)通信、以及多線程和日志記錄等模塊相互協(xié)作。
為視頻監(jiān)控API 各個(gè)模塊相互關(guān)系圖,在圖中虛線部分為信號(hào)量的應(yīng)用組成,連接著所有模塊,為關(guān)鍵的樞紐,負(fù)責(zé)完成了指令傳送與接收、保持服務(wù)連接、和重建視頻連接等重要功能。
本文提供了一種基于信號(hào)量的視頻監(jiān)控客戶端API設(shè)計(jì)實(shí)現(xiàn)的解決方案,詳細(xì)講述了信號(hào)量在API中應(yīng)用的方法,并設(shè)計(jì)了整個(gè)API邏輯框架,實(shí)現(xiàn)了視頻監(jiān)控客戶端API多線程多并發(fā)的穩(wěn)定 調(diào)用。
[1]王楊,朱朝霞.基于信號(hào)量的Linux多線程同步研究[J].計(jì)算機(jī)與數(shù)字工程,2004.
[2]劉曉平,等.基于信號(hào)量的生產(chǎn)者一消費(fèi)者問(wèn)題設(shè)計(jì)與分析[J].合肥工業(yè)大學(xué)學(xué)報(bào),2008(10).
[3]百度文庫(kù).http://wenku.baidu.com.
G2
A
2096-0360(2015)14-0023-01
李賢軍,工作單位為安徽四創(chuàng)電子股份有限公司。