EasyCVR平台支援多類型裝置、多協定方式接入,包括市場主流标準協定國标GB/T28181、RTMP、RTSP/Onvif協定等,以及廠家私有協定如海康SDK、大華SDK、海康Ehome等。平台可将接入的流媒體進行處理及分發,分發的視訊格式包括RTSP、RTMP、FLV、HLS、WebRTC等。
我們在測試時發現,通過大華SDK将裝置接入出現異常問題。在裝置的背景程式中,顯示有1台裝置線上,但是使用SDK登入大華裝置,線上數為0,與實際線上數量不符。
于是我們針對該情況進行了排查。檢視文檔得知,CLIENT_QueryDevInfo是指擷取裝置是否線上情況。
大華SDK的文檔說明資訊如下:
在實際中使用此函數,輸出的NET_OUT_GET_CAMERA_STATEINFO結構體如下,emConnectionState字段值為0,并沒有輸出裝置的線上和離線狀态。
文檔中說明,emConnectionState為2才是連接配接狀态,是以此函數無法擷取到裝置的線上離線情況。
從文檔中發現,擷取裝置的線上狀态不僅僅隻有這一處。CLIENT_QueryNewSystemInfo函數也可擷取裝置線上、離線狀态。
解決方法如下:
在登入裝置時,調用CLIENT_QueryNewSystemInfo函數擷取裝置的線上離線情況,如下:
STATUS.devStatus記憶體位址為(json資料):