我的一些學習經驗:ONVIF

weixin_34353714發表於2017-08-16

李遲按:

這個文章講講筆者學習ONVIF的經歷。

其實,早在2013年就接觸了ONVIF。當時研發的新平臺任務有ONVIF的需求。當時我記得自己使用GSOAP生成ONVIF框架程式碼,還錄製了一個視訊,在會上講給同事聽。後來利用業餘時間看了ONVIF標準,一開始看得不明不白,基本不懂在看什麼,看了2遍,發現了些門道,再看一遍,發現原來不過如此。由於公司在該新平臺研發任務之前已經有其它部門同事實現了ONVIF,所以專案上直接使用。我用業餘時間看,主要還是因為對此有興趣;二來因為公司專案使用的是網路上人家生成好的程式碼。我不習慣直接使用人家的東西,必須要自己弄明白才行。後來“人家的程式碼”一直被使用著,公司組織變化後,ONVIF和流媒體任務落到部門所管,不過是其它同事維護著。所以我對ONVIF的瞭解,止步於此。

去年,公司參加ONVIF組織的一次會議,結果慘敗,除了看視訊外,其它功能基本沒實現。公司決策對ONVIF進行重新梳理並要求在春節前部署到所有產品上(當然是不可能的)。當時老大是安排給另一位同事進行。再後來,領導看到任務量大,我作為當時部門唯一“機動人員”,光榮地被領導安排協助任務。終於在春節後完成了第一階段工作。

後來,這個同事被派到大腿部門工作了,我光榮地接手ONVIF的第二階段任務。但還是在該同事主導下進行,因為老大不放心我這麼一位新手接手,怕搞亂重構後程式碼架構。實際上,我必須有能力獨立承擔此事。年中時,該同事果然終於轉崗到那個部門了,我不出意料外地接手ONVIF的全部工作。自此,除了驅動、Linux系統,我還有ONVIF的任務。

在作為機動人員參與協助ONVIF任務後,又重新看了新版本的標準文件。由於這次真的要寫程式碼實現,所以看得比較細。網上有很多講ONVIF的文章,但很多是重複的,且是老版本的。不過作為入門資料還是有作用的。

經過較長時間編碼的洗禮,對ONVIF有進一步的認知。比如IP地址子網掩碼使用的是數字形式而不是常見的字串。由於ONVIF不同命令使用的欄位引數不固定,所以我們引入了C++的STL。像IP地址允許有多個;視訊解析度允許有多個,等等。這段時間也使得我在實際編碼中儘量向C++ STL靠攏。

後來,經過考慮,決定在業餘時間自己實現一個ONVIF客戶端。

這樣,對於ONVIF服務端和客戶端都進行實踐了,對此標準掌握也更加牢固。

當然,限於資源,只能實現了裝置管理、媒體服務以及影象服務,其它如PTZ和事件監控,等到條件成熟或公司安排再進行了。

李遲 2016.10 中旬

相關文章