海康威視頻監控設備Web查看系統(一):概要篇

聲明:本系列文章只提供交流與學習使用。文章中全部涉及到海康威視設備的SDK都可在海康威視官方網站下載獲得。文章中全部除官方SDK意外的代碼都可隨意使用,任何涉及到海康威視公司利益的非正常使用由使用者本身負責,與本人無關。服務器

題外話:

     爲何在開始以前先說題外話呢?主要是爲了怕有人誤會,覺得這裏要寫的是一個關於視頻流處理的文章。其實這個系列的幾篇文章可能和視頻流的處理半毛錢關係都沒有,衝着視頻技術來的看官們,可能讓大家失望了。這個系列裏主要涉及的技術大概有.net的socket處理,C#寫ActiveX插件,少許的線程處理,以及對非託管C++庫的調用。網絡

另外一方面,這個系列文章說的是一個綜合的小項目,沒有複雜的功能,沒有嚴謹的項目管理過程,但卻有一個技術探索的通常過程。好了,題外話到此結束,下面是正題了。併發

 

需求描述:

     前一段時間公司兄弟部門提出需求,但願可以把公司部分公共區域的監控視頻共享出來給員工查看,這個事情最後落地到鄙人身上。通過多方聯繫,瞭解到需求實現的兩個制約條件。負載均衡

  1. 網絡條件:員工使用網段與監控設備所在網段爲不一樣網段,之間有物理隔離,沒法直接訪問。這個問題比較容易解決,遷移一下設備所在的網段就能解決。
  2. 設備限制:海康的監控攝像頭最多隻支持6個客戶端同時鏈接,沒法知足現有需求。這個比較難搞,聯繫廠商,廠家說不提供這一塊的服務,須要本身解決。這態度,我就呵呵了。

方案思路:

      現狀就是這樣,沒有其餘辦法,只能開發來解決這些問題了。其實想一想問題也沒多麻煩,數據只要採集到服務器上一切就搞定容易了。沿着這條初步思路,在海康官網下了一堆SDK,你還別說,東西挺全的,什麼方法都提供現成的了。什麼視頻採集、設備設置、視頻播放這些都有現成的接口能夠直接使用。更讓我驚喜的是,SDK裏竟然還提供C#和Java版本的DEMO,好吧,看到這些前面聯繫客服碰的釘子就不放心上了,可能客服MM那天失戀了,心情很差也說不定。socket

      說回正題,既然有這些給力的SDK就搭建一個原型來驗證把視頻數據經過服務端接到客戶端這種思路是否正確,具體實現下一篇會細說,這裏就長話短說,原型驗證成功。說明思路很正確,下一步就是具體的開發工做了,在原型基礎上一步步的重構,最後一個從視頻設備讀取視頻數據轉發給客戶端的系統就搞定了。性能

      通過進一步壓力測試之後發現有性能不能知足需求,需求要求可以知足公司近千人的使用,併發要求很高,而且視頻服務器要求必須及時處理全部數據到客戶端的轉發,不然客戶端將出現跳幀,卡頓的問題。解決壓力問題從兩個方面着手:學習

  1. 進一步重構優化現有代碼,提升性能。
  2. 設計分佈部署。

最後的最後上線的系統,部署方案如圖所示:測試

捕獲

從操做數據流方面整個序列圖以下:優化

捕獲

 

從兩個圖中很清楚的可以看出這個系統的設計思路,網站

    1. 視頻中轉服務器不斷從設備將視頻數據讀入本地;
    2. 客戶端打開訪問頁面時先從Web服務器獲取到視頻服務器的地址;
    3. 客戶端插件直接鏈接視頻服務器,讀取視頻數據解碼顯示。

固然從圖中也很容易發現系統的不足之處。

    1. 系統沒有對各視頻中轉服務器狀態進行跟蹤,可能分配給客戶端一個異常的節點;
    2. 因爲視頻中轉服務器之間沒法通信而且不存在管理節點,因此沒法作負載均衡;
    3. 視頻當中轉服務器節點書超過監控設備最大鏈接數時,沒法進一步擴容。

關於系統的不足之處,是下一個階段處理的問題,在這個系列裏不會處理。可是很是歡迎各位大仙大神討論。。。這裏就很少說了。

 

最後,細心的讀者必定已經發現前面段落中出現的橙色標記的關鍵字。

  1. 初步思路
  2. 搭建一個原型
  3. 原型驗證
  4. 重構
  5. 測試
  6. 進一步重構
  7. 循環五、6直到系統上線但不截止上線爲止。。。

    一個簡單方法論的實踐過程。但願對你們有用。

   

亂七八糟的寫了一堆,實在是想寫的點太多,寫的時候以爲這個重要,那個也重要,最後貌似什麼也沒寫,讓你們見笑了。下一篇應該是要寫服務端的功能設計及實現,但願有需求的人多關注。

相關文章
相關標籤/搜索