標籤:style blog java c tar color
聲明:本系列文章只提供交流與學習使用。文章中所有涉及到海康威視裝置的SDK均可在海康威視官方網站下載得到。文章中所有除官方SDK意外的代碼均可隨意使用,任何涉及到海康威視公司利益的非正常使用由使用者自己負責,與本人無關。
題外話:
為什麼在開始之前先說題外話呢?主要是為了怕有人誤會,以為這裡要寫的是一個關於視頻流處理的文章。其實這個系列的幾篇文章可能和視頻流的處理半毛錢關係都沒有,衝著視頻技術來的看官們,可能讓你們失望了。這個系列裡主要涉及的技術大概有.net的socket處理,C#寫ActiveX外掛程式,少量的線程處理,以及對非託管C++庫的調用。
另一方面,這個系列文章說的是一個綜合的小項目,沒有複雜的功能,沒有嚴謹的專案管理過程,但卻有一個技術探索的一般過程。好了,題外話到此結束,下面是正題了。
需求描述:
前一段時間公司兄弟部門提出需求,希望能夠把公司部分公用地區的監控視頻共用出來給員工查看,這個事情最後落地到鄙人身上。經過多方聯絡,瞭解到需求實現的兩個制約條件。
- 網路條件:員工使用網段與監控裝置所在網段為不同網段,之間有物理隔離,無法直接存取。這個問題比較容易解決,遷移一下裝置所在的網段就能解決。
- 裝置限制:海康的監控網路攝影機最多隻支援16個用戶端同時串連,無法滿足現有需求。這個比較難搞,聯絡廠商,廠家說不提供這一塊的服務,需要自己解決。這態度,我就呵呵了。
方案思路:
現狀就是這樣,沒有其他辦法,只能開發來解決這些問題了。其實想想問題也沒多麻煩,資料只要採集到伺服器上一切就搞定容易了。沿著這條初步思路,在海康官網下了一堆SDK,你還別說,東西挺全的,什麼方法都提供現成的了。什麼視頻採集、裝置設定、視頻播放這些都有現成的介面可以直接使用。更讓我驚喜的是,SDK裡居然還提供C#和Java版本的DEMO,好吧,看到這些前面聯絡客服碰的釘子就不放心上了,可能客服MM那天失戀了,心情不好也說不定。
說回正題,既然有這些給力的SDK就該搭建一個原型來驗證把視頻資料通過服務端接到用戶端這種思路是否正確,具體實現下一篇會細說,這裡就長話短說,原型驗證成功。說明思路很正確,下一步就是具體的開發工作了,在原型基礎上一步步的重構,最後一個從視頻裝置讀取視頻資料轉寄給用戶端的系統就搞定了。
經過進一步壓力測試以後發現有效能不能滿足需求,需求要求能夠滿足公司近千人的使用,並發要求很高,並且視頻伺服器要求必須及時處理所有資料到用戶端的轉寄,否則用戶端將出現跳幀,卡頓的問題。解決壓力問題從兩個方面著手:
- 進一步重構最佳化現有代碼,提高效能。
- 設計分布部署。
最後的最後上線的系統,部署方案:
從操作資料流方面整個順序圖表如下:
從兩個圖中很清楚的能夠看出這個系統的設計思路,
- 視頻代理服務器不斷從裝置將視頻資料讀入本地;
- 用戶端開啟訪問頁面時先從Web伺服器擷取到視頻伺服器的地址;
- 用戶端外掛程式直接連接視頻伺服器,讀取視頻資料解碼顯示。
當然也很容易發現系統的不足之處。
- 系統沒有對各視頻代理服務器狀態進行跟蹤,可能分配給用戶端一個異常的節點;
- 由於視頻代理服務器之間無法通訊並且不存在管理節點,所以無法做負載平衡;
- 視頻當代理服務器節點書超過監控裝置最大串連數時,無法進一步擴容。
關於系統的不足之處,是下一個階段處理的問題,在這個系列裡不會處理。但是非常歡迎各位大仙大神討論。。。這裡就不多說了。
最後,細心的讀者一定已經發現前面段落中出現的橙色標記的關鍵字。
- 初步思路
- 搭建一個原型
- 原型驗證
- 重構
- 測試
- 進一步重構
- 迴圈5、6直到系統上線但不截止上線為止。。。
一個簡單方法論的實踐過程。希望對大家有用。
亂七八糟的寫了一堆,實在是想寫的點太多,寫的時候覺得這個重要,那個也重要,最後貌似什麼也沒寫,讓大家見笑了。下一篇應該是要寫服務端的功能設計及實現,希望有需求的人多關注。