背景
視頻監(jiān)控軟件以往一直使用各相機(jī)廠家的SDK操作相機(jī)吴叶,包括預(yù)覽、云臺(tái)等操作序臂。廠家的不同蚌卤、相機(jī)型號(hào)不同、相機(jī)版本不斷更新、生產(chǎn)環(huán)境(Windows逊彭、麒麟)等因素咸灿,不斷變更的情況下軟件為了做各種適配性適應(yīng),其中包含的SDK實(shí)在太多了侮叮,維護(hù)起來很困難避矢,而且有的甚至還沖突不能兼容,所以視頻監(jiān)控做web端趨勢(shì)明顯囊榜,預(yù)覽可以通過流媒體轉(zhuǎn)碼來做审胸,云臺(tái)控制可以使用onvif。
介紹
onvif本身就是做這個(gè)事的锦聊,現(xiàn)在各廠家的相機(jī)基本都支持onvif協(xié)議,即使不帶云臺(tái)的相機(jī)也支持onvif協(xié)議箩绍。
我們?cè)诰W(wǎng)頁(yè)中預(yù)覽的工作已經(jīng)完成孔庭,現(xiàn)在就開始做云臺(tái)控制,網(wǎng)頁(yè)中操作云臺(tái)區(qū)域材蛛,通過http發(fā)送到onvif服務(wù)中圆到,使用Java調(diào)用onvif指令完成操作。
項(xiàng)目
https://gitee.com/premeditate/OnvifServer.git
主要的是/lib里面的jar包卑吭,提供了onvif的一些列操作
jar包下載地址:https://github.com/milg0/onvif-java-lib
項(xiàng)目中提供了網(wǎng)頁(yè)中所需的服務(wù)芽淡,你可能只能運(yùn)行起來,連上相機(jī)也不能用豆赏,因?yàn)檫@里有關(guān)于流媒體服務(wù)的接口挣菲,其它接口都是可用的,使用本地相機(jī)做測(cè)試是可以的掷邦,可以參考/test里面的測(cè)試代碼白胀。
onvif工作流程就是根據(jù)相機(jī)的基本信息創(chuàng)建onvif設(shè)備對(duì)象,這個(gè)對(duì)象可以獲取到相機(jī)的設(shè)備信息抚岗、視頻流信息(RTSP地址)或杠、視頻參數(shù)等,還有onvif連接相機(jī)的token宣蔚、云臺(tái)控制對(duì)象等向抢,在這里我們需要的就是云臺(tái)控制對(duì)象,拿到這個(gè)對(duì)象調(diào)用指定函數(shù)就可以控制云臺(tái)胚委。
在測(cè)試中發(fā)現(xiàn)挟鸠,創(chuàng)建onvif對(duì)象耗時(shí)1.8s,獲取token耗時(shí)0.8s亩冬,獲取云臺(tái)控制對(duì)象0.2s兄猩,調(diào)用控制函數(shù)80s,在整個(gè)操作過程中可以看到大部分時(shí)間都是在初始化對(duì)象上面,會(huì)讓用戶感覺到卡枢冤,操作過一會(huì)才有反應(yīng)鸠姨。所以在項(xiàng)目中我們?cè)诔绦騿?dòng)時(shí)根據(jù)相機(jī)信息就將這些操作對(duì)象創(chuàng)建出來存儲(chǔ)在內(nèi)存中(測(cè)試發(fā)現(xiàn)這些對(duì)象只要初始化出來,使用中即使相機(jī)斷電離線淹真,再次上電還是可以接著用的)讶迁,api中拿到這些對(duì)象直接用,這樣基本就是用戶一操作就用響應(yīng)核蘸,速度還是很快的巍糯。但是這樣有一個(gè)弊端,程序啟動(dòng)就讀取配置文件客扎,在程序運(yùn)行中修改了配置文件是不能立即生效的祟峦,需要重啟程序才行。
服務(wù)api都在MonitorController.java中徙鱼,提供了云臺(tái)相關(guān)的幾個(gè)接口宅楞。