聲明:本系列文章只提供交流與學習使用。文章中全部涉及到海康威視設備的SDK都可在海康威視官方網站下載獲得。文章中全部除官方SDK意外的代碼都可隨意使用,任何涉及到海康威視公司利益的非正常使用由使用者本身負責,與本人無關。服務器
爲何在開始以前先說題外話呢?主要是爲了怕有人誤會,覺得這裏要寫的是一個關於視頻流處理的文章。其實這個系列的幾篇文章可能和視頻流的處理半毛錢關係都沒有,衝着視頻技術來的看官們,可能讓大家失望了。這個系列裏主要涉及的技術大概有.net的socket處理,C#寫ActiveX插件,少許的線程處理,以及對非託管C++庫的調用。網絡
另外一方面,這個系列文章說的是一個綜合的小項目,沒有複雜的功能,沒有嚴謹的項目管理過程,但卻有一個技術探索的通常過程。好了,題外話到此結束,下面是正題了。併發
前一段時間公司兄弟部門提出需求,但願可以把公司部分公共區域的監控視頻共享出來給員工查看,這個事情最後落地到鄙人身上。通過多方聯繫,瞭解到需求實現的兩個制約條件。負載均衡
現狀就是這樣,沒有其餘辦法,只能開發來解決這些問題了。其實想一想問題也沒多麻煩,數據只要採集到服務器上一切就搞定容易了。沿着這條初步思路,在海康官網下了一堆SDK,你還別說,東西挺全的,什麼方法都提供現成的了。什麼視頻採集、設備設置、視頻播放這些都有現成的接口能夠直接使用。更讓我驚喜的是,SDK裏竟然還提供C#和Java版本的DEMO,好吧,看到這些前面聯繫客服碰的釘子就不放心上了,可能客服MM那天失戀了,心情很差也說不定。socket
說回正題,既然有這些給力的SDK就該搭建一個原型來驗證把視頻數據經過服務端接到客戶端這種思路是否正確,具體實現下一篇會細說,這裏就長話短說,原型驗證成功。說明思路很正確,下一步就是具體的開發工做了,在原型基礎上一步步的重構,最後一個從視頻設備讀取視頻數據轉發給客戶端的系統就搞定了。性能
通過進一步壓力測試之後發現有性能不能知足需求,需求要求可以知足公司近千人的使用,併發要求很高,而且視頻服務器要求必須及時處理全部數據到客戶端的轉發,不然客戶端將出現跳幀,卡頓的問題。解決壓力問題從兩個方面着手:學習
最後的最後上線的系統,部署方案如圖所示:測試
從操做數據流方面整個序列圖以下:優化
從兩個圖中很清楚的可以看出這個系統的設計思路,網站
固然從圖中也很容易發現系統的不足之處。
關於系統的不足之處,是下一個階段處理的問題,在這個系列裏不會處理。可是很是歡迎各位大仙大神討論。。。這裏就很少說了。
最後,細心的讀者必定已經發現前面段落中出現的橙色標記的關鍵字。
一個簡單方法論的實踐過程。但願對你們有用。
亂七八糟的寫了一堆,實在是想寫的點太多,寫的時候以爲這個重要,那個也重要,最後貌似什麼也沒寫,讓你們見笑了。下一篇應該是要寫服務端的功能設計及實現,但願有需求的人多關注。