大華攝像機視頻正常雲臺控制半分鐘後失效排查記錄

場景服務器

       現場後臺流媒體服務器經過大華SDK取流和控制雲臺,視頻流正常,雲臺控制在流媒體啓動半分鐘以內操做正常,半分鐘以後控制失敗。ide

排查過程函數

1)懷疑是大華SDK版本跟現場設備不匹配測試

進入這個誤區是以前,遇到雲臺沒法控制的狀況,經過更新官網最新的SDK,解決問題,而且只是從新連接了新的LIB文件,並無替換掉現場的動態庫DLL文件,解決問題。與此不一樣的是以前是根本沒法控制雲臺。this

2)添加SDK雲臺控制API的調用狀況,查看錯誤碼,沒有相關的錯誤信息,而且發如今半分鐘以後,沒法收到任何的控制指令。排查是不是大華SDK調用阻塞致使的問題,可以正常返回,說明也不是阻塞的問題
操作系統

3)排查流媒體內部程序,雲臺控制指令的流向。流媒體的設計思路是啓動一個線程等待客戶端發送指令,其中調用C11的std::this_thread::sleep_for函數進行一段時間的休眠,發現半分鐘以後休眠函數進入了阻塞模式,沒法進行循環,採用Windows的原生態函數Sleep沒有這個問題。這個時候考慮到是不是操做系統的版本問題,這個是2016版本的Windows Server DataCenter。懷疑是在該系統上執行該函數,兼容性有問題。在公司的虛擬機中安裝測試,沒有任何的問題,沒法重現。線程

4)幸虧,能夠遠程,經過觀察服務器的時間,發現服務器的時間存在跳變的問題。設置中啓動了自動設置時間,可是沒有設置NTP同步時間服務器。每半分鐘會進行跳變,回到過去的某一個時間點,沒有什麼規律。設計

5)最終經過取消自動設置時間解決問題視頻

總結部署

1)無論是boost仍是C11的休眠函數都存在相對睡眠時間的問題,針對的是系統的當前時間,Sleep就沒有這個問題,Sleep函數不會根據系統的時間,猜想是根據程序的啓動時間開始算

2)可以正常控制半分鐘說明SDK沒有兼容性問題。由於流媒體須要受權的緣故,其實部署一套在其餘的電腦上,就能夠過濾掉這個兼容性問題

相關文章
相關標籤/搜索